Projects
Essentials
libde265
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 3
View file
libde265.changes
Changed
@@ -1,4 +1,15 @@ ------------------------------------------------------------------- +Tue May 8 20:49:06 UTC 2018 - zaitor@opensuse.org + +- Update to version 1.0.3: + + Fixes for compiler build problems. + + Security fixes, mainly checking for corrupted input streams. +- Add debian and upstream patches: + + libde265-only_export_decoder_api.patch + + libde265-disable_tools.patch + + libde265-use_new_FFMPEG_enum_names.patch + +------------------------------------------------------------------- Thu Nov 30 21:31:13 UTC 2017 - zaitor@opensuse.org - Add baselibs.conf, build 32bit support for x86_64.
View file
libde265.spec
Changed
@@ -15,7 +15,7 @@ %define so_ver 0 Name: libde265 -Version: 1.0.2 +Version: 1.0.3 Release: 0 Summary: Open H.265 video codec implementation License: LGPL-3.0 @@ -24,6 +24,10 @@ Source0: https://github.com/strukturag/libde265/releases/download/v%{version}/%{name}-%{version}.tar.gz Source99: baselibs.conf +Patch0: libde265-only_export_decoder_api.patch +Patch1: libde265-disable_tools.patch +Patch2: libde265-use_new_FFMPEG_enum_names.patch + BuildRequires: autoconf BuildRequires: automake BuildRequires: gcc-c++ @@ -60,7 +64,7 @@ are provided by this package. %prep -%autosetup +%autosetup -p1 %build NOCONFIGURE=1 ./autogen.sh @@ -76,15 +80,6 @@ %make_install find %{buildroot} -type f -name "*.la" -delete -print -# Don't package internal development tools. -rm %{buildroot}%{_bindir}/bjoentegaard -rm %{buildroot}%{_bindir}/block-rate-estim -rm %{buildroot}%{_bindir}/enc265 -rm %{buildroot}%{_bindir}/gen-enc-table -rm %{buildroot}%{_bindir}/rd-curves -rm %{buildroot}%{_bindir}/tests -rm %{buildroot}%{_bindir}/yuv-distortion - %post -n %{name}-%{so_ver} -p /sbin/ldconfig %postun -n %{name}-%{so_ver} -p /sbin/ldconfig @@ -99,4 +94,3 @@ %{_libdir}/pkgconfig/%{name}.pc %changelog -
View file
libde265-disable_tools.patch
Added
@@ -0,0 +1,38 @@ +Description: Disable building of some internal tools that no longer link + because internal symbols are not exported. +Author: Joachim Bauch <bauch@struktur.de> +--- a/Makefile.am ++++ b/Makefile.am +@@ -8,10 +8,6 @@ + SUBDIRS+=dec265 + endif + +-SUBDIRS+=enc265 +-SUBDIRS+=tools +-SUBDIRS+=acceleration-speed +- + if ENABLE_SHERLOCK265 + SUBDIRS+=sherlock265 + endif +--- a/dec265/Makefile.am ++++ b/dec265/Makefile.am +@@ -1,5 +1,5 @@ + +-bin_PROGRAMS = dec265 hdrcopy ++bin_PROGRAMS = dec265 + + AM_CPPFLAGS = -I../libde265 + +@@ -9,12 +9,6 @@ + dec265_LDADD = ../libde265/libde265.la -lstdc++ + dec265_SOURCES = dec265.cc + +-hdrcopy_DEPENDENCIES = ../libde265/libde265.la +-hdrcopy_CXXFLAGS = +-hdrcopy_LDFLAGS = +-hdrcopy_LDADD = ../libde265/libde265.la -lstdc++ +-hdrcopy_SOURCES = hdrcopy.cc +- + if HAVE_VIDEOGFX + dec265_CXXFLAGS += $(VIDEOGFX_CFLAGS) + dec265_LDFLAGS += $(VIDEOGFX_LIBS)
View file
libde265-only_export_decoder_api.patch
Added
@@ -0,0 +1,286 @@ +Description: Only export symbols defined in the decoder API. + The encoder API is not final yet, so upstream exports all symbols to make + development easier. For packaging we only want to expose the public API. +Author: Joachim Bauch <bauch@struktur.de> +--- a/libde265/encoder/Makefile.am ++++ b/libde265/encoder/Makefile.am +@@ -10,6 +10,18 @@ + encpicbuf.h encpicbuf.cc \ + sop.h sop.cc + ++libde265_encoder_la_CFLAGS = \ ++ $(CFLAG_VISIBILITY) \ ++ -DLIBDE265_EXPORTS ++libde265_encoder_la_CXXFLAGS += \ ++ $(CFLAG_VISIBILITY) \ ++ -DLIBDE265_EXPORTS ++ ++if HAVE_VISIBILITY ++ libde265_encoder_la_CFLAGS += -DHAVE_VISIBILITY ++ libde265_encoder_la_CXXFLAGS += -DHAVE_VISIBILITY ++endif ++ + SUBDIRS=algo + libde265_encoder_la_LIBADD = algo/libde265_encoder_algo.la + +--- a/libde265/encoder/algo/Makefile.am ++++ b/libde265/encoder/algo/Makefile.am +@@ -17,5 +17,13 @@ + tb-rateestim.h tb-rateestim.cc \ + pb-mv.h pb-mv.cc + ++libde265_encoder_algo_la_CXXFLAGS += \ ++ $(CFLAG_VISIBILITY) \ ++ -DLIBDE265_EXPORTS ++ ++if HAVE_VISIBILITY ++ libde265_encoder_algo_la_CXXFLAGS += -DHAVE_VISIBILITY ++endif ++ + EXTRA_DIST = \ + CMakeLists.txt +--- a/configure.ac ++++ b/configure.ac +@@ -50,9 +50,7 @@ + fi + changequote([,])dnl + +-dnl gl_VISIBILITY +-dnl : In encoder branch, we still export all library symbols : +-HAVE_VISIBILITY=0 ++gl_VISIBILITY + AM_CONDITIONAL([HAVE_VISIBILITY], [test "x$HAVE_VISIBILITY" != "x0"]) + + # Checks for header files. +--- a/libde265/image-io.cc ++++ b/libde265/image-io.cc +@@ -183,7 +183,7 @@ + } + + +-LIBDE265_API PacketSink_File::~PacketSink_File() ++PacketSink_File::~PacketSink_File() + { + if (mFH) { + fclose(mFH); +@@ -191,7 +191,7 @@ + } + + +-LIBDE265_API void PacketSink_File::set_filename(const char* filename) ++void PacketSink_File::set_filename(const char* filename) + { + assert(mFH==NULL); + +@@ -199,7 +199,7 @@ + } + + +-LIBDE265_API void PacketSink_File::send_packet(const uint8_t* data, int n) ++void PacketSink_File::send_packet(const uint8_t* data, int n) + { + uint8_t startCode[3]; + startCode[0] = 0; +--- a/libde265/image-io.h ++++ b/libde265/image-io.h +@@ -30,17 +30,17 @@ + class ImageSource + { + public: +- LIBDE265_API ImageSource(); +- virtual LIBDE265_API ~ImageSource() { } ++ ImageSource(); ++ virtual ~ImageSource() { } + + //enum ImageStatus { Available, Waiting, EndOfVideo }; + + //virtual ImageStatus get_status() = 0; +- virtual LIBDE265_API de265_image* get_image(bool block=true) = 0; +- virtual LIBDE265_API void skip_frames(int n) = 0; ++ virtual de265_image* get_image(bool block=true) = 0; ++ virtual void skip_frames(int n) = 0; + +- virtual LIBDE265_API int get_width() const = 0; +- virtual LIBDE265_API int get_height() const = 0; ++ virtual int get_width() const = 0; ++ virtual int get_height() const = 0; + }; + + +@@ -48,17 +48,17 @@ + class ImageSource_YUV : public ImageSource + { + public: +- LIBDE265_API ImageSource_YUV(); +- virtual LIBDE265_API ~ImageSource_YUV(); ++ ImageSource_YUV(); ++ virtual ~ImageSource_YUV(); + +- bool LIBDE265_API set_input_file(const char* filename, int w,int h); ++ bool set_input_file(const char* filename, int w,int h); + + //virtual ImageStatus get_status(); +- virtual LIBDE265_API de265_image* get_image(bool block=true); +- virtual LIBDE265_API void skip_frames(int n); ++ virtual de265_image* get_image(bool block=true); ++ virtual void skip_frames(int n); + +- virtual LIBDE265_API int get_width() const { return width; } +- virtual LIBDE265_API int get_height() const { return height; } ++ virtual int get_width() const { return width; } ++ virtual int get_height() const { return height; } + + private: + FILE* mFH; +@@ -74,20 +74,20 @@ + class ImageSink + { + public: +- virtual LIBDE265_API ~ImageSink() { } ++ virtual ~ImageSink() { } + +- virtual LIBDE265_API void send_image(const de265_image* img) = 0; ++ virtual void send_image(const de265_image* img) = 0; + }; + + class ImageSink_YUV : public ImageSink + { + public: +- LIBDE265_API ImageSink_YUV() : mFH(NULL) { } +- LIBDE265_API ~ImageSink_YUV(); ++ ImageSink_YUV() : mFH(NULL) { } ++ ~ImageSink_YUV(); + +- bool LIBDE265_API set_filename(const char* filename); ++ bool set_filename(const char* filename); + +- virtual LIBDE265_API void send_image(const de265_image* img); ++ virtual void send_image(const de265_image* img); + + private: + FILE* mFH; +@@ -98,21 +98,21 @@ + class PacketSink + { + public: +- virtual LIBDE265_API ~PacketSink() { } ++ virtual ~PacketSink() { } + +- virtual LIBDE265_API void send_packet(const uint8_t* data, int n) = 0; ++ virtual void send_packet(const uint8_t* data, int n) = 0; + }; + + + class PacketSink_File : public PacketSink + { + public: +- LIBDE265_API PacketSink_File(); +- virtual LIBDE265_API ~PacketSink_File(); ++ PacketSink_File(); ++ virtual ~PacketSink_File(); + +- LIBDE265_API void set_filename(const char* filename); ++ void set_filename(const char* filename); + +- virtual LIBDE265_API void send_packet(const uint8_t* data, int n); ++ virtual void send_packet(const uint8_t* data, int n); + + private: + FILE* mFH; +--- a/libde265/configparam.h ++++ b/libde265/configparam.h +@@ -95,7 +95,7 @@ + bool hasLongOption() const { return true; } //mLongOption!=NULL; } + std::string getLongOption() const { return mLongOption ? std::string(mLongOption) : get_name(); } + +- virtual LIBDE265_API bool processCmdLineArguments(char** argv, int* argc, int idx) { return false; } ++ virtual bool processCmdLineArguments(char** argv, int* argc, int idx) { return false; } + + + +@@ -132,7 +132,7 @@ + virtual std::string get_default_string() const { return default_value ? "true":"false"; } + + virtual std::string getTypeDescr() const { return "(boolean)"; } +- virtual LIBDE265_API bool processCmdLineArguments(char** argv, int* argc, int idx) { set(true); return true; } ++ virtual bool processCmdLineArguments(char** argv, int* argc, int idx) { set(true); return true; } + + bool set(bool v) { value_set=true; value=v; return true; } + +@@ -162,10 +162,10 @@ + virtual bool has_default() const { return default_set; } + + void set_default(std::string v) { default_value=v; default_set=true; } +- virtual LIBDE265_API std::string get_default_string() const { return default_value; } ++ virtual std::string get_default_string() const { return default_value; } + +- virtual LIBDE265_API std::string getTypeDescr() const { return "(string)"; } +- virtual LIBDE265_API bool processCmdLineArguments(char** argv, int* argc, int idx); ++ virtual std::string getTypeDescr() const { return "(string)"; } ++ virtual bool processCmdLineArguments(char** argv, int* argc, int idx); + + bool set(std::string v) { value_set=true; value=v; return true; } + +@@ -201,10 +201,10 @@ + virtual bool has_default() const { return default_set; } + + void set_default(int v) { default_value=v; default_set=true; } +- virtual LIBDE265_API std::string get_default_string() const; ++ virtual std::string get_default_string() const; + +- virtual LIBDE265_API std::string getTypeDescr() const; +- virtual LIBDE265_API bool processCmdLineArguments(char** argv, int* argc, int idx); ++ virtual std::string getTypeDescr() const; ++ virtual bool processCmdLineArguments(char** argv, int* argc, int idx); + + bool set(int v) { + if (is_valid(v)) { value_set=true; value=v; return true; } +@@ -239,7 +239,7 @@ + virtual std::vector<std::string> get_choice_names() const = 0; + + virtual std::string getTypeDescr() const; +- virtual LIBDE265_API bool processCmdLineArguments(char** argv, int* argc, int idx); ++ virtual bool processCmdLineArguments(char** argv, int* argc, int idx); + + const char** get_choices_string_table() const; + +@@ -368,10 +368,10 @@ + config_parameters() : param_string_table(NULL) { } + ~config_parameters() { delete[] param_string_table; } + +- void LIBDE265_API add_option(option_base* o); ++ void add_option(option_base* o); + +- void LIBDE265_API print_params() const; +- bool LIBDE265_API parse_command_line_params(int* argc, char** argv, int* first_idx=NULL, ++ void print_params() const; ++ bool parse_command_line_params(int* argc, char** argv, int* first_idx=NULL, + bool ignore_unknown_options=false); + + +--- a/libde265/quality.h ++++ b/libde265/quality.h +@@ -26,11 +26,11 @@ + #include <libde265/image.h> + + +-LIBDE265_API uint32_t SSD(const uint8_t* img, int imgStride, ++uint32_t SSD(const uint8_t* img, int imgStride, + const uint8_t* ref, int refStride, + int width, int height); + +-LIBDE265_API uint32_t SAD(const uint8_t* img, int imgStride, ++uint32_t SAD(const uint8_t* img, int imgStride, + const uint8_t* ref, int refStride, + int width, int height); + +@@ -41,7 +41,7 @@ + LIBDE265_API double PSNR(double mse); + + +-LIBDE265_API uint32_t compute_distortion_ssd(const de265_image* img1, const de265_image* img2, ++uint32_t compute_distortion_ssd(const de265_image* img1, const de265_image* img2, + int x0, int y0, int log2size, int cIdx); + + #endif +
View file
libde265-use_new_FFMPEG_enum_names.patch
Added
@@ -0,0 +1,23 @@ +From e5b8e2e703d608777afadc54955bd396e4211da0 Mon Sep 17 00:00:00 2001 +From: Dirk Farin <farin@struktur.de> +Date: Thu, 19 Apr 2018 13:15:18 +0200 +Subject: [PATCH] use new FFMPEG enum names + +--- + sherlock265/VideoDecoder.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sherlock265/VideoDecoder.cc b/sherlock265/VideoDecoder.cc +index 119f6152..b829e1c7 100644 +--- a/sherlock265/VideoDecoder.cc ++++ b/sherlock265/VideoDecoder.cc +@@ -237,7 +237,7 @@ void VideoDecoder::convert_frame_swscale(const de265_image* img, QImage & qimg) + } + width = img->get_width(); + height = img->get_height(); +- sws = sws_getContext(width, height, PIX_FMT_YUV420P, width, height, PIX_FMT_BGRA, SWS_FAST_BILINEAR, NULL, NULL, NULL); ++ sws = sws_getContext(width, height, AV_PIX_FMT_YUV420P, width, height, AV_PIX_FMT_BGRA, SWS_FAST_BILINEAR, NULL, NULL, NULL); + } + + int stride[3]; +
View file
libde265-1.0.2.tar.gz/TODO
Deleted
@@ -1,13 +0,0 @@ -/mnt/temp/dirk/yuv/flower_garden_422_720x486_30fps_simple_intra.bin - -diff at byte 00196800 -frame 3 -channel: 0 -pixel position: x=384;y=125 -file A: 56 -file B: 86 - - -- API: request IDR-frame -- API: return SPS header infos -- rate-control: specify bit-rate
View file
libde265-1.0.2.tar.gz/libde265/encoder/analyze.cc
Deleted
@@ -1,371 +0,0 @@ -/* - * H.265 video codec. - * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> - * - * Authors: struktur AG, Dirk Farin <farin@struktur.de> - * - * This file is part of libde265. - * - * libde265 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libde265 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with libde265. If not, see <http://www.gnu.org/licenses/>. - */ - - -#include "libde265/encoder/analyze.h" -#include "libde265/encoder/encoder-context.h" -#include <assert.h> -#include <limits> -#include <math.h> -#include <iostream> - - -#define ENCODER_DEVELOPMENT 0 -#define COMPARE_ESTIMATED_RATE_TO_REAL_RATE 0 - - -static int IntraPredModeCnt[7][35]; -static int MPM_used[7][35]; - -static int IntraPredModeCnt_total[35]; -static int MPM_used_total[35]; - -void statistics_IntraPredMode(const encoder_context* ectx, int x,int y, const enc_cb* cb) -{ - if (cb->split_cu_flag) { - for (int i=0;i<4;i++) - if (cb->children[i]) { - statistics_IntraPredMode(ectx, childX(x,i,cb->log2Size), childY(y,i,cb->log2Size), cb->children[i]); - } - } - else { - int cnt; - int size = cb->log2Size; - - if (cb->PartMode == PART_NxN) { cnt=4; size--; } else cnt=1; - - for (int i=0;i<cnt;i++) { - IntraPredModeCnt[size][ cb->intra.pred_mode[i] ]++; - IntraPredModeCnt_total[ cb->intra.pred_mode[i] ]++; - - int xi = childX(x,i,cb->log2Size); - int yi = childY(y,i,cb->log2Size); - - int candModeList[3]; - fillIntraPredModeCandidates(candModeList,xi,yi, xi>0, yi>0, ectx->img); - - int predmode = cb->intra.pred_mode[i]; - if (candModeList[0]==predmode || - candModeList[1]==predmode || - candModeList[2]==predmode) { - MPM_used[size][predmode]++; - MPM_used_total[predmode]++; - } - } - } -} - -void statistics_print() -{ - for (int i=0;i<35;i++) { - printf("%d",i); - printf(" %d %d",IntraPredModeCnt_total[i], MPM_used_total[i]); - - for (int k=2;k<=6;k++) { - printf(" %d %d",IntraPredModeCnt[k][i], MPM_used[k][i]); - } - - printf("\n"); - } -} - - -void print_tb_tree_rates(const enc_tb* tb, int level) -{ - for (int i=0;i<level;i++) - std::cout << " "; - - std::cout << "TB rate=" << tb->rate << " (" << tb->rate_withoutCbfChroma << ")\n"; - if (tb->split_transform_flag) { - for (int i=0;i<4;i++) - print_tb_tree_rates(tb->children[i], level+1); - } -} - - -void print_cb_tree_rates(const enc_cb* cb, int level) -{ - for (int i=0;i<level;i++) - std::cout << " "; - - std::cout << "CB rate=" << cb->rate << "\n"; - if (cb->split_cu_flag) { - for (int i=0;i<4;i++) - print_cb_tree_rates(cb->children[i], level+1); - } - else { - print_tb_tree_rates(cb->transform_tree, level+1); - } -} - - -double encode_image(encoder_context* ectx, - const de265_image* input, - EncodingAlgorithm& algo) -{ - int stride=input->get_image_stride(0); - - int w = ectx->sps.pic_width_in_luma_samples; - int h = ectx->sps.pic_height_in_luma_samples; - - // --- create reconstruction image --- - ectx->img = new de265_image; - ectx->img->vps = ectx->vps; - ectx->img->sps = ectx->sps; - ectx->img->pps = ectx->pps; - ectx->img->PicOrderCntVal = input->PicOrderCntVal; - - ectx->img->alloc_image(w,h, de265_chroma_420, &ectx->sps, true, - NULL /* no decctx */, ectx, 0,NULL,false); - //ectx->img->alloc_encoder_data(&ectx->sps); - ectx->img->clear_metadata(); - -#if 1 - if (1) { - ectx->prediction = new de265_image; - ectx->prediction->alloc_image(w,h, de265_chroma_420, &ectx->sps, false /* no metadata */, - NULL /* no decctx */, NULL /* no encctx */, 0,NULL,false); - ectx->prediction->vps = ectx->vps; - ectx->prediction->sps = ectx->sps; - ectx->prediction->pps = ectx->pps; - } -#endif - - ectx->active_qp = ectx->pps.pic_init_qp; // TODO take current qp from slice - - - ectx->cabac_ctx_models.init(ectx->shdr->initType, ectx->shdr->SliceQPY); - ectx->cabac_encoder.set_context_models(&ectx->cabac_ctx_models); - - - context_model_table modelEstim; - CABAC_encoder_estim cabacEstim; - - modelEstim.init(ectx->shdr->initType, ectx->shdr->SliceQPY); - cabacEstim.set_context_models(&modelEstim); - - - int Log2CtbSize = ectx->sps.Log2CtbSizeY; - - uint8_t* luma_plane = ectx->img->get_image_plane(0); - uint8_t* cb_plane = ectx->img->get_image_plane(1); - uint8_t* cr_plane = ectx->img->get_image_plane(2); - - - // encode CTB by CTB - - for (int y=0;y<ectx->sps.PicHeightInCtbsY;y++) - for (int x=0;x<ectx->sps.PicWidthInCtbsY;x++) - { - ectx->img->set_SliceAddrRS(x, y, ectx->shdr->SliceAddrRS); - - int x0 = x<<Log2CtbSize; - int y0 = y<<Log2CtbSize; - - logtrace(LogSlice,"encode CTB at %d %d\n",x0,y0); - - // make a copy of the context model that we can modify for testing alternatives - - context_model_table ctxModel; - //copy_context_model_table(ctxModel, ectx->ctx_model_bitstream); - ctxModel = ectx->cabac_ctx_models.copy(); - ctxModel = modelEstim.copy(); // TODO TMP - - disable_logging(LogSymbols); - enable_logging(LogSymbols); // TODO TMP - - //printf("================================================== ANALYZE\n"); - -#if 1 - /* - enc_cb* cb = encode_cb_may_split(ectx, ctxModel, - input, x0,y0, Log2CtbSize, 0, qp); - */ - - enc_cb* cb = algo.getAlgoCTBQScale()->analyze(ectx,ctxModel, x0,y0); -#else - float minCost = std::numeric_limits<float>::max(); - int bestQ = 0; - int qp = ectx->params.constant_QP; - - enc_cb* cb; - for (int q=1;q<51;q++) { - copy_context_model_table(ctxModel, ectx->ctx_model_bitstream); - - enc_cb* cbq = encode_cb_may_split(ectx, ctxModel, - input, x0,y0, Log2CtbSize, 0, q); - - float cost = cbq->distortion + ectx->lambda * cbq->rate; - if (cost<minCost) { minCost=cost; bestQ=q; } - - if (q==qp) { cb=cbq; } - } - - printf("Q %d\n",bestQ); - fflush(stdout); -#endif - - //print_cb_tree_rates(cb,0); - - //statistics_IntraPredMode(ectx, x0,y0, cb); - - - // --- write bitstream --- - - //ectx->switch_CABAC_to_bitstream(); - - enable_logging(LogSymbols); - - encode_ctb(ectx, &ectx->cabac_encoder, cb, x,y); - - //printf("================================================== WRITE\n"); - - - if (COMPARE_ESTIMATED_RATE_TO_REAL_RATE) { - float realPre = cabacEstim.getRDBits(); - encode_ctb(ectx, &cabacEstim, cb, x,y); - float realPost = cabacEstim.getRDBits(); - - printf("estim: %f real: %f diff: %f\n", - cb->rate, - realPost-realPre, - cb->rate - (realPost-realPre)); - } - - - int last = (y==ectx->sps.PicHeightInCtbsY-1 && - x==ectx->sps.PicWidthInCtbsY-1); - ectx->cabac_encoder.write_CABAC_term_bit(last); - - - delete cb; - - //ectx->free_all_pools(); - } - - - //statistics_print(); - - - delete ectx->prediction; - - - // frame PSNR - - double psnr = PSNR(MSE(input->get_image_plane(0), input->get_image_stride(0), - luma_plane, ectx->img->get_image_stride(0), - input->get_width(), input->get_height())); - return psnr; -} - - - -void EncodingAlgorithm_Custom::setParams(encoder_params& params) -{ - // build algorithm tree - - mAlgo_CTB_QScale_Constant.setChildAlgo(&mAlgo_CB_Split_BruteForce); - mAlgo_CB_Split_BruteForce.setChildAlgo(&mAlgo_CB_Skip_BruteForce); - - mAlgo_CB_Skip_BruteForce.setSkipAlgo(&mAlgo_CB_MergeIndex_Fixed); - mAlgo_CB_Skip_BruteForce.setNonSkipAlgo(&mAlgo_CB_IntraInter_BruteForce); - //&mAlgo_CB_InterPartMode_Fixed); - - Algo_CB_IntraPartMode* algo_CB_IntraPartMode = NULL; - switch (params.mAlgo_CB_IntraPartMode()) { - case ALGO_CB_IntraPartMode_BruteForce: - algo_CB_IntraPartMode = &mAlgo_CB_IntraPartMode_BruteForce; - break; - case ALGO_CB_IntraPartMode_Fixed: - algo_CB_IntraPartMode = &mAlgo_CB_IntraPartMode_Fixed; - break; - } - - mAlgo_CB_IntraInter_BruteForce.setIntraChildAlgo(algo_CB_IntraPartMode); - mAlgo_CB_IntraInter_BruteForce.setInterChildAlgo(&mAlgo_CB_InterPartMode_Fixed); - - mAlgo_CB_MergeIndex_Fixed.setChildAlgo(&mAlgo_TB_Split_BruteForce); - - Algo_PB_MV* pbAlgo = NULL; - switch (params.mAlgo_MEMode()) { - case MEMode_Test: - pbAlgo = &mAlgo_PB_MV_Test; - break; - case MEMode_Search: - pbAlgo = &mAlgo_PB_MV_Search; - break; - } - - mAlgo_CB_InterPartMode_Fixed.setChildAlgo(pbAlgo); - pbAlgo->setChildAlgo(&mAlgo_TB_Split_BruteForce); - - - Algo_TB_IntraPredMode_ModeSubset* algo_TB_IntraPredMode = NULL; - switch (params.mAlgo_TB_IntraPredMode()) { - case ALGO_TB_IntraPredMode_BruteForce: - algo_TB_IntraPredMode = &mAlgo_TB_IntraPredMode_BruteForce; - break; - case ALGO_TB_IntraPredMode_FastBrute: - algo_TB_IntraPredMode = &mAlgo_TB_IntraPredMode_FastBrute; - break; - case ALGO_TB_IntraPredMode_MinResidual: - algo_TB_IntraPredMode = &mAlgo_TB_IntraPredMode_MinResidual; - break; - } - - algo_CB_IntraPartMode->setChildAlgo(algo_TB_IntraPredMode); - - mAlgo_TB_Split_BruteForce.setAlgo_TB_IntraPredMode(algo_TB_IntraPredMode); - //mAlgo_TB_Split_BruteForce.setParams(params.TB_Split_BruteForce); - - algo_TB_IntraPredMode->setChildAlgo(&mAlgo_TB_Split_BruteForce); - - - // ===== set algorithm parameters ====== - - //mAlgo_CB_IntraPartMode_Fixed.setParams(params.CB_IntraPartMode_Fixed); - - //mAlgo_TB_IntraPredMode_FastBrute.setParams(params.TB_IntraPredMode_FastBrute); - //mAlgo_TB_IntraPredMode_MinResidual.setParams(params.TB_IntraPredMode_MinResidual); - - - //mAlgo_CTB_QScale_Constant.setParams(params.CTB_QScale_Constant); - - - algo_TB_IntraPredMode->enableIntraPredModeSubset( params.mAlgo_TB_IntraPredMode_Subset() ); -} - - -void Logging::print_logging(const encoder_context* ectx, const char* id, const char* filename) -{ -#if 000 - if (strcmp(id,logging_tb_split.name())==0) { - logging_tb_split.print(ectx,filename); - } -#endif -} - - -void en265_print_logging(const encoder_context* ectx, const char* id, const char* filename) -{ - Logging::print_logging(ectx,id,filename); -}
View file
libde265-1.0.2.tar.gz/libde265/encoder/analyze.h
Deleted
@@ -1,146 +0,0 @@ -/* - * H.265 video codec. - * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> - * - * Authors: Dirk Farin <farin@struktur.de> - * - * This file is part of libde265. - * - * libde265 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libde265 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with libde265. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef ANALYZE_H -#define ANALYZE_H - -#include "libde265/nal-parser.h" -#include "libde265/decctx.h" -#include "libde265/encoder/encode.h" -#include "libde265/slice.h" -#include "libde265/scan.h" -#include "libde265/intrapred.h" -#include "libde265/transform.h" -#include "libde265/fallback-dct.h" -#include "libde265/quality.h" -#include "libde265/fallback.h" -#include "libde265/configparam.h" - -#include "libde265/encoder/algo/tb-intrapredmode.h" -#include "libde265/encoder/algo/tb-split.h" -#include "libde265/encoder/algo/cb-intrapartmode.h" -#include "libde265/encoder/algo/cb-interpartmode.h" -#include "libde265/encoder/algo/cb-split.h" -#include "libde265/encoder/algo/ctb-qscale.h" -#include "libde265/encoder/algo/cb-mergeindex.h" -//#include "libde265/encoder/algo/cb-skip-or-inter.h" -#include "libde265/encoder/algo/pb-mv.h" -#include "libde265/encoder/algo/cb-skip.h" -#include "libde265/encoder/algo/cb-intra-inter.h" - - -/* Encoder search tree, bottom up: - - - Algo_TB_Split - whether TB is split or not - - - Algo_TB_IntraPredMode - choose the intra prediction mode (or NOP, if at the wrong tree level) - - - Algo_CB_IntraPartMode - choose between NxN and 2Nx2N intra parts - - - Algo_CB_PredMode - intra / inter - - - Algo_CB_Split - whether CB is split or not - - - Algo_CTB_QScale - select QScale on CTB granularity - */ - - -// ========== an encoding algorithm combines a set of algorithm modules ========== - -class EncodingAlgorithm -{ - public: - virtual ~EncodingAlgorithm() { } - - virtual Algo_CTB_QScale* getAlgoCTBQScale() = 0; - - virtual int getPPS_QP() const = 0; - virtual int getSlice_QPDelta() const { return 0; } -}; - - -class EncodingAlgorithm_Custom : public EncodingAlgorithm -{ - public: - - void setParams(struct encoder_params& params); - - void registerParams(config_parameters& config) { - mAlgo_CTB_QScale_Constant.registerParams(config); - mAlgo_CB_IntraPartMode_Fixed.registerParams(config); - mAlgo_CB_InterPartMode_Fixed.registerParams(config); - mAlgo_PB_MV_Test.registerParams(config); - mAlgo_PB_MV_Search.registerParams(config); - mAlgo_TB_IntraPredMode_FastBrute.registerParams(config); - mAlgo_TB_IntraPredMode_MinResidual.registerParams(config); - mAlgo_TB_Split_BruteForce.registerParams(config); - } - - virtual Algo_CTB_QScale* getAlgoCTBQScale() { return &mAlgo_CTB_QScale_Constant; } - - virtual int getPPS_QP() const { return mAlgo_CTB_QScale_Constant.getQP(); } - - private: - Algo_CTB_QScale_Constant mAlgo_CTB_QScale_Constant; - - Algo_CB_Split_BruteForce mAlgo_CB_Split_BruteForce; - Algo_CB_Skip_BruteForce mAlgo_CB_Skip_BruteForce; - Algo_CB_IntraInter_BruteForce mAlgo_CB_IntraInter_BruteForce; - - Algo_CB_IntraPartMode_BruteForce mAlgo_CB_IntraPartMode_BruteForce; - Algo_CB_IntraPartMode_Fixed mAlgo_CB_IntraPartMode_Fixed; - - Algo_CB_InterPartMode_Fixed mAlgo_CB_InterPartMode_Fixed; - Algo_CB_MergeIndex_Fixed mAlgo_CB_MergeIndex_Fixed; - - Algo_PB_MV_Test mAlgo_PB_MV_Test; - Algo_PB_MV_Search mAlgo_PB_MV_Search; - - Algo_TB_Split_BruteForce mAlgo_TB_Split_BruteForce; - - Algo_TB_IntraPredMode_BruteForce mAlgo_TB_IntraPredMode_BruteForce; - Algo_TB_IntraPredMode_FastBrute mAlgo_TB_IntraPredMode_FastBrute; - Algo_TB_IntraPredMode_MinResidual mAlgo_TB_IntraPredMode_MinResidual; -}; - - - -double encode_image(encoder_context*, const de265_image* input, EncodingAlgorithm&); - -void encode_sequence(encoder_context*); - - -class Logging -{ -public: - virtual ~Logging() { } - - static void print_logging(const encoder_context* ectx, const char* id, const char* filename); - - virtual const char* name() const = 0; - virtual void print(const encoder_context* ectx, const char* filename) = 0; -}; - - -LIBDE265_API void en265_print_logging(const encoder_context* ectx, const char* id, const char* filename); - -#endif
View file
libde265-1.0.2.tar.gz/libde265/encoder/encode.cc
Deleted
@@ -1,1981 +0,0 @@ -/* - * H.265 video codec. - * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> - * - * Authors: struktur AG, Dirk Farin <farin@struktur.de> - * - * This file is part of libde265. - * - * libde265 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libde265 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with libde265. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "encode.h" -#include "encoder-context.h" -#include "slice.h" -#include "scan.h" -#include "intrapred.h" -#include "libde265/transform.h" -#include "libde265/fallback-dct.h" -#include <iostream> - - -int allocTB = 0; -int allocCB = 0; - -#define DEBUG_ALLOCS 0 - - - -void enc_node::save(const de265_image* img) -{ - delete[] mReconstruction; - - int blkSize = Log2SizeToArea(log2Size); - mReconstruction = new uint8_t[blkSize * 3/2]; - - int w = 1<<log2Size; - - copy_subimage(mReconstruction, w, - img->get_image_plane_at_pos(0, x,y), - img->get_image_stride(0), - w,w); - - copy_subimage(mReconstruction + blkSize, w>>1, - img->get_image_plane_at_pos(1, x>>1,y>>1), - img->get_image_stride(1), - w>>1,w>>1); - - copy_subimage(mReconstruction + blkSize*5/4, w>>1, - img->get_image_plane_at_pos(2, x>>1,y>>1), - img->get_image_stride(2), - w>>1,w>>1); -} - - -void enc_node::restore(de265_image* img) -{ - assert(mReconstruction); - - int blkSize = Log2SizeToArea(log2Size); - int w = 1<<log2Size; - - copy_subimage(img->get_image_plane_at_pos(0, x,y), - img->get_image_stride(0), - mReconstruction, w, - w,w); - - copy_subimage(img->get_image_plane_at_pos(1, x>>1,y>>1), - img->get_image_stride(1), - mReconstruction + blkSize, w>>1, - w>>1,w>>1); - - copy_subimage(img->get_image_plane_at_pos(2, x>>1,y>>1), - img->get_image_stride(2), - mReconstruction + blkSize*5/4, w>>1, - w>>1,w>>1); -} - - -void enc_cb::save(const de265_image* img) -{ - enc_node::save(img); - - // TODO: save metadata in node buffer memory -} - - -void enc_cb::restore(de265_image* img) -{ - enc_node::restore(img); - - // write back all the metadata - - write_to_image(img); -} - - -void enc_cb::set_rqt_root_bf_from_children_cbf() -{ - assert(transform_tree); - inter.rqt_root_cbf = (transform_tree->cbf[0] | - transform_tree->cbf[1] | - transform_tree->cbf[2]); -} - - - - -alloc_pool enc_tb::mMemPool(sizeof(enc_tb)); - -enc_tb::enc_tb() - : split_transform_flag(false) -{ - coeff[0]=coeff[1]=coeff[2]=NULL; - - if (DEBUG_ALLOCS) { allocTB++; printf("TB : %d\n",allocTB); } -} - - -enc_tb::~enc_tb() -{ - if (split_transform_flag) { - for (int i=0;i<4;i++) { - delete children[i]; - } - } - else { - for (int i=0;i<3;i++) { - delete[] coeff[i]; - } - } - - if (DEBUG_ALLOCS) { allocTB--; printf("TB ~: %d\n",allocTB); } -} - - -void enc_tb::alloc_coeff_memory(int cIdx, int tbSize) -{ - assert(coeff[cIdx]==NULL); - coeff[cIdx] = new int16_t[tbSize*tbSize]; -} - - -void enc_tb::reconstruct_tb(encoder_context* ectx, - de265_image* img, - int x0,int y0, // luma - int log2TbSize, // chroma adapted - const enc_cb* cb, int cIdx) const -{ - // chroma adapted position - int xC=x0; - int yC=y0; - - if (cIdx>0) { - xC>>=1; - yC>>=1; - } - - if (cb->PredMode == MODE_INTRA) { - - enum IntraPredMode intraPredMode = img->get_IntraPredMode(x0,y0); - - if (cIdx>0) { - intraPredMode = cb->intra.chroma_mode; - //intraPredMode = lumaPredMode_to_chromaPredMode(intraPredMode, cb->intra.chroma_mode); - } - - decode_intra_prediction(img, xC,yC, intraPredMode, 1<< log2TbSize , cIdx); - } - else { - int size = 1<<log2TbSize; - - uint8_t* dst_ptr = img->get_image_plane_at_pos(cIdx, xC, yC ); - int dst_stride = img->get_image_stride(cIdx); - - uint8_t* src_ptr = ectx->prediction->get_image_plane_at_pos(cIdx, xC, yC ); - int src_stride = ectx->prediction->get_image_stride(cIdx); - - for (int y=0;y<size;y++) { - for (int x=0;x<size;x++) { - dst_ptr[y*dst_stride+x] = src_ptr[y*src_stride+x]; - } - } - } - - ALIGNED_16(int16_t) dequant_coeff[32*32]; - - if (cbf[cIdx]) dequant_coefficients(dequant_coeff, coeff[cIdx], log2TbSize, cb->qp); - - //printf("--- quantized coeffs ---\n"); - //printBlk(coeff[0],1<<log2BlkSize,1<<log2BlkSize); - - //printf("--- dequantized coeffs ---\n"); - //printBlk(dequant_coeff[0],1<<log2BlkSize,1<<log2BlkSize); - - //printf("--- plane at %d %d / %d ---\n",x0,y0,cIdx); - - uint8_t* ptr = img->get_image_plane_at_pos(cIdx, xC, yC ); - int stride = img->get_image_stride(cIdx); - - int trType = (cIdx==0 && log2TbSize==2); // TODO: inter - - //printf("--- prediction %d %d / %d ---\n",x0,y0,cIdx); - //printBlk("prediction",ptr,1<<log2TbSize,stride); - - if (cbf[cIdx]) inv_transform(&ectx->acceleration, - ptr,stride, dequant_coeff, log2TbSize, trType); - - - //printf("--- RECO intra prediction %d %d ---\n",x0,y0); - //printBlk("prediction",ptr,1<<log2TbSize,stride); - - //dequant_and_add_transform(accel, img, x0,y0, qp); - - //printf("--- RECO add residual %d %d ---\n",x0,y0); - //img->printBlk(x0,y0,0,log2CbSize); -} - - -void enc_tb::reconstruct(encoder_context* ectx, - de265_image* img, - const enc_cb* cb, - int blkIdx) const -{ - if (split_transform_flag) { - for (int i=0;i<4;i++) { - children[i]->reconstruct(ectx,img, - cb, i); - } - } - else { - reconstruct_tb(ectx, img, x,y, log2Size, cb, 0); - - if (log2Size>2) { - reconstruct_tb(ectx, img, x,y, log2Size-1, cb, 1); - reconstruct_tb(ectx, img, x,y, log2Size-1, cb, 2); - } - else if (blkIdx==3) { - int xBase = x - (1<<log2Size); - int yBase = y - (1<<log2Size); - - reconstruct_tb(ectx, img, xBase,yBase, log2Size, cb, 1); - reconstruct_tb(ectx, img, xBase,yBase, log2Size, cb, 2); - } - } -} - - -void enc_tb::set_cbf_flags_from_children() -{ - assert(split_transform_flag); - - cbf[0] = 0; - cbf[1] = 0; - cbf[2] = 0; - - for (int i=0;i<4;i++) { - cbf[0] |= children[i]->cbf[0]; - cbf[1] |= children[i]->cbf[1]; - cbf[2] |= children[i]->cbf[2]; - } -} - - - - -alloc_pool enc_cb::mMemPool(sizeof(enc_cb), 200); - - -enc_cb::enc_cb() - : split_cu_flag(false), - cu_transquant_bypass_flag(false), - pcm_flag(false), - transform_tree(NULL), - distortion(0), - rate(0) -{ - if (DEBUG_ALLOCS) { allocCB++; printf("CB : %d\n",allocCB); } -} - -enc_cb::~enc_cb() -{ - if (split_cu_flag) { - for (int i=0;i<4;i++) { - delete children[i]; - } - } - else { - delete transform_tree; - } - - if (DEBUG_ALLOCS) { allocCB--; printf("CB ~: %d\n",allocCB); } -} - - -void enc_cb::write_to_image(de265_image* img) const -{ - //printf("write_to_image %d %d size:%d\n",x,y,1<<log2Size); - - - if (!split_cu_flag) { - img->set_log2CbSize(x,y,log2Size, true); - img->set_ctDepth(x,y,log2Size, ctDepth); - assert(pcm_flag==0); - img->set_pcm_flag(x,y,log2Size, pcm_flag); - img->set_cu_transquant_bypass(x,y,log2Size, cu_transquant_bypass_flag); - img->set_QPY(x,y,log2Size, qp); - img->set_pred_mode(x,y, log2Size, PredMode); - img->set_PartMode(x,y, PartMode); - - if (PredMode == MODE_INTRA) { - //img->set_ChromaIntraPredMode(x,y,log2Size, intra.chroma_mode); - - if (PartMode == PART_NxN) { - int h = 1<<(log2Size-1); - img->set_IntraPredMode(x ,y ,log2Size-1, intra.pred_mode[0]); - img->set_IntraPredMode(x+h,y ,log2Size-1, intra.pred_mode[1]); - img->set_IntraPredMode(x ,y+h,log2Size-1, intra.pred_mode[2]); - img->set_IntraPredMode(x+h,y+h,log2Size-1, intra.pred_mode[3]); - } - else { - img->set_IntraPredMode(x,y,log2Size, intra.pred_mode[0]); - } - } - else { - int nC = 1<<log2Size; - int nC2 = nC>>1; - int nC4 = nC>>2; - int nC3 = nC-nC4; - switch (PartMode) { - case PART_2Nx2N: - img->set_mv_info(x,y,nC,nC, inter.pb[0].motion); - break; - case PART_NxN: - img->set_mv_info(x ,y ,nC2,nC2, inter.pb[0].motion); - img->set_mv_info(x+nC2,y ,nC2,nC2, inter.pb[1].motion); - img->set_mv_info(x ,y+nC2,nC2,nC2, inter.pb[2].motion); - img->set_mv_info(x+nC2,y+nC2,nC2,nC2, inter.pb[3].motion); - break; - case PART_2NxN: - img->set_mv_info(x,y ,nC,nC2, inter.pb[0].motion); - img->set_mv_info(x,y+nC2,nC,nC2, inter.pb[1].motion); - break; - case PART_Nx2N: - img->set_mv_info(x ,y,nC2,nC, inter.pb[0].motion); - img->set_mv_info(x+nC2,y,nC2,nC, inter.pb[1].motion); - break; - case PART_2NxnU: - img->set_mv_info(x,y ,nC,nC4, inter.pb[0].motion); - img->set_mv_info(x,y+nC4,nC,nC3, inter.pb[1].motion); - break; - case PART_2NxnD: - img->set_mv_info(x,y ,nC,nC3, inter.pb[0].motion); - img->set_mv_info(x,y+nC3,nC,nC4, inter.pb[1].motion); - break; - case PART_nLx2N: - img->set_mv_info(x ,y,nC4,nC, inter.pb[0].motion); - img->set_mv_info(x+nC4,y,nC3,nC, inter.pb[1].motion); - break; - case PART_nRx2N: - img->set_mv_info(x ,y,nC3,nC, inter.pb[0].motion); - img->set_mv_info(x+nC3,y,nC4,nC, inter.pb[1].motion); - break; - } - } - } - else { - for (int i=0;i<4;i++) { - if (children[i]) { - children[i]->write_to_image(img); - } - } - } -} - - -void enc_cb::reconstruct(encoder_context* ectx, de265_image* img) const -{ - if (split_cu_flag) { - for (int i=0;i<4;i++) { - children[i]->reconstruct(ectx, img); - } - } - else { - write_to_image(img); - transform_tree->reconstruct(ectx,img,this,0); - } -} - - - -void encode_split_cu_flag(encoder_context* ectx, - CABAC_encoder* cabac, - int x0, int y0, int ctDepth, int split_flag) -{ - logtrace(LogSymbols,"$1 split_cu_flag=%d\n",split_flag); - - // check if neighbors are available - - int availableL = check_CTB_available(ectx->img, x0,y0, x0-1,y0); - int availableA = check_CTB_available(ectx->img, x0,y0, x0,y0-1); - - int condL = 0; - int condA = 0; - - if (availableL && ectx->img->get_ctDepth(x0-1,y0) > ctDepth) condL=1; - if (availableA && ectx->img->get_ctDepth(x0,y0-1) > ctDepth) condA=1; - - int contextOffset = condL + condA; - int context = contextOffset; - - // decode bit - - logtrace(LogSlice,"> split_cu_flag = %d (context=%d)\n",split_flag,context); - - cabac->write_CABAC_bit(CONTEXT_MODEL_SPLIT_CU_FLAG + context, split_flag); -} - - -void encode_part_mode(encoder_context* ectx, - CABAC_encoder* cabac, - enum PredMode PredMode, enum PartMode PartMode, int cLog2CbSize) -{ - logtrace(LogSymbols,"$1 part_mode=%d\n",PartMode); - logtrace(LogSlice,"> part_mode = %d\n",PartMode); - - if (PredMode == MODE_INTRA) { - int bin = (PartMode==PART_2Nx2N); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+0, bin); - } - else { - if (PartMode==PART_2Nx2N) { - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+0, 1); - return; - } - else { - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+0, 0); - } - - if (cLog2CbSize > ectx->sps.Log2MinCbSizeY) { - if (ectx->sps.amp_enabled_flag) { - switch (PartMode) { - case PART_2NxN: - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 1); - break; - case PART_Nx2N: - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 1); - break; - case PART_2NxnU: - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); - cabac->write_CABAC_bypass(0); - break; - case PART_2NxnD: - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); - cabac->write_CABAC_bypass(1); - break; - case PART_nLx2N: - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); - cabac->write_CABAC_bypass(0); - break; - case PART_nRx2N: - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); - cabac->write_CABAC_bypass(1); - break; - case PART_NxN: - case PART_2Nx2N: - assert(false); - break; - } - } - else { - if (PartMode==PART_2NxN) { - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); - } - else { - assert(PartMode==PART_Nx2N); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); - } - } - } - else { - if (PartMode==PART_2NxN) { - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); - } - else { - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); - - if (cLog2CbSize==3) { - assert(PartMode==PART_Nx2N); - } - else { - if (PartMode==PART_Nx2N) { - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 1); - } - else { - assert(PartMode==PART_NxN); - cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); - } - } - } - } - } -} - - -static void encode_pred_mode_flag(encoder_context* ectx, - CABAC_encoder* cabac, - enum PredMode PredMode) -{ - logtrace(LogSlice,"> pred_mode = %d\n",PredMode); - - int flag = (PredMode == MODE_INTRA) ? 1 : 0; - - logtrace(LogSymbols,"$1 pred_mode=%d\n",flag); - - cabac->write_CABAC_bit(CONTEXT_MODEL_PRED_MODE_FLAG, flag); -} - - -static void encode_prev_intra_luma_pred_flag(encoder_context* ectx, - CABAC_encoder* cabac, - int intraPred) -{ - logtrace(LogSymbols,"$1 prev_intra_luma_pred_flag=%d\n",intraPred>=0); - int bin = (intraPred>=0); - - logtrace(LogSlice,"> prev_intra_luma_pred_flag = %d\n",bin); - - cabac->write_CABAC_bit(CONTEXT_MODEL_PREV_INTRA_LUMA_PRED_FLAG, bin); -} - -static void encode_intra_mpm_or_rem(encoder_context* ectx, - CABAC_encoder* cabac, - int intraPred) -{ - if (intraPred>=0) { - logtrace(LogSymbols,"$1 mpm_idx=%d\n",intraPred); - logtrace(LogSlice,"> mpm_idx = %d\n",intraPred); - assert(intraPred<=2); - cabac->write_CABAC_TU_bypass(intraPred, 2); - } - else { - logtrace(LogSymbols,"$1 rem_intra_luma_pred_mode=%d\n",-intraPred-1); - logtrace(LogSlice,"> rem_intra_luma_pred_mode = %d\n",-intraPred-1); - cabac->write_CABAC_FL_bypass(-intraPred-1, 5); - } -} - - -static void encode_intra_chroma_pred_mode(encoder_context* ectx, - CABAC_encoder* cabac, - int mode) -{ - logtrace(LogSymbols,"$1 intra_chroma_pred_mode=%d\n",mode); - logtrace(LogSlice,"> intra_chroma_pred_mode = %d\n",mode); - - if (mode==4) { - cabac->write_CABAC_bit(CONTEXT_MODEL_INTRA_CHROMA_PRED_MODE,0); - } - else { - assert(mode<4); - - cabac->write_CABAC_bit(CONTEXT_MODEL_INTRA_CHROMA_PRED_MODE,1); - cabac->write_CABAC_FL_bypass(mode, 2); - } -} - - -/* Optimized variant that tests most likely branch first. - */ -enum IntraChromaPredMode find_chroma_pred_mode(enum IntraPredMode chroma_mode, - enum IntraPredMode luma_mode) -{ - // most likely mode: chroma mode = luma mode - - if (luma_mode==chroma_mode) { - return INTRA_CHROMA_LIKE_LUMA; - } - - - // check remaining candidates - - IntraPredMode mode = chroma_mode; - - // angular-34 is coded by setting the coded mode equal to the luma_mode - if (chroma_mode == INTRA_ANGULAR_34) { - mode = luma_mode; - } - - switch (mode) { - case INTRA_PLANAR: return INTRA_CHROMA_PLANAR_OR_34; - case INTRA_ANGULAR_26: return INTRA_CHROMA_ANGULAR_26_OR_34; - case INTRA_ANGULAR_10: return INTRA_CHROMA_ANGULAR_10_OR_34; - case INTRA_DC: return INTRA_CHROMA_DC_OR_34; - default: - assert(false); - return INTRA_CHROMA_DC_OR_34; - } -} - - - -void encode_split_transform_flag(encoder_context* ectx, - CABAC_encoder* cabac, - int log2TrafoSize, int split_flag) -{ - logtrace(LogSymbols,"$1 split_transform_flag=%d\n",split_flag); - logtrace(LogSlice,"> split_transform_flag = %d\n",split_flag); - - int context = 5-log2TrafoSize; - assert(context >= 0 && context <= 2); - - cabac->write_CABAC_bit(CONTEXT_MODEL_SPLIT_TRANSFORM_FLAG + context, split_flag); -} - - -void encode_cbf_luma(CABAC_encoder* cabac, - bool zeroTrafoDepth, int cbf_luma) -{ - logtrace(LogSymbols,"$1 cbf_luma=%d\n",cbf_luma); - logtrace(LogSlice,"> cbf_luma = %d\n",cbf_luma); - - int context = (zeroTrafoDepth ? 1 : 0); - - cabac->write_CABAC_bit(CONTEXT_MODEL_CBF_LUMA + context, cbf_luma); -} - - -void encode_cbf_chroma(CABAC_encoder* cabac, - int trafoDepth, int cbf_chroma) -{ - logtrace(LogSymbols,"$1 cbf_chroma=%d\n",cbf_chroma); - logtrace(LogSlice,"> cbf_chroma = %d\n",cbf_chroma); - - int context = trafoDepth; - assert(context >= 0 && context <= 3); - - cabac->write_CABAC_bit(CONTEXT_MODEL_CBF_CHROMA + context, cbf_chroma); -} - -static inline void encode_coded_sub_block_flag(encoder_context* ectx, - CABAC_encoder* cabac, - int cIdx, - uint8_t coded_sub_block_neighbors, - int flag) -{ - logtrace(LogSymbols,"$1 coded_sub_block_flag=%d\n",flag); - logtrace(LogSlice,"# coded_sub_block_flag = %d\n",flag); - - // tricky computation of csbfCtx - int csbfCtx = ((coded_sub_block_neighbors & 1) | // right neighbor set or - (coded_sub_block_neighbors >> 1)); // bottom neighbor set -> csbfCtx=1 - - int ctxIdxInc = csbfCtx; - if (cIdx!=0) { - ctxIdxInc += 2; - } - - cabac->write_CABAC_bit(CONTEXT_MODEL_CODED_SUB_BLOCK_FLAG + ctxIdxInc, flag); -} - -static inline void encode_significant_coeff_flag_lookup(encoder_context* ectx, - CABAC_encoder* cabac, - uint8_t ctxIdxInc, - int significantFlag) -{ - logtrace(LogSymbols,"$1 significant_coeff_flag=%d\n",significantFlag); - logtrace(LogSlice,"# significant_coeff_flag = significantFlag\n"); - logtrace(LogSlice,"context: %d\n",ctxIdxInc); - - cabac->write_CABAC_bit(CONTEXT_MODEL_SIGNIFICANT_COEFF_FLAG + ctxIdxInc, significantFlag); -} - -static inline void encode_coeff_abs_level_greater1(encoder_context* ectx, - CABAC_encoder* cabac, - int cIdx, int i, - bool firstCoeffInSubblock, - bool firstSubblock, - int lastSubblock_greater1Ctx, - int* lastInvocation_greater1Ctx, - int* lastInvocation_coeff_abs_level_greater1_flag, - int* lastInvocation_ctxSet, int c1, - int value) -{ - logtrace(LogSymbols,"$1 coeff_abs_level_greater1=%d\n",value); - logtrace(LogSlice,"# coeff_abs_level_greater1 = %d\n",value); - - logtrace(LogSlice," cIdx:%d i:%d firstCoeffInSB:%d firstSB:%d lastSB>1:%d last>1Ctx:%d lastLev>1:%d lastCtxSet:%d\n", cIdx,i,firstCoeffInSubblock,firstSubblock,lastSubblock_greater1Ctx, - *lastInvocation_greater1Ctx, - *lastInvocation_coeff_abs_level_greater1_flag, - *lastInvocation_ctxSet); - - int lastGreater1Ctx; - int greater1Ctx; - int ctxSet; - - logtrace(LogSlice,"c1: %d\n",c1); - - if (firstCoeffInSubblock) { - // block with real DC -> ctx 0 - if (i==0 || cIdx>0) { ctxSet=0; } - else { ctxSet=2; } - - if (firstSubblock) { lastGreater1Ctx=1; } - else { lastGreater1Ctx = lastSubblock_greater1Ctx; } - - if (lastGreater1Ctx==0) { ctxSet++; } - - logtrace(LogSlice,"ctxSet: %d\n",ctxSet); - - greater1Ctx=1; - } - else { // !firstCoeffInSubblock - ctxSet = *lastInvocation_ctxSet; - logtrace(LogSlice,"ctxSet (old): %d\n",ctxSet); - - greater1Ctx = *lastInvocation_greater1Ctx; - if (greater1Ctx>0) { - int lastGreater1Flag=*lastInvocation_coeff_abs_level_greater1_flag; - if (lastGreater1Flag==1) greater1Ctx=0; - else { /*if (greater1Ctx>0)*/ greater1Ctx++; } - } - } - - ctxSet = c1; // use HM algo - - int ctxIdxInc = (ctxSet*4) + (greater1Ctx>=3 ? 3 : greater1Ctx); - - if (cIdx>0) { ctxIdxInc+=16; } - - cabac->write_CABAC_bit(CONTEXT_MODEL_COEFF_ABS_LEVEL_GREATER1_FLAG + ctxIdxInc, value); - - *lastInvocation_greater1Ctx = greater1Ctx; - *lastInvocation_coeff_abs_level_greater1_flag = value; - *lastInvocation_ctxSet = ctxSet; -} - -static void encode_coeff_abs_level_greater2(encoder_context* ectx, - CABAC_encoder* cabac, - int cIdx, // int i,int n, - int ctxSet, - int value) -{ - logtrace(LogSymbols,"$1 coeff_abs_level_greater2=%d\n",value); - logtrace(LogSlice,"# coeff_abs_level_greater2 = %d\n",value); - - int ctxIdxInc = ctxSet; - - if (cIdx>0) ctxIdxInc+=4; - - cabac->write_CABAC_bit(CONTEXT_MODEL_COEFF_ABS_LEVEL_GREATER2_FLAG + ctxIdxInc, value); -} - - -bool TU(int val, int maxi) -{ - for (int i=0;i<val;i++) { - printf("1"); - } - if (val<maxi) { printf("0"); return false; } - else return true; -} - -void bin(int val, int bits) -{ - for (int i=0;i<bits;i++) { - int bit = (1<<(bits-1-i)); - if (val&bit) printf("1"); else printf("0"); - } -} - -void ExpG(int level, int riceParam) -{ - int prefix = level >> riceParam; - int suffix = level - (prefix<<riceParam); - - //printf("%d %d ",prefix,suffix); - - int base=0; - int range=1; - int nBits=0; - while (prefix >= base+range) { - printf("1"); - base+=range; - range*=2; - nBits++; - } - - printf("0."); - bin(prefix-base, nBits); - printf(":"); - bin(suffix,riceParam); -} - -int blamain() -{ - int riceParam=2; - int TRMax = 4<<riceParam; - - for (int level=0;level<128;level++) - { - printf("%d: ",level); - - int prefixPart = std::min(TRMax, level); - - // code TR prefix - - bool isMaxi = TU(prefixPart>>riceParam, TRMax>>riceParam); - printf(":"); - if (TRMax>prefixPart) { - int remain = prefixPart & ((1<<riceParam)-1); - bin(remain, riceParam); - } - printf("|"); - - if (isMaxi) { - ExpG(level-TRMax, riceParam+1); - } - - printf("\n"); - } - - return 0; -} - - -static void encode_coeff_abs_level_remaining(encoder_context* ectx, - CABAC_encoder* cabac, - int cRiceParam, - int level) -{ - logtrace(LogSymbols,"$1 coeff_abs_level_remaining=%d\n",level); - logtrace(LogSlice,"# encode_coeff_abs_level_remaining = %d\n",level); - - int cTRMax = 4<<cRiceParam; - int prefixPart = std::min(level, cTRMax); - - // --- code prefix with TR --- - - // TU part, length 4 (cTRMax>>riceParam) - - int nOnes = (prefixPart>>cRiceParam); - cabac->write_CABAC_TU_bypass(nOnes, 4); - - // TR suffix - - if (cTRMax > prefixPart) { - int remain = prefixPart & ((1<<cRiceParam)-1); - cabac->write_CABAC_FL_bypass(remain, cRiceParam); - } - - - // --- remainder suffix --- - - if (nOnes==4) { - int remain = level-cTRMax; - int ExpGRiceParam = cRiceParam+1; - - int prefix = remain >> ExpGRiceParam; - int suffix = remain - (prefix<<ExpGRiceParam); - - int base=0; - int range=1; - int nBits=0; - while (prefix >= base+range) { - cabac->write_CABAC_bypass(1); - base+=range; - range*=2; - nBits++; - } - - cabac->write_CABAC_bypass(0); - cabac->write_CABAC_FL_bypass(prefix-base, nBits); - cabac->write_CABAC_FL_bypass(suffix, ExpGRiceParam); - } -} - -// --------------------------------------------------------------------------- - -void findLastSignificantCoeff(const position* sbScan, const position* cScan, - const int16_t* coeff, int log2TrafoSize, - int* lastSignificantX, int* lastSignificantY, - int* lastSb, int* lastPos) -{ - int nSb = 1<<((log2TrafoSize-2)<<1); // number of sub-blocks - - // find last significant coefficient - - for (int i=nSb ; i-->0 ;) { - int x0 = sbScan[i].x << 2; - int y0 = sbScan[i].y << 2; - for (int c=16 ; c-->0 ;) { - int x = x0 + cScan[c].x; - int y = y0 + cScan[c].y; - - if (coeff[x+(y<<log2TrafoSize)]) { - *lastSignificantX = x; - *lastSignificantY = y; - *lastSb = i; - *lastPos= c; - - logtrace(LogSlice,"last significant coeff at: %d;%d, Sb:%d Pos:%d\n", x,y,i,c); - - return; - } - } - } - - // all coefficients == 0 ? cannot be since cbf should be false in this case - assert(false); -} - - -bool subblock_has_nonzero_coefficient(const int16_t* coeff, int coeffStride, - const position& sbPos) -{ - int x0 = sbPos.x << 2; - int y0 = sbPos.y << 2; - - coeff += x0 + y0*coeffStride; - - for (int y=0;y<4;y++) { - if (coeff[0] || coeff[1] || coeff[2] || coeff[3]) { return true; } - coeff += coeffStride; - } - - return false; -} - -/* - Example 16x16: prefix in [0;7] - - prefix | last pos - =============|============= - 0 | 0 - 1 | 1 - 2 | 2 - 3 | 3 - -------------+------------- - lsb nBits | - 4 0 1 | 4, 5 - 5 1 1 | 6, 7 - 6 0 2 | 8, 9,10,11 - 7 1 2 | 12,13,14,15 -*/ -void encode_last_signficiant_coeff_prefix(encoder_context* ectx, - CABAC_encoder* cabac, - int log2TrafoSize, - int cIdx, int lastSignificant, - int context_model_index) -{ - logtrace(LogSlice,"> last_significant_coeff_prefix=%d log2TrafoSize:%d cIdx:%d\n", - lastSignificant,log2TrafoSize,cIdx); - - int cMax = (log2TrafoSize<<1)-1; - - int ctxOffset, ctxShift; - if (cIdx==0) { - ctxOffset = 3*(log2TrafoSize-2) + ((log2TrafoSize-1)>>2); - ctxShift = (log2TrafoSize+1)>>2; - } - else { - ctxOffset = 15; - ctxShift = log2TrafoSize-2; - } - - for (int binIdx=0;binIdx<lastSignificant;binIdx++) - { - int ctxIdxInc = (binIdx >> ctxShift); - cabac->write_CABAC_bit(context_model_index + ctxOffset + ctxIdxInc, 1); - } - - if (lastSignificant != cMax) { - int binIdx = lastSignificant; - int ctxIdxInc = (binIdx >> ctxShift); - cabac->write_CABAC_bit(context_model_index + ctxOffset + ctxIdxInc, 0); - } -} - - -void split_last_significant_position(int pos, int* prefix, int* suffix, int* nSuffixBits) -{ - logtrace(LogSlice,"split position %d : ",pos); - - // most frequent case - - if (pos<=3) { - *prefix=pos; - *suffix=-1; // just to have some defined value - *nSuffixBits=0; - logtrace(LogSlice,"prefix=%d suffix=%d (%d bits)\n",*prefix,*suffix,*nSuffixBits); - return; - } - - pos -= 4; - int nBits=1; - int range=4; - while (pos>=range) { - nBits++; - pos-=range; - range<<=1; - } - - *prefix = (1+nBits)<<1; - if (pos >= (range>>1)) { - *prefix |= 1; - pos -= (range>>1); - } - *suffix = pos; - *nSuffixBits = nBits; - - logtrace(LogSlice,"prefix=%d suffix=%d (%d bits)\n",*prefix,*suffix,*nSuffixBits); -} - - -extern uint8_t* ctxIdxLookup[4 /* 4-log2-32 */][2 /* !!cIdx */][2 /* !!scanIdx */][4 /* prevCsbf */]; - -/* These values are read from the image metadata: - - intra prediction mode (x0;y0) - */ -void encode_residual(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_tb* tb, const enc_cb* cb, - int x0,int y0,int log2TrafoSize,int cIdx) -{ - const de265_image* img = ectx->img; - const seq_parameter_set& sps = img->sps; - const pic_parameter_set& pps = img->pps; - - int16_t* coeff = tb->coeff[cIdx]; - - if (pps.transform_skip_enabled_flag && true /* TODO */) { - } - - -#if 0 - printf("write coefficients\n"); - for (int y=0;y<(1<<log2TrafoSize);y++) - { - for (int x=0;x<(1<<log2TrafoSize);x++) - { - printf("%4d ",coeff[x+y*(1<<log2TrafoSize)]); - } - printf("\n"); - } -#endif - - - // --- get scan orders --- - - enum PredMode PredMode = cb->PredMode; - int scanIdx; - - if (PredMode == MODE_INTRA) { - if (cIdx==0) { - scanIdx = get_intra_scan_idx_luma(log2TrafoSize, img->get_IntraPredMode(x0,y0)); - } - else { - enum IntraPredMode chromaMode = cb->intra.chroma_mode; - /* - enum IntraPredMode chromaMode = lumaPredMode_to_chromaPredMode(img->get_IntraPredMode(x0,y0), - cb->intra.chroma_mode); - */ - scanIdx = get_intra_scan_idx_chroma(log2TrafoSize, chromaMode); - } - } - else { - scanIdx=0; - } - - - const position* ScanOrderSub = get_scan_order(log2TrafoSize-2, scanIdx); - const position* ScanOrderPos = get_scan_order(2, scanIdx); - - int lastSignificantX, lastSignificantY; - int lastScanPos; - int lastSubBlock; - findLastSignificantCoeff(ScanOrderSub, ScanOrderPos, - coeff, log2TrafoSize, - &lastSignificantX, &lastSignificantY, - &lastSubBlock, &lastScanPos); - - int codedSignificantX = lastSignificantX; - int codedSignificantY = lastSignificantY; - - if (scanIdx==2) { - std::swap(codedSignificantX, codedSignificantY); - } - - - - int prefixX, suffixX, suffixBitsX; - int prefixY, suffixY, suffixBitsY; - - split_last_significant_position(codedSignificantX, &prefixX,&suffixX,&suffixBitsX); - split_last_significant_position(codedSignificantY, &prefixY,&suffixY,&suffixBitsY); - - encode_last_signficiant_coeff_prefix(ectx, cabac, log2TrafoSize, cIdx, prefixX, - CONTEXT_MODEL_LAST_SIGNIFICANT_COEFFICIENT_X_PREFIX); - - encode_last_signficiant_coeff_prefix(ectx, cabac, log2TrafoSize, cIdx, prefixY, - CONTEXT_MODEL_LAST_SIGNIFICANT_COEFFICIENT_Y_PREFIX); - - - if (codedSignificantX > 3) { - cabac->write_CABAC_FL_bypass(suffixX, suffixBitsX); - } - if (codedSignificantY > 3) { - cabac->write_CABAC_FL_bypass(suffixY, suffixBitsY); - } - - - - int sbWidth = 1<<(log2TrafoSize-2); - int CoeffStride = 1<<log2TrafoSize; - - uint8_t coded_sub_block_neighbors[32/4*32/4]; // 64*2 flags - memset(coded_sub_block_neighbors,0,sbWidth*sbWidth); - - int c1 = 1; - bool firstSubblock = true; // for coeff_abs_level_greater1_flag context model - int lastSubblock_greater1Ctx=false; /* for coeff_abs_level_greater1_flag context model - (initialization not strictly needed) - */ - - int lastInvocation_greater1Ctx=0; - int lastInvocation_coeff_abs_level_greater1_flag=0; - int lastInvocation_ctxSet=0; - - - - // ----- encode coefficients ----- - - //tctx->nCoeff[cIdx] = 0; - - - // i - subblock index - // n - coefficient index in subblock - - for (int i=lastSubBlock;i>=0;i--) { - position S = ScanOrderSub[i]; - int inferSbDcSigCoeffFlag=0; - - logtrace(LogSlice,"sub block scan idx: %d\n",i); - - - // --- check whether this sub-block has to be coded --- - - int sub_block_is_coded = 0; - - if ((i<lastSubBlock) && (i>0)) { - sub_block_is_coded = subblock_has_nonzero_coefficient(coeff, CoeffStride, S); - encode_coded_sub_block_flag(ectx, cabac, cIdx, - coded_sub_block_neighbors[S.x+S.y*sbWidth], - sub_block_is_coded); - inferSbDcSigCoeffFlag=1; - } - else if (i==0 || i==lastSubBlock) { - // first (DC) and last sub-block are always coded - // - the first will most probably contain coefficients - // - the last obviously contains the last coded coefficient - - sub_block_is_coded = 1; - } - - if (sub_block_is_coded) { - if (S.x > 0) coded_sub_block_neighbors[S.x-1 + S.y *sbWidth] |= 1; - if (S.y > 0) coded_sub_block_neighbors[S.x + (S.y-1)*sbWidth] |= 2; - } - - logtrace(LogSlice,"subblock is coded: %s\n", sub_block_is_coded ? "yes":"no"); - - - // --- write significant coefficient flags --- - - int16_t coeff_value[16]; - int16_t coeff_baseLevel[16]; - int8_t coeff_scan_pos[16]; - int8_t coeff_sign[16]; - int8_t coeff_has_max_base_level[16]; - int nCoefficients=0; - - - if (sub_block_is_coded) { - int x0 = S.x<<2; - int y0 = S.y<<2; - - int log2w = log2TrafoSize-2; - int prevCsbf = coded_sub_block_neighbors[S.x+S.y*sbWidth]; - uint8_t* ctxIdxMap = ctxIdxLookup[log2w][!!cIdx][!!scanIdx][prevCsbf]; - - - - - // set the last coded coefficient in the last subblock - - if (i==lastSubBlock) { - coeff_value[nCoefficients] = coeff[lastSignificantX+(lastSignificantY<<log2TrafoSize)]; - coeff_has_max_base_level[nCoefficients] = 1; // TODO - coeff_scan_pos[nCoefficients] = lastScanPos; - nCoefficients++; - } - - - // --- encode all coefficients' significant_coeff flags except for the DC coefficient --- - - int last_coeff = (i==lastSubBlock) ? lastScanPos-1 : 15; - - for (int n= last_coeff ; n>0 ; n--) { - int subX = ScanOrderPos[n].x; - int subY = ScanOrderPos[n].y; - int xC = x0 + subX; - int yC = y0 + subY; - - - // for all AC coefficients in sub-block, a significant_coeff flag is coded - - int isSignificant = !!tb->coeff[cIdx][xC + (yC<<log2TrafoSize)]; - - logtrace(LogSlice,"coeff %d is significant: %d\n", n, isSignificant); - - logtrace(LogSlice,"context idx: %d;%d\n",xC,yC); - - encode_significant_coeff_flag_lookup(ectx, cabac, - ctxIdxMap[xC+(yC<<log2TrafoSize)], - isSignificant); - //ctxIdxMap[(i<<4)+n]); - - if (isSignificant) { - coeff_value[nCoefficients] = coeff[xC+(yC<<log2TrafoSize)]; - coeff_has_max_base_level[nCoefficients] = 1; - coeff_scan_pos[nCoefficients] = n; - nCoefficients++; - - // since we have a coefficient in the sub-block, - // we cannot infer the DC coefficient anymore - inferSbDcSigCoeffFlag = 0; - } - } - - - // --- decode DC coefficient significance --- - - if (last_coeff>=0) // last coded coefficient (always set to 1) is not the DC coefficient - { - if (inferSbDcSigCoeffFlag==0) { - // if we cannot infert the DC coefficient, it is coded - int isSignificant = !!tb->coeff[cIdx][x0 + (y0<<log2TrafoSize)]; - - logtrace(LogSlice,"DC coeff is significant: %d\n", isSignificant); - - encode_significant_coeff_flag_lookup(ectx, cabac, - ctxIdxMap[x0+(y0<<log2TrafoSize)], - isSignificant); - - if (isSignificant) { - coeff_value[nCoefficients] = coeff[x0+(y0<<log2TrafoSize)]; - coeff_has_max_base_level[nCoefficients] = 1; - coeff_scan_pos[nCoefficients] = 0; - nCoefficients++; - } - } - else { - // we can infer that the DC coefficient must be present - coeff_value[nCoefficients] = coeff[x0+(y0<<log2TrafoSize)]; - coeff_has_max_base_level[nCoefficients] = 1; - coeff_scan_pos[nCoefficients] = 0; - nCoefficients++; - } - } - } - - - - // --- encode coefficient values --- - - if (nCoefficients) { - - // separate absolute coefficient value and sign - - logtrace(LogSlice,"coefficients to code: "); - - for (int l=0;l<nCoefficients;l++) { - logtrace(LogSlice,"%d ",coeff_value[l]); - - if (coeff_value[l]<0) { - coeff_value[l] = -coeff_value[l]; - coeff_sign[l] = 1; - } - else { - coeff_sign[l] = 0; - } - - coeff_baseLevel[l] = 1; - - logtrace(LogSlice,"(%d) ",coeff_scan_pos[l]); - } - - logtrace(LogSlice,"\n"); - - - int ctxSet; - if (i==0 || cIdx>0) { ctxSet=0; } - else { ctxSet=2; } - - if (c1==0) { ctxSet++; } - c1=1; - - - // --- encode greater-1 flags --- - - int newLastGreater1ScanPos=-1; - - int lastGreater1Coefficient = libde265_min(8,nCoefficients); - for (int c=0;c<lastGreater1Coefficient;c++) { - int greater1_flag = (coeff_value[c]>1); - - encode_coeff_abs_level_greater1(ectx, cabac, cIdx,i, - c==0, - firstSubblock, - lastSubblock_greater1Ctx, - &lastInvocation_greater1Ctx, - &lastInvocation_coeff_abs_level_greater1_flag, - &lastInvocation_ctxSet, ctxSet, - greater1_flag); - - if (greater1_flag) { - coeff_baseLevel[c]++; - - c1=0; - - if (newLastGreater1ScanPos == -1) { - newLastGreater1ScanPos=c; - } - } - else { - coeff_has_max_base_level[c] = 0; - - if (c1<3 && c1>0) { - c1++; - } - } - } - - firstSubblock = false; - lastSubblock_greater1Ctx = lastInvocation_greater1Ctx; - - - // --- decode greater-2 flag --- - - if (newLastGreater1ScanPos != -1) { - int greater2_flag = (coeff_value[newLastGreater1ScanPos]>2); - encode_coeff_abs_level_greater2(ectx,cabac, cIdx, lastInvocation_ctxSet, greater2_flag); - coeff_baseLevel[newLastGreater1ScanPos] += greater2_flag; - coeff_has_max_base_level[newLastGreater1ScanPos] = greater2_flag; - } - - - // --- encode coefficient signs --- - - int signHidden = (coeff_scan_pos[0]-coeff_scan_pos[nCoefficients-1] > 3 && - !cb->cu_transquant_bypass_flag); - - for (int n=0;n<nCoefficients-1;n++) { - cabac->write_CABAC_bypass(coeff_sign[n]); - //logtrace(LogSlice,"a) sign[%d] = %d\n", n, coeff_sign[n]); - } - - // n==nCoefficients-1 - if (!pps.sign_data_hiding_flag || !signHidden) { - cabac->write_CABAC_bypass(coeff_sign[nCoefficients-1]); - //logtrace(LogSlice,"b) sign[%d] = %d\n", nCoefficients-1, coeff_sign[nCoefficients-1]); - } - else { - assert(coeff_sign[nCoefficients-1] == 0); - } - - // --- decode coefficient value --- - - int sumAbsLevel=0; - int uiGoRiceParam=0; - - for (int n=0;n<nCoefficients;n++) { - int baseLevel = coeff_baseLevel[n]; - - int coeff_abs_level_remaining; - - if (coeff_has_max_base_level[n]) { - logtrace(LogSlice,"value[%d]=%d, base level: %d\n",n,coeff_value[n],coeff_baseLevel[n]); - - coeff_abs_level_remaining = coeff_value[n] - coeff_baseLevel[n]; - - encode_coeff_abs_level_remaining(ectx, cabac, uiGoRiceParam, - coeff_abs_level_remaining); - - // (9-462) - if (baseLevel + coeff_abs_level_remaining > 3*(1<<uiGoRiceParam)) { - uiGoRiceParam++; - if (uiGoRiceParam>4) uiGoRiceParam=4; - } - } - else { - coeff_abs_level_remaining = 0; - } - - - // --- DEBUG: check coefficient --- - -#if 0 - int16_t currCoeff = baseLevel + coeff_abs_level_remaining; - if (coeff_sign[n]) { - currCoeff = -currCoeff; - } - - if (pps.sign_data_hiding_flag && signHidden) { - sumAbsLevel += baseLevel + coeff_abs_level_remaining; - - if (n==nCoefficients-1 && (sumAbsLevel & 1)) { - currCoeff = -currCoeff; - } - } - - assert(currCoeff == coeff_value[n]); -#endif - } // iterate through coefficients in sub-block - } // if nonZero - - } -} - - -void encode_transform_unit(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_tb* tb, const enc_cb* cb, - int x0,int y0, int xBase,int yBase, - int log2TrafoSize, int trafoDepth, int blkIdx) -{ - if (tb->cbf[0] || tb->cbf[1] || tb->cbf[2]) { - if (ectx->img->pps.cu_qp_delta_enabled_flag && - true /*!ectx->IsCuQpDeltaCoded*/) { - assert(0); - } - - if (tb->cbf[0]) { - encode_residual(ectx,cabac, tb,cb,x0,y0,log2TrafoSize,0); - } - - // larger than 4x4 - if (log2TrafoSize>2) { - if (tb->cbf[1]) { - encode_residual(ectx,cabac,tb,cb,x0,y0,log2TrafoSize-1,1); - } - if (tb->cbf[2]) { - encode_residual(ectx,cabac,tb,cb,x0,y0,log2TrafoSize-1,2); - } - } - else if (blkIdx==3) { - // cannot check for tb->parent->cbf[], because this may not yet be set - if (tb->cbf[1]) { - encode_residual(ectx,cabac,tb,cb,xBase,yBase,log2TrafoSize,1); - } - if (tb->cbf[2]) { - encode_residual(ectx,cabac,tb,cb,xBase,yBase,log2TrafoSize,2); - } - } - } -} - - -void encode_transform_tree(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_tb* tb, const enc_cb* cb, - int x0,int y0, int xBase,int yBase, - int log2TrafoSize, int trafoDepth, int blkIdx, - int MaxTrafoDepth, int IntraSplitFlag, bool recurse) -{ - //de265_image* img = ectx->img; - const seq_parameter_set* sps = &ectx->img->sps; - - if (log2TrafoSize <= sps->Log2MaxTrafoSize && - log2TrafoSize > sps->Log2MinTrafoSize && - trafoDepth < MaxTrafoDepth && - !(IntraSplitFlag && trafoDepth==0)) - { - int split_transform_flag = tb->split_transform_flag; - encode_split_transform_flag(ectx, cabac, log2TrafoSize, split_transform_flag); - } - else - { - int interSplitFlag=0; // TODO - - bool split_transform_flag = (log2TrafoSize > sps->Log2MaxTrafoSize || - (IntraSplitFlag==1 && trafoDepth==0) || - interSplitFlag==1) ? 1:0; - - /* - printf("split_transform_flag log2TrafoSize:%d Log2MaxTrafoSize:%d " - "IntraSplitFlag:%d trafoDepth:%d -> %d\n", - log2TrafoSize,sps->Log2MaxTrafoSize, - IntraSplitFlag, trafoDepth, - split_transform_flag); - */ - - assert(tb->split_transform_flag == split_transform_flag); - } - - // --- CBF CB/CR --- - - // For 4x4 luma, there is no signaling of chroma CBF, because only the - // chroma CBF for 8x8 is relevant. - if (log2TrafoSize>2) { - if (trafoDepth==0 || tb->parent->cbf[1]) { - encode_cbf_chroma(cabac, trafoDepth, tb->cbf[1]); - } - if (trafoDepth==0 || tb->parent->cbf[2]) { - encode_cbf_chroma(cabac, trafoDepth, tb->cbf[2]); - } - } - - if (tb->split_transform_flag) { - if (recurse) { - int x1 = x0 + (1<<(log2TrafoSize-1)); - int y1 = y0 + (1<<(log2TrafoSize-1)); - - encode_transform_tree(ectx, cabac, tb->children[0], cb, x0,y0,x0,y0,log2TrafoSize-1, - trafoDepth+1, 0, MaxTrafoDepth, IntraSplitFlag, true); - encode_transform_tree(ectx, cabac, tb->children[1], cb, x1,y0,x0,y0,log2TrafoSize-1, - trafoDepth+1, 1, MaxTrafoDepth, IntraSplitFlag, true); - encode_transform_tree(ectx, cabac, tb->children[2], cb, x0,y1,x0,y0,log2TrafoSize-1, - trafoDepth+1, 2, MaxTrafoDepth, IntraSplitFlag, true); - encode_transform_tree(ectx, cabac, tb->children[3], cb, x1,y1,x0,y0,log2TrafoSize-1, - trafoDepth+1, 3, MaxTrafoDepth, IntraSplitFlag, true); - } - } - else { - if (cb->PredMode == MODE_INTRA || trafoDepth != 0 || - tb->cbf[1] || tb->cbf[2]) { - encode_cbf_luma(cabac, trafoDepth==0, tb->cbf[0]); - } - else { - /* Note: usually, cbf[0] should be TRUE, but while estimating the bitrate, this - function can also be called with all CBFs FALSE. Usually, this is handled by - the rqt_root_cbf flag, but during analysis, this is set after the bitrate is estimated. - */ - // assert(tb->cbf[0]==true); - } - - encode_transform_unit(ectx,cabac, tb,cb, x0,y0, xBase,yBase, log2TrafoSize, trafoDepth, blkIdx); - } -} - - -void encode_cu_skip_flag(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_cb* cb, - bool skip) -{ - logtrace(LogSymbols,"$1 cu_skip_flag=%d\n",skip); - - const de265_image* img = ectx->img; - - int x0 = cb->x; - int y0 = cb->y; - - // check if neighbors are available - - int availableL = check_CTB_available(img, x0,y0, x0-1,y0); - int availableA = check_CTB_available(img, x0,y0, x0,y0-1); - - int condL = 0; - int condA = 0; - - if (availableL && img->get_cu_skip_flag(x0-1,y0)) condL=1; - if (availableA && img->get_cu_skip_flag(x0,y0-1)) condA=1; - - int contextOffset = condL + condA; - int context = contextOffset; - - // decode bit - - int bit = skip; - - logtrace(LogSlice,"> cu_skip_flag ctx=%d, bit=%d\n", context,bit); - - cabac->write_CABAC_bit(CONTEXT_MODEL_CU_SKIP_FLAG + context, bit); -} - - -void encode_merge_idx(encoder_context* ectx, - CABAC_encoder* cabac, - int mergeIdx) -{ - logtrace(LogSymbols,"$1 merge_idx=%d\n",mergeIdx); - logtrace(LogSlice,"# merge_idx %d\n", mergeIdx); - - if (ectx->shdr->MaxNumMergeCand <= 1) { - return; // code nothing, we use only a single merge candidate - } - - // TU coding, first bin is CABAC, remaining are bypass. - // cMax = MaxNumMergeCand-1 - - cabac->write_CABAC_bit(CONTEXT_MODEL_MERGE_IDX, mergeIdx ? 1 : 0); - - if (mergeIdx>0) { - int idx=1; - - while (idx<ectx->shdr->MaxNumMergeCand-1) { - int increase = (idx < mergeIdx); - - cabac->write_CABAC_bypass(increase); - if (increase) { - idx++; - } - else { - break; - } - } - } -} - - -static inline void encode_rqt_root_cbf(encoder_context* ectx, - CABAC_encoder* cabac, - int rqt_root_cbf) -{ - logtrace(LogSymbols,"$1 rqt_root_cbf=%d\n",rqt_root_cbf); - cabac->write_CABAC_bit(CONTEXT_MODEL_RQT_ROOT_CBF, rqt_root_cbf); -} - - -void encode_mvd(encoder_context* ectx, - CABAC_encoder* cabac, - const int16_t mvd[2]) -{ - int mvd0abs = abs_value(mvd[0]); - int mvd1abs = abs_value(mvd[1]); - - int mvd0_greater_0 = !!(mvd0abs); - int mvd1_greater_0 = !!(mvd1abs); - - cabac->write_CABAC_bit(CONTEXT_MODEL_ABS_MVD_GREATER01_FLAG+0, mvd0_greater_0); - cabac->write_CABAC_bit(CONTEXT_MODEL_ABS_MVD_GREATER01_FLAG+0, mvd1_greater_0); - - if (mvd0_greater_0) { - cabac->write_CABAC_bit(CONTEXT_MODEL_ABS_MVD_GREATER01_FLAG+1, mvd0abs>1); - } - if (mvd1_greater_0) { - cabac->write_CABAC_bit(CONTEXT_MODEL_ABS_MVD_GREATER01_FLAG+1, mvd1abs>1); - } - - if (mvd0abs) { - if (mvd0abs>1) { - cabac->write_CABAC_EGk(mvd0abs-2,1); - } - cabac->write_CABAC_bypass(mvd[0]<0); - } - - if (mvd1abs) { - if (mvd1abs>1) { - cabac->write_CABAC_EGk(mvd1abs-2,1); - } - cabac->write_CABAC_bypass(mvd[1]<0); - } -} - - -void encode_prediction_unit(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_cb* cb, int pbIdx, - int x0,int y0, int w, int h) -{ - const enc_pb_inter& pb = cb->inter.pb[pbIdx]; - - logtrace(LogSymbols,"$1 merge_flag=%d\n",pb.spec.merge_flag); - cabac->write_CABAC_bit(CONTEXT_MODEL_MERGE_FLAG, pb.spec.merge_flag); - - if (pb.spec.merge_flag) { - assert(false); // TODO - } - else { - if (ectx->shdr->slice_type == SLICE_TYPE_B) { - assert(false); // TODO - } - - if (pb.spec.inter_pred_idc != PRED_L1) { - if (ectx->shdr->num_ref_idx_l0_active > 1) { - assert(false); // TODO - //cabac->write_CABAC_bit(CONTEXT_MODEL_REF_IDX_LX, pb.spec.mvp_l0_flag); - } - - encode_mvd(ectx,cabac, pb.spec.mvd[0]); - - logtrace(LogSymbols,"$1 mvp_lx_flag=%d\n",pb.spec.mvp_l0_flag); - cabac->write_CABAC_bit(CONTEXT_MODEL_MVP_LX_FLAG, pb.spec.mvp_l0_flag); - } - - if (pb.spec.inter_pred_idc != PRED_L0) { - assert(false); // TODO - } - - /* -enum InterPredIdc - PRED_L0=0, - PRED_L1=1, - PRED_BI=2 - */ - } -} - - -void encode_coding_unit(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_cb* cb, int x0,int y0, int log2CbSize, bool recurse) -{ - logtrace(LogSlice,"--- encode CU (%d;%d) ---\n",x0,y0); - - de265_image* img = ectx->img; - const slice_segment_header* shdr = &ectx->imgdata->shdr; - const seq_parameter_set* sps = &ectx->img->sps; - - - int nCbS = 1<<log2CbSize; - - - // write skip_flag - - if (shdr->slice_type != SLICE_TYPE_I) { - encode_cu_skip_flag(ectx,cabac, cb, cb->PredMode==MODE_SKIP); - } - - if (cb->PredMode==MODE_SKIP) { - assert(cb->inter.pb[0].spec.merge_flag); - encode_merge_idx(ectx,cabac, cb->inter.pb[0].spec.merge_idx); - } - else { - - enum PredMode PredMode = cb->PredMode; - enum PartMode PartMode = PART_2Nx2N; - int IntraSplitFlag=0; - - if (shdr->slice_type != SLICE_TYPE_I) { - encode_pred_mode_flag(ectx,cabac, PredMode); - } - - if (PredMode != MODE_INTRA || - log2CbSize == sps->Log2MinCbSizeY) { - PartMode = cb->PartMode; - encode_part_mode(ectx,cabac, PredMode, PartMode, log2CbSize); - } - - if (PredMode == MODE_INTRA) { - - int availableA0 = check_CTB_available(img, x0,y0, x0-1,y0); - int availableB0 = check_CTB_available(img, x0,y0, x0,y0-1); - - if (PartMode==PART_2Nx2N) { - logtrace(LogSlice,"x0,y0: %d,%d\n",x0,y0); - int PUidx = (x0>>sps->Log2MinPUSize) + (y0>>sps->Log2MinPUSize)*sps->PicWidthInMinPUs; - - int candModeList[3]; - fillIntraPredModeCandidates(candModeList,x0,y0,PUidx, - availableA0,availableB0, img); - - for (int i=0;i<3;i++) - logtrace(LogSlice,"candModeList[%d] = %d\n", i, candModeList[i]); - - enum IntraPredMode mode = cb->intra.pred_mode[0]; - int intraPred = find_intra_pred_mode(mode, candModeList); - encode_prev_intra_luma_pred_flag(ectx,cabac, intraPred); - encode_intra_mpm_or_rem(ectx,cabac, intraPred); - - logtrace(LogSlice,"IntraPredMode: %d (candidates: %d %d %d)\n", mode, - candModeList[0], candModeList[1], candModeList[2]); - logtrace(LogSlice," MPM/REM = %d\n",intraPred); - } - else { - IntraSplitFlag=1; - - int pbOffset = nCbS/2; - int PUidx; - - int intraPred[4]; - int childIdx=0; - - for (int j=0;j<nCbS;j+=pbOffset) - for (int i=0;i<nCbS;i+=pbOffset, childIdx++) - { - int x=x0+i, y=y0+j; - - int availableA = availableA0 || (i>0); // left candidate always available for right blk - int availableB = availableB0 || (j>0); // top candidate always available for bottom blk - - PUidx = (x>>sps->Log2MinPUSize) + (y>>sps->Log2MinPUSize)*sps->PicWidthInMinPUs; - - int candModeList[3]; - fillIntraPredModeCandidates(candModeList,x,y,PUidx, - availableA,availableB, img); - - enum IntraPredMode mode = cb->intra.pred_mode[childIdx]; - - assert(ectx->img->get_IntraPredMode(x,y) == mode); - - intraPred[childIdx] = find_intra_pred_mode(mode, candModeList); - } - - for (int i=0;i<4;i++) - encode_prev_intra_luma_pred_flag(ectx,cabac, intraPred[i]); - - for (int i=0;i<4;i++) - encode_intra_mpm_or_rem(ectx,cabac, intraPred[i]); - } - - IntraChromaPredMode chromaPredMode = find_chroma_pred_mode(cb->intra.chroma_mode, - cb->intra.pred_mode[0]); - encode_intra_chroma_pred_mode(ectx,cabac, chromaPredMode); - } - else { - switch (cb->PartMode) { - case PART_2Nx2N: - encode_prediction_unit(ectx,cabac,cb, 0, cb->x,cb->y,1<<cb->log2Size,1<<cb->log2Size); - break; - case PART_2NxN: - case PART_Nx2N: - case PART_NxN: - case PART_2NxnU: - case PART_2NxnD: - case PART_nLx2N: - case PART_nRx2N: - assert(false); // TODO - } - } - - - if (true) { // !pcm - - if (cb->PredMode != MODE_INTRA && - !(cb->PartMode == PART_2Nx2N && cb->inter.pb[0].spec.merge_flag)) { - - //printf("%d %d %d\n",cb->PredMode,cb->PartMode,cb->inter.pb[0].merge_flag); - - encode_rqt_root_cbf(ectx,cabac, cb->inter.rqt_root_cbf); - } - - //printf("%d;%d encode rqt_root_cbf=%d\n",x0,y0,cb->inter.rqt_root_cbf); - - if (cb->PredMode == MODE_INTRA || cb->inter.rqt_root_cbf) { - int MaxTrafoDepth; - if (PredMode == MODE_INTRA) - { MaxTrafoDepth = sps->max_transform_hierarchy_depth_intra + IntraSplitFlag; } - else - { MaxTrafoDepth = sps->max_transform_hierarchy_depth_inter; } - - - if (recurse) { - //printf("%d;%d store transform tree\n",x0,y0); - - encode_transform_tree(ectx,cabac, cb->transform_tree, cb, - x0,y0, x0,y0, log2CbSize, 0, 0, MaxTrafoDepth, IntraSplitFlag, true); - } - } - } - } -} - - -SplitType get_split_type(const seq_parameter_set* sps, - int x0,int y0, int log2CbSize) -{ - /* - CU split flag: - - | overlaps | minimum || - case | border | size || split - -----+----------+---------++---------- - A | 0 | 0 || optional - B | 0 | 1 || 0 - C | 1 | 0 || 1 - D | 1 | 1 || 0 - */ - if (x0+(1<<log2CbSize) <= sps->pic_width_in_luma_samples && - y0+(1<<log2CbSize) <= sps->pic_height_in_luma_samples && - log2CbSize > sps->Log2MinCbSizeY) { - - // case A - - return OptionalSplit; - } else { - // case B/C/D - - if (log2CbSize > sps->Log2MinCbSizeY) { return ForcedSplit; } - else { return ForcedNonSplit; } - } -} - - -void encode_quadtree(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_cb* cb, int x0,int y0, int log2CbSize, int ctDepth, - bool recurse) -{ - //de265_image* img = ectx->img; - const seq_parameter_set* sps = &ectx->img->sps; - - int split_flag = get_split_type(sps,x0,y0,log2CbSize); - - // if it is an optional split, take the decision from the CU flag - if (split_flag == OptionalSplit) { - split_flag = cb->split_cu_flag; - - encode_split_cu_flag(ectx,cabac, x0,y0, ctDepth, split_flag); - } - - - if (split_flag) { - if (recurse) { - int x1 = x0 + (1<<(log2CbSize-1)); - int y1 = y0 + (1<<(log2CbSize-1)); - - encode_quadtree(ectx,cabac, cb->children[0], x0,y0, log2CbSize-1, ctDepth+1, true); - - if (x1<sps->pic_width_in_luma_samples) - encode_quadtree(ectx,cabac, cb->children[1], x1,y0, log2CbSize-1, ctDepth+1, true); - - if (y1<sps->pic_height_in_luma_samples) - encode_quadtree(ectx,cabac, cb->children[2], x0,y1, log2CbSize-1, ctDepth+1, true); - - if (x1<sps->pic_width_in_luma_samples && - y1<sps->pic_height_in_luma_samples) - encode_quadtree(ectx,cabac, cb->children[3], x1,y1, log2CbSize-1, ctDepth+1, true); - } - } - else { - encode_coding_unit(ectx,cabac, cb,x0,y0, log2CbSize, true); - } -} - - -void encode_ctb(encoder_context* ectx, - CABAC_encoder* cabac, - enc_cb* cb, int ctbX,int ctbY) -{ - logtrace(LogSlice,"----- encode CTB (%d;%d) -----\n",ctbX,ctbY); - -#if 0 - printf("MODEL:\n"); - for (int i=0;i<CONTEXT_MODEL_TABLE_LENGTH;i++) - { - printf("%d;%d ", - ectx->ctx_model[i].state, - ectx->ctx_model[i].MPSbit); - - if ((i%16)==15) printf("\n"); - } - printf("\n"); -#endif - - de265_image* img = ectx->img; - int log2ctbSize = img->sps.Log2CtbSizeY; - - encode_quadtree(ectx,cabac, cb, ctbX<<log2ctbSize, ctbY<<log2ctbSize, log2ctbSize, 0, true); -} - - -// ---------------------------------------------------------------------------
View file
libde265-1.0.2.tar.gz/libde265/encoder/encode.h
Deleted
@@ -1,289 +0,0 @@ -/* - * H.265 video codec. - * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> - * - * Authors: Dirk Farin <farin@struktur.de> - * - * This file is part of libde265. - * - * libde265 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libde265 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with libde265. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef ENCODE_H -#define ENCODE_H - -#include "libde265/image.h" -#include "libde265/decctx.h" -#include "libde265/image-io.h" -#include "libde265/alloc_pool.h" - -class encoder_context; -class enc_cb; - - -class enc_node -{ - public: - enc_node() { mReconstruction=NULL; } - virtual ~enc_node() { delete[] mReconstruction; } - - uint16_t x,y; - uint8_t log2Size : 3; - - virtual void save(const de265_image*); - virtual void restore(de265_image*); - - private: - uint8_t* mReconstruction; -}; - - -class enc_tb : public enc_node -{ - public: - enc_tb(); - ~enc_tb(); - - const enc_tb* parent; - - uint8_t split_transform_flag : 1; - uint8_t TrafoDepth : 2; // 2 bits enough ? (TODO) - - uint8_t cbf[3]; - - union { - // split - struct { - enc_tb* children[4]; - }; - - // non-split - struct { - int16_t* coeff[3]; - }; - }; - - float distortion; // total distortion for this level of the TB tree (including all children) - float rate; // total rate for coding this TB level and all children - float rate_withoutCbfChroma; - - void set_cbf_flags_from_children(); - - void reconstruct(encoder_context* ectx, - de265_image* img, - const enc_cb* cb, int blkIdx=0) const; - - bool isZeroBlock() const { return cbf[0]==false && cbf[1]==false && cbf[2]==false; } - - void alloc_coeff_memory(int cIdx, int tbSize); - - static void* operator new(const size_t size) { return mMemPool.new_obj(size); } - static void operator delete(void* obj) { mMemPool.delete_obj(obj); } - -private: - static alloc_pool mMemPool; - - void reconstruct_tb(encoder_context* ectx, - de265_image* img, int x0,int y0, int log2TbSize, - const enc_cb* cb, int cIdx) const; -}; - - -struct enc_pb_inter -{ - /* absolute motion information (for MV-prediction candidates) - */ - MotionVectorSpec motion; - - /* specification how to code the motion vector in the bitstream - */ - motion_spec spec; - - - // NOT TRUE: refIdx in 'spec' is not used. It is taken from 'motion' - // Currently, information is duplicated. Same as with inter_pred_idc/predFlag[]. - - /* SPEC: - int8_t refIdx[2]; // not used - int16_t mvd[2][2]; - - uint8_t inter_pred_idc : 2; // enum InterPredIdc - uint8_t mvp_l0_flag : 1; - uint8_t mvp_l1_flag : 1; - uint8_t merge_flag : 1; - uint8_t merge_idx : 3; - */ -}; - - -class enc_cb : public enc_node -{ -public: - enc_cb(); - ~enc_cb(); - - const enc_cb* parent; - - uint8_t split_cu_flag : 1; - uint8_t ctDepth : 2; - - union { - // split - struct { - enc_cb* children[4]; // undefined when split_cu_flag==false - }; - - // non-split - struct { - uint8_t qp : 6; - uint8_t cu_transquant_bypass_flag : 1; // currently unused - uint8_t pcm_flag : 1; - - enum PredMode PredMode; // : 6; - enum PartMode PartMode; // : 3; - - union { - struct { - enum IntraPredMode pred_mode[4]; - enum IntraPredMode chroma_mode; - } intra; - - struct { - enc_pb_inter pb[4]; - - uint8_t rqt_root_cbf : 1; - } inter; - }; - - const enc_tb* transform_tree; - }; - }; - - - float distortion; - float rate; - - - void set_rqt_root_bf_from_children_cbf(); - - /* Save CB reconstruction in the node and restore it again to the image. - Pixel data and metadata. - */ - virtual void save(const de265_image*); - virtual void restore(de265_image*); - - - /* Decode this CB: pixel data and write metadata to image. - */ - void reconstruct(encoder_context* ectx,de265_image* img) const; - - - // memory management - - static void* operator new(const size_t size) { return mMemPool.new_obj(size); } - static void operator delete(void* obj) { mMemPool.delete_obj(obj); } - - private: - void write_to_image(de265_image*) const; - - static alloc_pool mMemPool; -}; - - - -inline int childX(int x0, int idx, int log2CbSize) -{ - return x0 + ((idx&1) << (log2CbSize-1)); -} - -inline int childY(int y0, int idx, int log2CbSize) -{ - return y0 + ((idx>>1) << (log2CbSize-1)); -} - - - -void encode_split_cu_flag(encoder_context* ectx, - CABAC_encoder* cabac, - int x0, int y0, int ctDepth, int split_flag); - -void encode_transform_tree(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_tb* tb, const enc_cb* cb, - int x0,int y0, int xBase,int yBase, - int log2TrafoSize, int trafoDepth, int blkIdx, - int MaxTrafoDepth, int IntraSplitFlag, bool recurse); - -void encode_coding_unit(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_cb* cb, int x0,int y0, int log2CbSize, bool recurse); - -/* returns - 1 - forced split - 0 - forced non-split - -1 - optional split -*/ -enum SplitType { - ForcedNonSplit = 0, - ForcedSplit = 1, - OptionalSplit = 2 -}; - -SplitType get_split_type(const seq_parameter_set* sps, - int x0,int y0, int log2CbSize); - - -void encode_split_transform_flag(encoder_context* ectx, - CABAC_encoder* cabac, - int log2TrafoSize, int split_flag); - -void encode_merge_idx(encoder_context* ectx, - CABAC_encoder* cabac, - int mergeIdx); - -void encode_cu_skip_flag(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_cb* cb, - bool skip); - -void encode_cbf_luma(CABAC_encoder* cabac, - bool zeroTrafoDepth, int cbf_luma); - -void encode_cbf_chroma(CABAC_encoder* cabac, - int trafoDepth, int cbf_chroma); - -void encode_transform_unit(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_tb* tb, const enc_cb* cb, - int x0,int y0, int xBase,int yBase, - int log2TrafoSize, int trafoDepth, int blkIdx); - - -void encode_quadtree(encoder_context* ectx, - CABAC_encoder* cabac, - const enc_cb* cb, int x0,int y0, int log2CbSize, int ctDepth, - bool recurse); - -void encode_ctb(encoder_context* ectx, - CABAC_encoder* cabac, - enc_cb* cb, int ctbX,int ctbY); - - -class de265_encoder -{ - public: - virtual ~de265_encoder() { } -}; - -#endif
View file
libde265-1.0.2.tar.gz/.travis.yml -> libde265-1.0.3.tar.gz/.travis.yml
Changed
@@ -5,6 +5,10 @@ - gcc env: - HOST= WINE= DECODESTREAMS= + - HOST=i686-w64-mingw32 WINE=wine DECODESTREAMS= + - HOST=x86_64-w64-mingw32 WINE=wine64 DECODESTREAMS= + - HOST=arm-linux-gnueabihf WINE= DECODESTREAMS= + - HOST=cmake WINE= DECODESTREAMS= - HOST= WINE= DECODESTREAMS=libde265-teststreams-fuzzing THREADING= - HOST= WINE= DECODESTREAMS=libde265-teststreams-fuzzing THREADING=--single-threaded - HOST= WINE= DECODESTREAMS=libde265-teststreams-nolf THREADING= @@ -19,15 +23,26 @@ - HOST= WINE= DECODESTREAMS=libde265-teststreams-weighted THREADING=--single-threaded - HOST= WINE= DECODESTREAMS=libde265-teststreams-wpp-nolf THREADING= - HOST= WINE= DECODESTREAMS=libde265-teststreams-wpp-nolf THREADING=--single-threaded - - HOST=i686-w64-mingw32 WINE=wine DECODESTREAMS= - - HOST=x86_64-w64-mingw32 WINE=wine64 DECODESTREAMS= - - HOST=arm-linux-gnueabihf WINE= DECODESTREAMS= - - HOST=cmake WINE= DECODESTREAMS= matrix: include: - compiler: clang env: HOST= WINE= DECODESTREAMS= + allow_failures: + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-fuzzing THREADING= + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-fuzzing THREADING=--single-threaded + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-nolf THREADING= + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-nolf THREADING=--single-threaded + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-sao THREADING= + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-sao THREADING=--single-threaded + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-tiles THREADING= + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-tiles THREADING=--single-threaded + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-tiles-nolf THREADING= + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-tiles-nolf THREADING=--single-threaded + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-weighted THREADING= + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-weighted THREADING=--single-threaded + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-wpp-nolf THREADING= + - env: HOST= WINE= DECODESTREAMS=libde265-teststreams-wpp-nolf THREADING=--single-threaded before_install: - sh -c "if [ ! -z '$DECODESTREAMS' ]; then sudo add-apt-repository -y ppa:strukturag/libde265; fi" @@ -35,10 +50,11 @@ - sh -c "if [ -z '$HOST' ]; then sudo apt-get install -qq valgrind libsdl-dev libqt4-dev libswscale-dev; fi" - sh -c "if [ -z '$HOST' ] && [ -z '$DECODESTREAMS' ]; then sudo apt-get install -qq devscripts; fi" - sh -c "if [ ! -z '$WINE' ]; then sudo apt-get install -qq wine; fi" - - sh -c "if [ '$WINE' = 'wine' ]; then sudo apt-get install -qq gcc-mingw-w64-i686 g++-mingw-w64-i686 binutils-mingw-w64-i686 mingw-w64-dev; fi" - - sh -c "if [ '$WINE' = 'wine64' ]; then sudo apt-get install -qq gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 mingw-w64-dev; fi" + - sh -c "if [ '$WINE' = 'wine' ]; then sudo apt-get install -qq gcc-mingw-w64-i686 g++-mingw-w64-i686 binutils-mingw-w64-i686 mingw-w64-i686-dev; fi" + - sh -c "if [ '$WINE' = 'wine64' ]; then sudo apt-get install -qq gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 mingw-w64-x86-64-dev; fi" - sh -c "if ( echo '$HOST' | grep -q '^arm' ); then sudo apt-get install -qq g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf qemu-user; fi" - sh -c "if [ ! -z '$DECODESTREAMS' ]; then sudo apt-get install $DECODESTREAMS; fi" + - sudo apt-get install cmake install: - git clone https://github.com/strukturag/libde265-data.git @@ -50,19 +66,22 @@ - if [ "$HOST" != "cmake" ]; then ./configure --host=$HOST; fi - if [ "$HOST" = "cmake" ]; then cmake .; fi +# inter-streams are valgrinded without SSE, because it gives too many false positives in put_hevc_qpel() +# intra-streams use SSE, because they run fine in valgrind + script: - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then ./scripts/check_licenses.sh; fi" - make - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then make dist && mkdir dist-test && cd dist-test && tar xzf ../libde265-*.tar.gz && cd libde265-* && ./configure && make; fi" - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then make dist && mkdir dist-cmake-test && cd dist-cmake-test && tar xzf ../libde265-*.tar.gz && cd libde265-* && cmake . && make; fi" - - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then LD_LIBRARY_PATH=./libde265/.libs/ valgrind --tool=memcheck --quiet --error-exitcode=1 ./dec265/.libs/dec265 -q -c -f 100 ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" - - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then LD_LIBRARY_PATH=./libde265/.libs/ valgrind --tool=memcheck --quiet --error-exitcode=1 ./dec265/.libs/dec265 -t 4 -q -c -f 100 ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" - - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then LD_LIBRARY_PATH=./libde265/.libs/ valgrind --tool=memcheck --quiet --error-exitcode=1 ./dec265/.libs/dec265 -q -c -f 100 ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi" - - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then LD_LIBRARY_PATH=./libde265/.libs/ valgrind --tool=memcheck --quiet --error-exitcode=1 ./dec265/.libs/dec265 -t 4 -q -c -f 100 ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi" - - sh -c "if [ ! -z "$WINE" ]; then WINEPREFIX=`pwd`/$WINE WINEPATH=/usr/lib/gcc/$HOST/4.6/ $WINE ./dec265/dec265.exe -q -c ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" - - sh -c "if [ ! -z "$WINE" ]; then WINEPREFIX=`pwd`/$WINE WINEPATH=/usr/lib/gcc/$HOST/4.6/ $WINE ./dec265/dec265.exe -t 4 -q -c ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" - - sh -c "if [ ! -z "$WINE" ]; then WINEPREFIX=`pwd`/$WINE WINEPATH=/usr/lib/gcc/$HOST/4.6/ $WINE ./dec265/dec265.exe -q -c ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi" - - sh -c "if [ ! -z "$WINE" ]; then WINEPREFIX=`pwd`/$WINE WINEPATH=/usr/lib/gcc/$HOST/4.6/ $WINE ./dec265/dec265.exe -t 4 -q -c ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi" + - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then LD_LIBRARY_PATH=./libde265/.libs/ valgrind --tool=memcheck --quiet --error-exitcode=1 --gen-suppressions=all --suppressions=valgrind.supp ./dec265/.libs/dec265 -q -c -f 100 ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" + - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then LD_LIBRARY_PATH=./libde265/.libs/ valgrind --tool=memcheck --quiet --error-exitcode=1 --gen-suppressions=all --suppressions=valgrind.supp ./dec265/.libs/dec265 -t 4 -q -c -f 100 ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" + - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then LD_LIBRARY_PATH=./libde265/.libs/ valgrind --tool=memcheck --quiet --error-exitcode=1 --gen-suppressions=all --suppressions=valgrind.supp ./dec265/.libs/dec265 -0 -q -c -f 100 ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi" + - sh -c "if [ -z "$HOST" ] && [ -z "$DECODESTREAMS" ]; then LD_LIBRARY_PATH=./libde265/.libs/ valgrind --tool=memcheck --quiet --error-exitcode=1 --gen-suppressions=all --suppressions=valgrind.supp ./dec265/.libs/dec265 -0 -t 4 -q -c -f 100 ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi" + - sh -c "if [ ! -z "$WINE" ]; then WINEPREFIX=`pwd`/$WINE WINEPATH=\"/usr/lib/gcc/$HOST/4.8/\;/usr/$HOST/lib\" $WINE ./dec265/dec265.exe -q -c ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" + - sh -c "if [ ! -z "$WINE" ]; then WINEPREFIX=`pwd`/$WINE WINEPATH=\"/usr/lib/gcc/$HOST/4.8/\;/usr/$HOST/lib\" $WINE ./dec265/dec265.exe -t 4 -q -c ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" + - sh -c "if [ ! -z "$WINE" ]; then WINEPREFIX=`pwd`/$WINE WINEPATH=\"/usr/lib/gcc/$HOST/4.8/\;/usr/$HOST/lib\" $WINE ./dec265/dec265.exe -q -c ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi" + - sh -c "if [ ! -z "$WINE" ]; then WINEPREFIX=`pwd`/$WINE WINEPATH=\"/usr/lib/gcc/$HOST/4.8/\;/usr/$HOST/lib\" $WINE ./dec265/dec265.exe -t 4 -q -c ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi" - sh -c "if ( echo '$HOST' | grep -q '^arm' ); then LD_LIBRARY_PATH=`pwd`/libde265/.libs/ qemu-arm -L /usr/$HOST ./dec265/.libs/dec265 -q -c ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" #- sh -c "if ( echo '$HOST' | grep -q '^arm' ); then LD_LIBRARY_PATH=`pwd`/libde265/.libs/ qemu-arm -L /usr/$HOST ./dec265/.libs/dec265 -t 4 -q -c ./libde265-data/IDR-only/paris-352x288-intra.bin; fi" - sh -c "if ( echo '$HOST' | grep -q '^arm' ); then LD_LIBRARY_PATH=`pwd`/libde265/.libs/ qemu-arm -L /usr/$HOST ./dec265/.libs/dec265 -q -c ./libde265-data/RandomAccess/paris-ra-wpp.bin; fi"
View file
libde265-1.0.2.tar.gz/CMakeLists.txt -> libde265-1.0.3.tar.gz/CMakeLists.txt
Changed
@@ -1,5 +1,5 @@ project (libde265) -cmake_minimum_required (VERSION 2.8) +cmake_minimum_required (VERSION 2.8.8) # The version number. set (NUMERIC_VERSION 0x01000000)
View file
libde265-1.0.2.tar.gz/Makefile.am -> libde265-1.0.3.tar.gz/Makefile.am
Changed
@@ -9,8 +9,8 @@ endif SUBDIRS+=enc265 - SUBDIRS+=tools +SUBDIRS+=acceleration-speed if ENABLE_SHERLOCK265 SUBDIRS+=sherlock265
View file
libde265-1.0.2.tar.gz/Makefile.in -> libde265-1.0.3.tar.gz/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,12 +92,6 @@ @ENABLE_DEC265_TRUE@am__append_1 = dec265 @ENABLE_SHERLOCK265_TRUE@am__append_2 = sherlock265 subdir = . -DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/config.h.in $(srcdir)/libde265.pc.in COPYING TODO \ - compile config.guess config.sub depcomp install-sh missing \ - ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -98,6 +102,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d @@ -189,7 +195,12 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope -DIST_SUBDIRS = libde265 dec265 enc265 tools sherlock265 +DIST_SUBDIRS = libde265 dec265 enc265 tools acceleration-speed \ + sherlock265 +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/libde265.pc.in AUTHORS COPYING ChangeLog INSTALL \ + NEWS README compile config.guess config.sub depcomp install-sh \ + ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -283,6 +294,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -365,6 +377,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -377,7 +390,8 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = libde265 $(am__append_1) enc265 tools $(am__append_2) +SUBDIRS = libde265 $(am__append_1) enc265 tools acceleration-speed \ + $(am__append_2) ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = .travis.yml \ autogen.sh \ @@ -410,7 +424,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -664,15 +677,15 @@ $(am__post_remove_distdir) dist-tarZ: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) @@ -708,17 +721,17 @@ esac chmod -R a-w $(distdir) chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=.. --prefix="$$dc_install_base" \ + --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ @@ -898,6 +911,8 @@ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-pkgconfigDATA +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
View file
libde265-1.0.2.tar.gz/README.md -> libde265-1.0.3.tar.gz/README.md
Changed
@@ -52,7 +52,7 @@ Building ======== -[![Build Status](https://travis-ci.org/strukturag/libde265.png?branch=master)](https://travis-ci.org/strukturag/libde265) +[![Build Status](https://travis-ci.org/strukturag/libde265.png?branch=master)](https://travis-ci.org/strukturag/libde265) [![Build Status](https://ci.appveyor.com/api/projects/status/github/strukturag/libde265?svg=true)](https://ci.appveyor.com/project/strukturag/libde265) If you got libde265 from the git repository, you will first need to run the included `autogen.sh` script to generate the `configure` script.
View file
libde265-1.0.3.tar.gz/acceleration-speed
Added
+(directory)
View file
libde265-1.0.3.tar.gz/acceleration-speed/Makefile.am
Added
@@ -0,0 +1,17 @@ + +bin_PROGRAMS = acceleration_speed + +AM_CPPFLAGS = -I../libde265 + +acceleration_speed_DEPENDENCIES = ../libde265/libde265.la +acceleration_speed_CXXFLAGS = +acceleration_speed_LDFLAGS = +acceleration_speed_LDADD = ../libde265/libde265.la -lstdc++ +acceleration_speed_SOURCES = \ + acceleration-speed.cc acceleration-speed.h \ + dct.cc dct.h \ + dct-scalar.cc dct-scalar.h + +if ENABLE_SSE_OPT + acceleration_speed_SOURCES += dct-sse.cc +endif
View file
libde265-1.0.3.tar.gz/acceleration-speed/Makefile.in
Added
@@ -0,0 +1,756 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +bin_PROGRAMS = acceleration_speed$(EXEEXT) +@ENABLE_SSE_OPT_TRUE@am__append_1 = dct-sse.cc +subdir = acceleration-speed +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/m4_ax_check_compile_flag.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am__acceleration_speed_SOURCES_DIST = acceleration-speed.cc \ + acceleration-speed.h dct.cc dct.h dct-scalar.cc dct-scalar.h \ + dct-sse.cc +@ENABLE_SSE_OPT_TRUE@am__objects_1 = \ +@ENABLE_SSE_OPT_TRUE@ acceleration_speed-dct-sse.$(OBJEXT) +am_acceleration_speed_OBJECTS = \ + acceleration_speed-acceleration-speed.$(OBJEXT) \ + acceleration_speed-dct.$(OBJEXT) \ + acceleration_speed-dct-scalar.$(OBJEXT) $(am__objects_1) +acceleration_speed_OBJECTS = $(am_acceleration_speed_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +acceleration_speed_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) \ + $(acceleration_speed_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(acceleration_speed_SOURCES) +DIST_SOURCES = $(am__acceleration_speed_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDE265_AGE = @LIBDE265_AGE@ +LIBDE265_CURRENT = @LIBDE265_CURRENT@ +LIBDE265_REVISION = @LIBDE265_REVISION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NUMERIC_VERSION = @NUMERIC_VERSION@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +QTCHOOSER = @QTCHOOSER@ +QTMOC = @QTMOC@ +QT_CFLAGS = @QT_CFLAGS@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ +SWSCALE_LIBS = @SWSCALE_LIBS@ +VERSION = @VERSION@ +VIDEOGFX_CFLAGS = @VIDEOGFX_CFLAGS@ +VIDEOGFX_LIBS = @VIDEOGFX_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = -I../libde265 +acceleration_speed_DEPENDENCIES = ../libde265/libde265.la +acceleration_speed_CXXFLAGS = +acceleration_speed_LDFLAGS = +acceleration_speed_LDADD = ../libde265/libde265.la -lstdc++ +acceleration_speed_SOURCES = acceleration-speed.cc \ + acceleration-speed.h dct.cc dct.h dct-scalar.cc dct-scalar.h \ + $(am__append_1) +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu acceleration-speed/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu acceleration-speed/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +acceleration_speed$(EXEEXT): $(acceleration_speed_OBJECTS) $(acceleration_speed_DEPENDENCIES) $(EXTRA_acceleration_speed_DEPENDENCIES) + @rm -f acceleration_speed$(EXEEXT) + $(AM_V_CXXLD)$(acceleration_speed_LINK) $(acceleration_speed_OBJECTS) $(acceleration_speed_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acceleration_speed-acceleration-speed.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acceleration_speed-dct-scalar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acceleration_speed-dct-sse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acceleration_speed-dct.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +acceleration_speed-acceleration-speed.o: acceleration-speed.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -MT acceleration_speed-acceleration-speed.o -MD -MP -MF $(DEPDIR)/acceleration_speed-acceleration-speed.Tpo -c -o acceleration_speed-acceleration-speed.o `test -f 'acceleration-speed.cc' || echo '$(srcdir)/'`acceleration-speed.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acceleration_speed-acceleration-speed.Tpo $(DEPDIR)/acceleration_speed-acceleration-speed.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='acceleration-speed.cc' object='acceleration_speed-acceleration-speed.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -c -o acceleration_speed-acceleration-speed.o `test -f 'acceleration-speed.cc' || echo '$(srcdir)/'`acceleration-speed.cc + +acceleration_speed-acceleration-speed.obj: acceleration-speed.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -MT acceleration_speed-acceleration-speed.obj -MD -MP -MF $(DEPDIR)/acceleration_speed-acceleration-speed.Tpo -c -o acceleration_speed-acceleration-speed.obj `if test -f 'acceleration-speed.cc'; then $(CYGPATH_W) 'acceleration-speed.cc'; else $(CYGPATH_W) '$(srcdir)/acceleration-speed.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acceleration_speed-acceleration-speed.Tpo $(DEPDIR)/acceleration_speed-acceleration-speed.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='acceleration-speed.cc' object='acceleration_speed-acceleration-speed.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -c -o acceleration_speed-acceleration-speed.obj `if test -f 'acceleration-speed.cc'; then $(CYGPATH_W) 'acceleration-speed.cc'; else $(CYGPATH_W) '$(srcdir)/acceleration-speed.cc'; fi` + +acceleration_speed-dct.o: dct.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -MT acceleration_speed-dct.o -MD -MP -MF $(DEPDIR)/acceleration_speed-dct.Tpo -c -o acceleration_speed-dct.o `test -f 'dct.cc' || echo '$(srcdir)/'`dct.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acceleration_speed-dct.Tpo $(DEPDIR)/acceleration_speed-dct.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dct.cc' object='acceleration_speed-dct.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -c -o acceleration_speed-dct.o `test -f 'dct.cc' || echo '$(srcdir)/'`dct.cc + +acceleration_speed-dct.obj: dct.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -MT acceleration_speed-dct.obj -MD -MP -MF $(DEPDIR)/acceleration_speed-dct.Tpo -c -o acceleration_speed-dct.obj `if test -f 'dct.cc'; then $(CYGPATH_W) 'dct.cc'; else $(CYGPATH_W) '$(srcdir)/dct.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acceleration_speed-dct.Tpo $(DEPDIR)/acceleration_speed-dct.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dct.cc' object='acceleration_speed-dct.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -c -o acceleration_speed-dct.obj `if test -f 'dct.cc'; then $(CYGPATH_W) 'dct.cc'; else $(CYGPATH_W) '$(srcdir)/dct.cc'; fi` + +acceleration_speed-dct-scalar.o: dct-scalar.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -MT acceleration_speed-dct-scalar.o -MD -MP -MF $(DEPDIR)/acceleration_speed-dct-scalar.Tpo -c -o acceleration_speed-dct-scalar.o `test -f 'dct-scalar.cc' || echo '$(srcdir)/'`dct-scalar.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acceleration_speed-dct-scalar.Tpo $(DEPDIR)/acceleration_speed-dct-scalar.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dct-scalar.cc' object='acceleration_speed-dct-scalar.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -c -o acceleration_speed-dct-scalar.o `test -f 'dct-scalar.cc' || echo '$(srcdir)/'`dct-scalar.cc + +acceleration_speed-dct-scalar.obj: dct-scalar.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -MT acceleration_speed-dct-scalar.obj -MD -MP -MF $(DEPDIR)/acceleration_speed-dct-scalar.Tpo -c -o acceleration_speed-dct-scalar.obj `if test -f 'dct-scalar.cc'; then $(CYGPATH_W) 'dct-scalar.cc'; else $(CYGPATH_W) '$(srcdir)/dct-scalar.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acceleration_speed-dct-scalar.Tpo $(DEPDIR)/acceleration_speed-dct-scalar.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dct-scalar.cc' object='acceleration_speed-dct-scalar.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -c -o acceleration_speed-dct-scalar.obj `if test -f 'dct-scalar.cc'; then $(CYGPATH_W) 'dct-scalar.cc'; else $(CYGPATH_W) '$(srcdir)/dct-scalar.cc'; fi` + +acceleration_speed-dct-sse.o: dct-sse.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -MT acceleration_speed-dct-sse.o -MD -MP -MF $(DEPDIR)/acceleration_speed-dct-sse.Tpo -c -o acceleration_speed-dct-sse.o `test -f 'dct-sse.cc' || echo '$(srcdir)/'`dct-sse.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acceleration_speed-dct-sse.Tpo $(DEPDIR)/acceleration_speed-dct-sse.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dct-sse.cc' object='acceleration_speed-dct-sse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -c -o acceleration_speed-dct-sse.o `test -f 'dct-sse.cc' || echo '$(srcdir)/'`dct-sse.cc + +acceleration_speed-dct-sse.obj: dct-sse.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -MT acceleration_speed-dct-sse.obj -MD -MP -MF $(DEPDIR)/acceleration_speed-dct-sse.Tpo -c -o acceleration_speed-dct-sse.obj `if test -f 'dct-sse.cc'; then $(CYGPATH_W) 'dct-sse.cc'; else $(CYGPATH_W) '$(srcdir)/dct-sse.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acceleration_speed-dct-sse.Tpo $(DEPDIR)/acceleration_speed-dct-sse.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dct-sse.cc' object='acceleration_speed-dct-sse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acceleration_speed_CXXFLAGS) $(CXXFLAGS) -c -o acceleration_speed-dct-sse.obj `if test -f 'dct-sse.cc'; then $(CYGPATH_W) 'dct-sse.cc'; else $(CYGPATH_W) '$(srcdir)/dct-sse.cc'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT:
View file
libde265-1.0.3.tar.gz/acceleration-speed/acceleration-speed.cc
Added
@@ -0,0 +1,219 @@ +/* + * H.265 video codec. + * Copyright (c) 2015 struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 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. + * + * libde265 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 libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <getopt.h> + +#include <string> +#include <stack> +#include <memory> + +#include "libde265/image.h" +#include "libde265/fallback-dct.h" +#include "libde265/image-io.h" + +#include "acceleration-speed.h" + + +/* TODO: for more realistic input to IDCTs, we could save the real coefficients in + a decoder run and use this data as input. + */ + + +bool show_help=false; +bool do_check=false; +bool do_time=false; +bool do_eval=false; +int img_width=352; +int img_height=288; +int nframes=1000; +int repeat=10; +std::string function; +std::string input_file; + +static struct option long_options[] = { + {"help", no_argument, 0, 'H' }, + {"input", required_argument, 0, 'i' }, + {"width", required_argument, 0, 'w' }, + {"height", required_argument, 0, 'h' }, + {"nframes", required_argument, 0, 'n' }, + {"function",required_argument, 0, 'f' }, + {"check", no_argument, 0, 'c' }, + {"time", no_argument, 0, 't' }, + {"eval", no_argument, 0, 'e' }, + {"repeat", required_argument, 0, 'r' }, + {0, 0, 0, 0 } +}; + + + +DSPFunc* DSPFunc::first = NULL; + + +bool DSPFunc::runOnImage(std::shared_ptr<const de265_image> img, bool compareToReference) +{ + int w = img->get_width(0); + int h = img->get_height(0); + + int blkWidth = getBlkWidth(); + int blkHeight = getBlkHeight(); + + bool success = true; + + for (int y=0;y<=h-blkHeight;y+=blkHeight) + for (int x=0;x<=w-blkWidth;x+=blkWidth) { + runOnBlock(x,y); + + if (compareToReference) { + referenceImplementation()->runOnBlock(x,y); + success &= compareToReferenceImplementation(); + } + } + + return success; +} + + + +int main(int argc, char** argv) +{ + while (1) { + int option_index = 0; + + int c = getopt_long(argc, argv, "Hci:w:h:n:f:ter:", long_options, &option_index); + if (c == -1) + break; + + switch (c) { + case 'H': show_help=true; break; + case 'c': do_check=true; break; + case 'w': img_width =atoi(optarg); break; + case 'h': img_height=atoi(optarg); break; + case 'n': nframes=atoi(optarg); break; + case 'f': function=optarg; break; + case 'i': input_file=optarg; break; + case 't': do_time=true; break; + case 'e': do_eval=true; break; + case 'r': repeat=atoi(optarg); break; + } + } + + + if (show_help) { + fprintf(stderr, + "acceleration-speed SIMD DSP function testing tool\n" + "--------------------------------------------------\n" + " --help show help\n" + " -i, --input NAME input YUV file\n" + " -w, --width # input width (default: 352)\n" + " -h, --height # input height (default: 288)\n" + " -n, --nframes # number of frames to process (default: 1000)\n" + " -f, --function NAME which function to test (see below)\n" + " -r, --repeat # number of repetitions for each image (default: 10)\n" + " -c, --check compare function result against its reference code\n" + "\n" + "these functions are known:\n" + ); + + std::stack<const char*> funcnames; + + for (DSPFunc* func = DSPFunc::first; + func ; + func=func->next) { + funcnames.push(func->name()); + } + + while (!funcnames.empty()) { + fprintf(stderr, + " %s\n", funcnames.top()); + funcnames.pop(); + } + + return 0; + } + + + // --- find DSP function with the given name --- + + if (function.empty()) { + fprintf(stderr,"No function specified. Use option '--function'.\n"); + exit(10); + } + + DSPFunc* algo = NULL; + for (DSPFunc* f = DSPFunc::first; f ; f=f->next) { + if (strcasecmp(f->name(), function.c_str())==0) { + algo = f; + break; + } + } + + if (algo==NULL) { + fprintf(stderr,"Argument to '--function' invalid. No function with that name.\n"); + exit(10); + } + + if (do_check && !algo->referenceImplementation()) { + fprintf(stderr,"cannot check function result: no reference function defined for the selected function.\n"); + exit(10); + } + + + ImageSource_YUV image_source; + image_source.set_input_file(input_file.c_str(), img_width, img_height); + + int img_counter=0; + + bool eof = false; + for (int f=0; f<nframes ; f++) + { + std::shared_ptr<de265_image> image(image_source.get_image()); + if (!image) { + eof=true; + break; + } + + img_counter++; + + if (algo->referenceImplementation()) { + algo->referenceImplementation()->prepareNextImage(image); + } + + if (algo->prepareNextImage(image)) { + printf("run %d times on image %d\n",repeat,img_counter); + + for (int r=0;r<repeat;r++) { + bool success = algo->runOnImage(image, do_check); + if (!success) { + fprintf(stderr, "computation mismatch to reference implementation...\n"); + exit(10); + } + } + } + } + + return 0; +}
View file
libde265-1.0.3.tar.gz/acceleration-speed/acceleration-speed.h
Added
@@ -0,0 +1,65 @@ +/* + * H.265 video codec. + * Copyright (c) 2015 struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 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. + * + * libde265 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 libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ACCELERATION_SPEED_H +#define ACCELERATION_SPEED_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <getopt.h> + +#include <string> +#include <stack> +#include <memory> + +#include "libde265/image.h" +#include "libde265/image-io.h" + + +class DSPFunc +{ +public: + DSPFunc() { next = first; first = this; } + virtual ~DSPFunc() { } + + virtual const char* name() const = 0; + + virtual int getBlkWidth() const = 0; + virtual int getBlkHeight() const = 0; + + virtual void runOnBlock(int x,int y) = 0; + virtual DSPFunc* referenceImplementation() const { return NULL; } + + virtual bool prepareNextImage(std::shared_ptr<const de265_image>) = 0; + + bool runOnImage(std::shared_ptr<const de265_image> img, bool compareToReference); + virtual bool compareToReferenceImplementation() { return false; } + + static DSPFunc* first; + DSPFunc* next; +}; + + +#endif
View file
libde265-1.0.3.tar.gz/acceleration-speed/dct-scalar.cc
Added
@@ -0,0 +1,33 @@ +/* + * H.265 video codec. + * Copyright (c) 2015 struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 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. + * + * libde265 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 libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "dct-scalar.h" + + +DSPFunc_FDCT_Scalar_4x4 fdct_scalar_4x4; +DSPFunc_FDCT_Scalar_8x8 fdct_scalar_8x8; +DSPFunc_FDCT_Scalar_16x16 fdct_scalar_16x16; +DSPFunc_FDCT_Scalar_32x32 fdct_scalar_32x32; + + +DSPFunc_IDCT_Scalar_4x4 idct_scalar_4x4; +DSPFunc_IDCT_Scalar_8x8 idct_scalar_8x8; +DSPFunc_IDCT_Scalar_16x16 idct_scalar_16x16; +DSPFunc_IDCT_Scalar_32x32 idct_scalar_32x32;
View file
libde265-1.0.3.tar.gz/acceleration-speed/dct-scalar.h
Added
@@ -0,0 +1,158 @@ +/* + * H.265 video codec. + * Copyright (c) 2015 struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 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. + * + * libde265 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 libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ACCELERATION_SPEED_DCT_SCALAR_H +#define ACCELERATION_SPEED_DCT_SCALAR_H + +#include "dct.h" + +class DSPFunc_FDCT_Scalar_4x4 : public DSPFunc_FDCT_Base +{ +public: + DSPFunc_FDCT_Scalar_4x4() : DSPFunc_FDCT_Base(4) { } + + virtual const char* name() const { return "FDCT-Scalar-4x4"; } + + virtual void runOnBlock(int x,int y) { + bool D = false; + + fdct_4x4_8_fallback(coeffs, residuals+x+y*stride, stride); + + if (D) { dump(x,y); } + } +}; + + +class DSPFunc_FDCT_Scalar_8x8 : public DSPFunc_FDCT_Base +{ +public: + DSPFunc_FDCT_Scalar_8x8() : DSPFunc_FDCT_Base(8) { } + + virtual const char* name() const { return "FDCT-Scalar-8x8"; } + + virtual void runOnBlock(int x,int y) { + bool D = false; + + fdct_8x8_8_fallback(coeffs, residuals+x+y*stride, stride); + + if (D) { dump(x,y); } + } +}; + + +class DSPFunc_FDCT_Scalar_16x16 : public DSPFunc_FDCT_Base +{ +public: + DSPFunc_FDCT_Scalar_16x16() : DSPFunc_FDCT_Base(16) { } + + virtual const char* name() const { return "FDCT-Scalar-16x16"; } + + virtual void runOnBlock(int x,int y) { + bool D = false; + + fdct_16x16_8_fallback(coeffs, residuals+x+y*stride, stride); + + if (D) { dump(x,y); } + } +}; + +class DSPFunc_FDCT_Scalar_32x32 : public DSPFunc_FDCT_Base +{ +public: + DSPFunc_FDCT_Scalar_32x32() : DSPFunc_FDCT_Base(32) { } + + virtual const char* name() const { return "FDCT-Scalar-32x32"; } + + virtual void runOnBlock(int x,int y) { + bool D = false; + + fdct_32x32_8_fallback(coeffs, residuals+x+y*stride, stride); + + if (D) { dump(x,y); } + } +}; + + + +class DSPFunc_IDCT_Scalar_4x4 : public DSPFunc_IDCT_Base +{ +public: + DSPFunc_IDCT_Scalar_4x4() : DSPFunc_IDCT_Base(4) { } + + virtual const char* name() const { return "IDCT-Scalar-4x4"; } + + virtual void runOnBlock(int x,int y) { + memset(out,0,4*4); + transform_4x4_add_8_fallback(out, xy2coeff(x,y), 4); + } +}; + +class DSPFunc_IDCT_Scalar_8x8 : public DSPFunc_IDCT_Base +{ +public: + DSPFunc_IDCT_Scalar_8x8() : DSPFunc_IDCT_Base(8) { } + + virtual const char* name() const { return "IDCT-Scalar-8x8"; } + + virtual void runOnBlock(int x,int y) { + memset(out,0,8*8); + transform_8x8_add_8_fallback(out, xy2coeff(x,y), 8); + } +}; + +class DSPFunc_IDCT_Scalar_16x16 : public DSPFunc_IDCT_Base +{ +public: + DSPFunc_IDCT_Scalar_16x16() : DSPFunc_IDCT_Base(16) { } + + virtual const char* name() const { return "IDCT-Scalar-16x16"; } + + virtual void runOnBlock(int x,int y) { + memset(out,0,16*16); + transform_16x16_add_8_fallback(out, xy2coeff(x,y), 16); + } +}; + +class DSPFunc_IDCT_Scalar_32x32 : public DSPFunc_IDCT_Base +{ +public: + DSPFunc_IDCT_Scalar_32x32() : DSPFunc_IDCT_Base(32) { } + + virtual const char* name() const { return "IDCT-Scalar-32x32"; } + + virtual void runOnBlock(int x,int y) { + memset(out,0,32*32); + transform_32x32_add_8_fallback(out, xy2coeff(x,y), 32); + } +}; + + +extern DSPFunc_FDCT_Scalar_4x4 fdct_scalar_4x4; +extern DSPFunc_FDCT_Scalar_8x8 fdct_scalar_8x8; +extern DSPFunc_FDCT_Scalar_16x16 fdct_scalar_16x16; +extern DSPFunc_FDCT_Scalar_32x32 fdct_scalar_32x32; + + +extern DSPFunc_IDCT_Scalar_4x4 idct_scalar_4x4; +extern DSPFunc_IDCT_Scalar_8x8 idct_scalar_8x8; +extern DSPFunc_IDCT_Scalar_16x16 idct_scalar_16x16; +extern DSPFunc_IDCT_Scalar_32x32 idct_scalar_32x32; + +#endif
View file
libde265-1.0.3.tar.gz/acceleration-speed/dct-sse.cc
Added
@@ -0,0 +1,177 @@ +/* + * H.265 video codec. + * Copyright (c) 2015 struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 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. + * + * libde265 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 libde265. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "libde265/x86/sse-dct.h" +#include "dct.h" +#include "dct-scalar.h" + + +class DSPFunc_IDCT_SSE_4x4 : public DSPFunc_IDCT_Base +{ +public: + DSPFunc_IDCT_SSE_4x4() : DSPFunc_IDCT_Base(4) { } + + virtual const char* name() const { return "IDCT-SSE-4x4"; } + + virtual DSPFunc* referenceImplementation() const { return &idct_scalar_4x4; } + + virtual void runOnBlock(int x,int y) { + memset(out,0,4*4); + ff_hevc_transform_4x4_add_8_sse4(out, xy2coeff(x,y), 4); + } +}; + +class DSPFunc_IDCT_SSE_8x8 : public DSPFunc_IDCT_Base +{ +public: + DSPFunc_IDCT_SSE_8x8() : DSPFunc_IDCT_Base(8) { } + + virtual const char* name() const { return "IDCT-SSE-8x8"; } + + virtual DSPFunc* referenceImplementation() const { return &idct_scalar_8x8; } + + virtual void runOnBlock(int x,int y) { + memset(out,0,8*8); + ff_hevc_transform_8x8_add_8_sse4(out, xy2coeff(x,y), 8); + } +}; + +class DSPFunc_IDCT_SSE_16x16 : public DSPFunc_IDCT_Base +{ +public: + DSPFunc_IDCT_SSE_16x16() : DSPFunc_IDCT_Base(16) { } + + virtual const char* name() const { return "IDCT-SSE-16x16"; } + + virtual DSPFunc* referenceImplementation() const { return &idct_scalar_16x16; } + + virtual void runOnBlock(int x,int y) { + memset(out,0,16*16); + ff_hevc_transform_16x16_add_8_sse4(out, xy2coeff(x,y), 16); + } +}; + +class DSPFunc_IDCT_SSE_32x32 : public DSPFunc_IDCT_Base +{ +public: + DSPFunc_IDCT_SSE_32x32() : DSPFunc_IDCT_Base(32) { } + + virtual const char* name() const { return "IDCT-SSE-32x32"; } + + virtual DSPFunc* referenceImplementation() const { return &idct_scalar_32x32; } + + virtual void runOnBlock(int x,int y) { + memset(out,0,32*32); + ff_hevc_transform_32x32_add_8_sse4(out, xy2coeff(x,y), 32); + } +}; + +DSPFunc_IDCT_SSE_4x4 idct_sse_4x4; +DSPFunc_IDCT_SSE_8x8 idct_sse_8x8; +DSPFunc_IDCT_SSE_16x16 idct_sse_16x16; +DSPFunc_IDCT_SSE_32x32 idct_sse_32x32; + + + + + +class DSPFunc_FDCT_SSE_4x4 : public DSPFunc_FDCT_Base +{ +public: + DSPFunc_FDCT_SSE_4x4() : DSPFunc_FDCT_Base(4) { } + + virtual const char* name() const { return "FDCT-SSE-4x4-to-be-implemented"; } + + virtual DSPFunc* referenceImplementation() const { return &fdct_scalar_4x4; } + + virtual void runOnBlock(int x,int y) { + // <<< function to be implemented >>> + + // fdct_4x4_8_fallback(coeffs, residuals+x+y*stride, stride); + + bool D = false; + if (D) { dump(x,y); } + } +}; + + +class DSPFunc_FDCT_SSE_8x8 : public DSPFunc_FDCT_Base +{ +public: + DSPFunc_FDCT_SSE_8x8() : DSPFunc_FDCT_Base(8) { } + + virtual const char* name() const { return "FDCT-SSE-8x8-to-be-implemented"; } + + virtual DSPFunc* referenceImplementation() const { return &fdct_scalar_8x8; } + + virtual void runOnBlock(int x,int y) { + // <<< function to be implemented >>> + + // fdct_8x8_8_fallback(coeffs, residuals+x+y*stride, stride); + + bool D = false; + if (D) { dump(x,y); } + } +}; + + +class DSPFunc_FDCT_SSE_16x16 : public DSPFunc_FDCT_Base +{ +public: + DSPFunc_FDCT_SSE_16x16() : DSPFunc_FDCT_Base(16) { } + + virtual const char* name() const { return "FDCT-SSE-16x16-to-be-implemented"; } + + virtual DSPFunc* referenceImplementation() const { return &fdct_scalar_16x16; } + + virtual void runOnBlock(int x,int y) { + // <<< function to be implemented >>> + + // fdct_16x16_8_fallback(coeffs, residuals+x+y*stride, stride); + + bool D = false; + if (D) { dump(x,y); } + } +}; + +class DSPFunc_FDCT_SSE_32x32 : public DSPFunc_FDCT_Base +{ +public: + DSPFunc_FDCT_SSE_32x32() : DSPFunc_FDCT_Base(32) { } + + virtual const char* name() const { return "FDCT-SSE-32x32-to-be-implemented"; } + + virtual DSPFunc* referenceImplementation() const { return &fdct_scalar_32x32; } + + virtual void runOnBlock(int x,int y) { + // <<< function to be implemented >>> + + // fdct_32x32_8_fallback(coeffs, residuals+x+y*stride, stride); + + bool D = false; + if (D) { dump(x,y); } + } +}; + +DSPFunc_FDCT_SSE_4x4 fdct_sse_4x4; +DSPFunc_FDCT_SSE_8x8 fdct_sse_8x8; +DSPFunc_FDCT_SSE_16x16 fdct_sse_16x16; +DSPFunc_FDCT_SSE_32x32 fdct_sse_32x32;
View file
libde265-1.0.3.tar.gz/acceleration-speed/dct.cc
Added
@@ -0,0 +1,144 @@ +/* + * H.265 video codec. + * Copyright (c) 2015 struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 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. + * + * libde265 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 libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "dct.h" + + +// --- FDCT --- + +void DSPFunc_FDCT_Base::dump(int x,int y) +{ + printf("-> "); + for (int yy=0;yy<blkSize;yy++) + for (int xx=0;xx<blkSize;xx++) + printf("%d ", *(residuals+x+xx+(y+yy)*stride)); + printf("\n"); + + printf(" "); + for (int x=0;x<blkSize*blkSize;x++) + printf("%d ", coeffs[x]); + printf("\n"); + + int32_t out[32*32]; + transform_idct_8x8_fallback(out, coeffs, 20-8, 15); + + printf(" "); + for (int x=0;x<blkSize*blkSize;x++) + printf("%d ", out[x]); + printf("\n"); +} + + +bool DSPFunc_FDCT_Base::compareToReferenceImplementation() +{ + DSPFunc_FDCT_Base* refImpl = dynamic_cast<DSPFunc_FDCT_Base*>(referenceImplementation()); + + for (int i=0;i<blkSize*blkSize;i++) + if (coeffs[i] != refImpl->coeffs[i]) + return false; + + return true; +} + + +bool DSPFunc_FDCT_Base::prepareNextImage(std::shared_ptr<const de265_image> img) +{ + if (!curr_image) { + curr_image = img; + return false; + } + + prev_image = curr_image; + curr_image = img; + + int w = curr_image->get_width(0); + int h = curr_image->get_height(0); + + if (residuals==NULL) { + int align=16; + stride = (w+align-1)/align*align; + residuals = new int16_t[stride*h]; + } + + int cstride = curr_image->get_luma_stride(); + int pstride = prev_image->get_luma_stride(); + const uint8_t* curr = curr_image->get_image_plane_at_pos(0,0,0); + const uint8_t* prev = prev_image->get_image_plane_at_pos(0,0,0); + + for (int y=0;y<h;y++) + for (int x=0;x<w;x++) { + residuals[y*stride+x] = curr[y*cstride+x] - prev[y*pstride+x]; + } + + return true; +} + + +// --- IDCT --- + +bool DSPFunc_IDCT_Base::compareToReferenceImplementation() +{ + DSPFunc_IDCT_Base* refImpl = dynamic_cast<DSPFunc_IDCT_Base*>(referenceImplementation()); + + for (int i=0;i<blkSize*blkSize;i++) + if (out[i] != refImpl->out[i]) + return false; + + return true; +} + + +bool DSPFunc_IDCT_Base::prepareNextImage(std::shared_ptr<const de265_image> img) +{ + // --- generate fake coefficients --- + // difference between two frames + + if (!curr_image) { + curr_image = img; + return false; + } + + prev_image = curr_image; + curr_image = img; + + int w = curr_image->get_width(0); + int h = curr_image->get_height(0); + + int align = blkSize; + width = (w+align-1) / align * align; + + blksPerRow = w/blkSize; + + if (coeffs==NULL) { + coeffs = new int16_t[width*h]; + } + + int cstride = curr_image->get_luma_stride(); + int pstride = prev_image->get_luma_stride(); + const uint8_t* curr = curr_image->get_image_plane_at_pos(0,0,0); + const uint8_t* prev = prev_image->get_image_plane_at_pos(0,0,0); + + for (int y=0;y<h;y++) + for (int x=0;x<w;x++) { + coeffs[y*w+x] = curr[y*cstride+x] - prev[y*pstride+x]; + } + + return true; +}
View file
libde265-1.0.3.tar.gz/acceleration-speed/dct.h
Added
@@ -0,0 +1,111 @@ +/* + * H.265 video codec. + * Copyright (c) 2015 struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 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. + * + * libde265 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 libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ACCELERATION_SPEED_DCT_H +#define ACCELERATION_SPEED_DCT_H + +#include "acceleration-speed.h" +#include "libde265/fallback-dct.h" + + +class DSPFunc_FDCT_Base : public DSPFunc +{ +public: + DSPFunc_FDCT_Base(int size) { + residuals=NULL; + blkSize=size; + coeffs = new int16_t[size*size]; + } + + virtual const char* name() const { return "FDCT-Base"; } + + virtual int getBlkWidth() const { return blkSize; } + virtual int getBlkHeight() const { return blkSize; } + + virtual void runOnBlock(int x,int y) = 0; + + void dump(int x,int y); + + virtual DSPFunc* referenceImplementation() const { return NULL; } + + bool compareToReferenceImplementation(); + virtual bool prepareNextImage(std::shared_ptr<const de265_image> img); + +private: + std::shared_ptr<const de265_image> prev_image; + std::shared_ptr<const de265_image> curr_image; + +protected: + int blkSize; + + int16_t* residuals; + int stride; + int16_t* coeffs; +}; + + + + + +class DSPFunc_IDCT_Base : public DSPFunc +{ +public: + DSPFunc_IDCT_Base(int size) { + prev_image=NULL; curr_image=NULL; coeffs=NULL; blkSize=size; + out = new uint8_t[size*size]; // allocate it to ensure alignment + } + + virtual const char* name() const { return "IDCT-Base"; } + + virtual int getBlkWidth() const { return blkSize; } + virtual int getBlkHeight() const { return blkSize; } + + virtual void runOnBlock(int x,int y) = 0; + + virtual DSPFunc* referenceImplementation() const { return NULL; } + + virtual bool compareToReferenceImplementation(); + virtual bool prepareNextImage(std::shared_ptr<const de265_image> img); + + inline int16_t* xy2coeff(int x,int y) const { + // note: x+y*width does not make any sense, but gives us some random data + + //int xb = x/blkSize; + //int yb = y/blkSize; + int offset = (x+y*blksPerRow)*blkSize; //(xb+yb*blksPerRow)*blkSize*blkSize; + //printf("%d %d -> %d %p\n", x,y, offset, coeffs+offset); + return coeffs + offset; + } + +private: + std::shared_ptr<const de265_image> prev_image; + std::shared_ptr<const de265_image> curr_image; + +protected: + int blkSize; + + int16_t* coeffs; + int width; + int blksPerRow; + uint8_t* out; // [32*32]; +}; + + +#endif
View file
libde265-1.0.2.tar.gz/aclocal.m4 -> libde265-1.0.3.tar.gz/aclocal.m4
Changed
@@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.14.1 -*- Autoconf -*- +# generated automatically by aclocal 1.15 -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,32 +20,63 @@ If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright © 2004 Scott James Remnant <scott@netsplit.com>. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29.1) +dnl +dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>. +dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com> +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.1]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) @@ -67,18 +98,19 @@ PKG_CONFIG="" fi fi[]dnl -])# PKG_PROG_PKG_CONFIG +])dnl PKG_PROG_PKG_CONFIG -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ @@ -88,8 +120,10 @@ $3])dnl fi]) -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" @@ -101,10 +135,11 @@ else pkg_failed=untried fi[]dnl -])# _PKG_CONFIG +])dnl _PKG_CONFIG -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -112,19 +147,17 @@ else _pkg_short_errors_supported=no fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED +])dnl _PKG_SHORT_ERRORS_SUPPORTED -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl @@ -178,9 +211,92 @@ AC_MSG_RESULT([yes]) $3 fi[]dnl -])# PKG_CHECK_MODULES +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + -# Copyright (C) 2002-2013 Free Software Foundation, Inc. +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -192,10 +308,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.14' +[am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.14.1], [], +m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -211,14 +327,14 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.14.1])dnl +[AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -238,7 +354,7 @@ # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -283,15 +399,14 @@ # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -322,7 +437,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -513,7 +628,7 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -589,7 +704,7 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -679,8 +794,8 @@ # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl @@ -753,7 +868,11 @@ END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi -fi]) +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further @@ -782,7 +901,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -793,7 +912,7 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -803,7 +922,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -824,7 +943,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -874,7 +993,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -913,7 +1032,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -942,7 +1061,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -989,7 +1108,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1008,7 +1127,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1089,7 +1208,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1149,7 +1268,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1177,7 +1296,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1196,7 +1315,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it,
View file
libde265-1.0.2.tar.gz/compile -> libde265-1.0.3.tar.gz/compile
Changed
@@ -3,7 +3,7 @@ scriptversion=2012-10-14.11; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey <tromey@cygnus.com>. # # This program is free software; you can redistribute it and/or modify
View file
libde265-1.0.2.tar.gz/config.guess -> libde265-1.0.3.tar.gz/config.guess
Changed
@@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2013-06-10' +timestamp='2015-08-20' # 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 @@ -24,12 +24,12 @@ # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # 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 # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to <config-patches@gnu.org>. me=`echo "$0" | sed -e 's,.*/,,'` @@ -50,7 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-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." @@ -149,7 +149,7 @@ LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac @@ -168,20 +168,27 @@ # 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)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /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 ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) + arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -197,6 +204,13 @@ os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +221,13 @@ release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -235,6 +249,9 @@ *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -579,8 +596,9 @@ else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -826,7 +844,7 @@ *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; - i*:MSYS*:*) + *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) @@ -932,6 +950,9 @@ crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -969,10 +990,10 @@ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} exit ;; - or32:Linux:*:*) + or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) @@ -1020,7 +1041,7 @@ echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -1260,16 +1281,26 @@ if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - 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 - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + 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 + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; @@ -1361,154 +1392,6 @@ exit ;; esac -eval $set_cc_for_build -cat >$dummy.c <<EOF -#ifdef _SEQUENT_ -# include <sys/types.h> -# include <sys/utsname.h> -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include <sys/param.h> - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include <sys/param.h> -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - cat >&2 <<EOF $0: unable to guess system type
View file
libde265-1.0.2.tar.gz/config.h.in -> libde265-1.0.3.tar.gz/config.h.in
Changed
@@ -21,6 +21,9 @@ /* Support ARM instructions */ #undef HAVE_ARM +/* Define to 1 if you have the <cstdint> header file. */ +#undef HAVE_CSTDINT + /* define if the compiler supports basic C++11 syntax */ #undef HAVE_CXX11 @@ -132,10 +135,15 @@ /* Define to 1 if you have the `__mingw_aligned_malloc' function. */ #undef HAVE___MINGW_ALIGNED_MALLOC -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ +/* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR +/* Define to 1 if a fallback for "nullptr" is required. */ +#undef NEED_NULLPTR_FALLBACK + +/* Define to 1 if a fallback for "std::move" is required. */ +#undef NEED_STD_MOVE_FALLBACK + /* Name of package */ #undef PACKAGE @@ -171,6 +179,10 @@ /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ #undef TIME_WITH_SYS_TIME +/* Define to 1 if the std::tr1 namespace should be included in the std + namespace. */ +#undef USE_STD_TR1_NAMESPACE + /* Version number of package */ #undef VERSION
View file
libde265-1.0.2.tar.gz/config.sub -> libde265-1.0.3.tar.gz/config.sub
Changed
@@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2013-08-10' +timestamp='2015-08-20' # 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 @@ -25,7 +25,7 @@ # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -68,7 +68,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-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." @@ -117,7 +117,7 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os @@ -255,16 +255,18 @@ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ @@ -282,8 +284,10 @@ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ @@ -295,14 +299,14 @@ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ | 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 \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -310,6 +314,7 @@ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -324,7 +329,10 @@ c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -369,18 +377,20 @@ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | 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-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ @@ -400,8 +410,10 @@ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ @@ -413,16 +425,18 @@ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | 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?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -430,6 +444,7 @@ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -506,6 +521,9 @@ basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -767,6 +785,9 @@ basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -822,6 +843,10 @@ basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -1354,7 +1379,7 @@ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1367,14 +1392,14 @@ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -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*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1592,9 +1617,6 @@ mips*-*) os=-elf ;; - or1k-*) - os=-elf - ;; or32-*) os=-coff ;;
View file
libde265-1.0.2.tar.gz/configure -> libde265-1.0.3.tar.gz/configure
Changed
@@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libde265 1.0.2. +# Generated by GNU Autoconf 2.69 for libde265 1.0.3. # # Report bugs to <farin@struktur.de>. # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='libde265' PACKAGE_TARNAME='libde265' -PACKAGE_VERSION='1.0.2' -PACKAGE_STRING='libde265 1.0.2' +PACKAGE_VERSION='1.0.3' +PACKAGE_STRING='libde265 1.0.3' PACKAGE_BUGREPORT='farin@struktur.de' PACKAGE_URL='' @@ -723,6 +723,7 @@ CCASFLAGS CCAS CPP +LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO @@ -788,6 +789,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -814,6 +816,7 @@ enable_static with_pic enable_fast_install +with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock @@ -837,6 +840,7 @@ LDFLAGS LIBS CPPFLAGS +LT_SYS_LIBRARY_PATH CPP CCAS CCASFLAGS @@ -893,6 +897,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1145,6 +1150,15 @@ | -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=* \ @@ -1282,7 +1296,7 @@ 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. @@ -1395,7 +1409,7 @@ # 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 libde265 1.0.2 to adapt to many kinds of systems. +\`configure' configures libde265 1.0.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1435,6 +1449,7 @@ --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] @@ -1466,7 +1481,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libde265 1.0.2:";; + short | recursive ) echo "Configuration of libde265 1.0.3:";; esac cat <<\_ACEOF @@ -1500,9 +1515,12 @@ --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-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). Some influential environment variables: CC C compiler command @@ -1512,6 +1530,8 @@ LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. CPP C preprocessor CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) @@ -1602,7 +1622,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libde265 configure 1.0.2 +libde265 configure 1.0.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2089,6 +2109,97 @@ } # ac_fn_c_check_header_mongrel +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## -------------------------------- ## +## Report this to farin@struktur.de ## +## -------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_header_mongrel + # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -2276,7 +2387,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libde265 $as_me 1.0.2, which was +It was created by libde265 $as_me 1.0.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2631,7 +2742,7 @@ ac_config_headers="$ac_config_headers config.h" -NUMERIC_VERSION=0x01000200 # Numeric representation of the version (A.B.C[.D] = 0xAABBCCDD) +NUMERIC_VERSION=0x01000300 # Numeric representation of the version (A.B.C[.D] = 0xAABBCCDD) LIBDE265_CURRENT=0 @@ -2793,8 +2904,8 @@ -macro_version='2.4.2' -macro_revision='1.3337' +macro_version='2.4.6' +macro_revision='2.4.6' @@ -2808,7 +2919,7 @@ -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. @@ -2857,7 +2968,7 @@ $ECHO "" } -case "$ECHO" in +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 @@ -2879,8 +2990,8 @@ -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -4031,19 +4142,19 @@ # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld -if test "$GCC" = yes; then +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 + # 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` ;; @@ -4057,7 +4168,7 @@ 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" + test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. @@ -4068,7 +4179,7 @@ with_gnu_ld=unknown ;; esac -elif test "$with_gnu_ld" = yes; then +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 @@ -4079,32 +4190,32 @@ $as_echo_n "(cached) " >&6 else if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do - IFS="$lt_save_ifs" + 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" + lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break + test no != "$with_gnu_ld" && break ;; *) - test "$with_gnu_ld" != yes && break + test yes != "$with_gnu_ld" && break ;; esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs else - lt_cv_path_LD="$LD" # Let the user override the test with a path. + lt_cv_path_LD=$LD # Let the user override the test with a path. fi fi -LD="$lt_cv_path_LD" +LD=$lt_cv_path_LD if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } @@ -4147,33 +4258,38 @@ else if test -n "$NM"; then # Let the user override the test. - lt_cv_path_NM="$NM" + lt_cv_path_NM=$NM else - lt_nm_to_check="${ac_tool_prefix}nm" + 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 + 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" + 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 + 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: + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) + # 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 + break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" - break + break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but @@ -4184,15 +4300,15 @@ esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" +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 : @@ -4298,9 +4414,9 @@ fi fi - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) - DUMPBIN="$DUMPBIN -symbols" + DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: @@ -4308,8 +4424,8 @@ esac fi - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi test -z "$NM" && NM=nm @@ -4360,7 +4476,7 @@ $as_echo_n "(cached) " >&6 else i=0 - teststring="ABCD" + teststring=ABCD case $build_os in msdosdjgpp*) @@ -4400,7 +4516,7 @@ lt_cv_sys_max_cmd_len=8192; ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + 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` @@ -4451,22 +4567,22 @@ *) 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 + 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 + 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` \ + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough + test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring @@ -4484,7 +4600,7 @@ fi -if test -n $lt_cv_sys_max_cmd_len ; then +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 @@ -4502,30 +4618,6 @@ : ${MV="mv -f"} : ${RM="rm -f"} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else @@ -4648,13 +4740,13 @@ reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then + if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + 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 @@ -4782,13 +4874,13 @@ # 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. +# 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. +# 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]*) @@ -4815,8 +4907,7 @@ # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + 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 @@ -4912,8 +5003,8 @@ lt_cv_deplibs_check_method=pass_all ;; -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +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)$' @@ -4966,6 +5057,9 @@ tpf*) lt_cv_deplibs_check_method=pass_all ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; esac fi @@ -5123,8 +5217,8 @@ case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL + # 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 @@ -5136,7 +5230,7 @@ ;; *) # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac @@ -5291,7 +5385,7 @@ ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } - if test "$ac_status" -eq 0; then + 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 @@ -5299,7 +5393,7 @@ ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } - if test "$ac_status" -ne 0; then + if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi @@ -5312,7 +5406,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } -if test "x$lt_cv_ar_at_file" = xno; then +if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file @@ -5529,7 +5623,7 @@ if test -n "$RANLIB"; then case $host_os in - openbsd*) + bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) @@ -5661,7 +5755,7 @@ symcode='[ABCDGISTW]' ;; hpux*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; @@ -5694,14 +5788,44 @@ 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 -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" +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 -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +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= @@ -5719,21 +5843,24 @@ # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. + # 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=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" {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'" @@ -5781,11 +5908,11 @@ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#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__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else @@ -5811,7 +5938,7 @@ { { "@PROGRAM@", (void *) 0 }, _LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; @@ -5831,13 +5958,13 @@ mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" + 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 + test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS @@ -5858,7 +5985,7 @@ rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then + if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= @@ -5911,6 +6038,16 @@ + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } @@ -5923,9 +6060,9 @@ lt_sysroot= -case ${with_sysroot} in #( +case $with_sysroot in #( yes) - if test "$GCC" = yes; then + if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( @@ -5935,8 +6072,8 @@ no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${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 @@ -5948,18 +6085,99 @@ +{ $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 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $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 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +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 "x$enable_libtool_lock" != xno && enable_libtool_lock=yes +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 which ABI we are using. + # 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 @@ -5968,24 +6186,25 @@ test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) - HPUX_IA64_MODE="32" + HPUX_IA64_MODE=32 ;; *ELF-64*) - HPUX_IA64_MODE="64" + HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) - # Find out which ABI we are using. + # 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 "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" @@ -6014,9 +6233,50 @@ 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 which ABI we are using. + # 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 @@ -6039,10 +6299,10 @@ ;; esac ;; - powerpc64le-*) + powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; - powerpc64-*) + powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) @@ -6061,10 +6321,10 @@ x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; - powerpcle-*) + powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; - powerpc-*) + powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) @@ -6082,7 +6342,7 @@ *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" + 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; } @@ -6122,13 +6382,14 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then + 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" + CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) - # Find out which ABI we are using. + # 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 @@ -6140,7 +6401,7 @@ case $lt_cv_prog_gnu_ld in yes*) case $host in - i?86-*-solaris*) + i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) @@ -6149,7 +6410,7 @@ 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" + LD=${LD-ld}_sol2 fi ;; *) @@ -6165,7 +6426,7 @@ ;; esac -need_locks="$enable_libtool_lock" +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. @@ -6276,7 +6537,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then +if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -6779,7 +7040,7 @@ $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then + 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 @@ -6797,7 +7058,7 @@ cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 @@ -6836,7 +7097,7 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 @@ -6865,7 +7126,7 @@ _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + 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 @@ -6878,32 +7139,32 @@ $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _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' ;; + _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' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then + if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + 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}' + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= @@ -6911,6 +7172,41 @@ ;; 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' @@ -7214,14 +7510,14 @@ *) enable_shared=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -7245,14 +7541,14 @@ *) enable_static=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -7276,14 +7572,14 @@ *) pic_mode=default # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -7291,8 +7587,6 @@ fi -test -z "$pic_mode" && pic_mode=default - @@ -7308,14 +7602,14 @@ *) 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," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -7329,11 +7623,63 @@ + 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" +LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' @@ -7382,7 +7728,7 @@ -if test -n "${ZSH_VERSION+set}" ; then +if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi @@ -7421,7 +7767,7 @@ # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then + if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -7432,14 +7778,14 @@ ofile=libtool can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except MSVC, +# 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" +with_gnu_ld=$lt_cv_prog_gnu_ld -old_CC="$CC" -old_CFLAGS="$CFLAGS" +old_CC=$CC +old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc @@ -7448,15 +7794,8 @@ test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +func_cc_basename $compiler +cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it @@ -7471,22 +7810,22 @@ else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + 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 + 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" + 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 -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" + 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 : @@ -7509,13 +7848,13 @@ break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +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; } @@ -7537,22 +7876,22 @@ else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + 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 + 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" + 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 -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" + 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 : @@ -7575,13 +7914,13 @@ break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +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; } @@ -7602,7 +7941,7 @@ # Use C for the default configuration in the libtool script -lt_save_CC="$CC" +lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7664,7 +8003,7 @@ lt_prog_compiler_no_builtin_flag= -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; @@ -7680,7 +8019,7 @@ 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" + 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 @@ -7710,7 +8049,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then +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 : @@ -7728,17 +8067,18 @@ lt_prog_compiler_static= - if test "$GCC" = yes; then + 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 "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi + lt_prog_compiler_pic='-fPIC' ;; amigaos*) @@ -7749,8 +8089,8 @@ ;; 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'. + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac @@ -7766,6 +8106,11 @@ # 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*) @@ -7836,7 +8181,7 @@ case $host_os in aix*) lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else @@ -7844,10 +8189,29 @@ 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*) @@ -7863,7 +8227,7 @@ ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' + lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) @@ -7874,7 +8238,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. + # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' @@ -7899,6 +8263,12 @@ 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) @@ -7996,7 +8366,7 @@ ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi @@ -8025,7 +8395,7 @@ fi case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: + # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; @@ -8057,7 +8427,7 @@ 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" + 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 @@ -8087,7 +8457,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then +if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; @@ -8119,7 +8489,7 @@ $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" + 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 @@ -8138,13 +8508,13 @@ fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } -if test x"$lt_cv_prog_compiler_static_works" = xyes; then +if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= @@ -8264,8 +8634,8 @@ -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then +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; } @@ -8277,9 +8647,9 @@ ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + 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 @@ -8322,9 +8692,9 @@ # 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'. + # 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 @@ -8339,7 +8709,7 @@ # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. - if test "$GCC" != yes; then + if test yes != "$GCC"; then with_gnu_ld=no fi ;; @@ -8347,7 +8717,7 @@ # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; - openbsd*) + openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) @@ -8360,7 +8730,7 @@ # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility @@ -8382,24 +8752,24 @@ esac fi - if test "$lt_use_gnu_ld_interface" = yes; then + if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' + 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' + 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' + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no - case `$LD -v 2>&1` in + 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 ... @@ -8412,7 +8782,7 @@ case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then + if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 @@ -8431,7 +8801,7 @@ 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_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) @@ -8447,7 +8817,7 @@ allow_undefined_flag=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi @@ -8457,7 +8827,7 @@ # _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' + export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes @@ -8465,61 +8835,89 @@ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + 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' + 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' + 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' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no - if test "$host_os" = linux-dietlibc; then + 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 "$tmp_diet" = no + && 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' + 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' + 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' ;; @@ -8530,42 +8928,47 @@ 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' + 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' + 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' + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + 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' + 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' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + 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' + 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 @@ -8579,8 +8982,8 @@ 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' + 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 ;; @@ -8598,8 +9001,8 @@ _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' + 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 @@ -8611,7 +9014,7 @@ ld_shlibs=no cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** 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 @@ -8626,9 +9029,9 @@ # 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' + 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 @@ -8645,15 +9048,15 @@ *) 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' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac - if test "$ld_shlibs" = no; then + if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= @@ -8669,7 +9072,7 @@ # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + 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 @@ -8677,34 +9080,57 @@ ;; aix[4-9]*) - if test "$host_cpu" = ia64; then + 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="" + no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". + # -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) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + 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='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | 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 # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # 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 $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + 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 @@ -8723,13 +9149,21 @@ hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes - file_list_spec='${wl}-f,' + 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 "$GCC" = yes; then + 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` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -8748,36 +9182,42 @@ ;; esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' fi - link_all_deplibs=no + # 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 "$host_cpu" = ia64; then + 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 "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + 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' + export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then + 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 "${lt_cv_aix_libpath+set}" = set; then + if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : @@ -8812,7 +9252,7 @@ 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" + lt_cv_aix_libpath_=/usr/lib:/lib fi fi @@ -8820,17 +9260,17 @@ aix_libpath=$lt_cv_aix_libpath_ fi - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + 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 "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + 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" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then + if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : @@ -8865,7 +9305,7 @@ 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" + lt_cv_aix_libpath_=/usr/lib:/lib fi fi @@ -8873,21 +9313,33 @@ aix_libpath=$lt_cv_aix_libpath_ fi - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + 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' + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + 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 ;; @@ -8896,7 +9348,7 @@ 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_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) @@ -8926,16 +9378,17 @@ # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + 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 @@ -8944,18 +9397,18 @@ # 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' + 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 @@ -8964,7 +9417,7 @@ # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + 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. @@ -8983,24 +9436,24 @@ hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + 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" + allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; + ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac - if test "$_lt_dar_can_shared" = "yes"; then + 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}" + 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 @@ -9042,33 +9495,33 @@ ;; hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + 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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + 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_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' + export_dynamic_flag_spec='$wl-E' ;; hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + 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 "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + 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' + 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 @@ -9076,25 +9529,25 @@ ;; hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then + 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' + 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+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' + 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' + 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' + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) @@ -9106,7 +9559,7 @@ $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" + 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 @@ -9125,14 +9578,14 @@ fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +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 @@ -9140,8 +9593,8 @@ ;; esac fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in @@ -9152,7 +9605,7 @@ *) hardcode_direct=yes hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' + export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. @@ -9163,8 +9616,8 @@ ;; irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + 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. @@ -9174,8 +9627,8 @@ 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" + 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; } @@ -9187,24 +9640,35 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + 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' + 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_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 @@ -9219,7 +9683,7 @@ 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_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; @@ -9227,27 +9691,19 @@ *nto* | *qnx*) ;; - openbsd*) + 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__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + 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' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no @@ -9258,33 +9714,53 @@ hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + 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 "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + 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' + 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_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + 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_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' + $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' @@ -9295,24 +9771,24 @@ solaris*) no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + 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' + $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_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' + $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' + 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' + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi @@ -9322,11 +9798,11 @@ 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 understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + 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 @@ -9336,10 +9812,10 @@ ;; sunos4*) - if test "x$host_vendor" = xsequent; then + 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' + 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 @@ -9388,43 +9864,43 @@ ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' + no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + 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' + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # 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' + 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_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' + export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + 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' + 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 ;; @@ -9439,10 +9915,10 @@ ;; esac - if test x$host_vendor = xsni; then + if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' + export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi @@ -9450,7 +9926,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no +test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -9476,7 +9952,7 @@ # Assume -lc should be added archive_cmds_need_lc=yes - if test "$enable_shared" = yes && test "$GCC" = yes; then + if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. @@ -9691,14 +10167,14 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; + 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" ;; + 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 @@ -9714,28 +10190,35 @@ ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # 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` + 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" - else + 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; +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; + lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } @@ -9749,7 +10232,7 @@ # 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'` ;; + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else @@ -9758,7 +10241,7 @@ library_names_spec= libname_spec='lib$name' soname_spec= -shrext_cmds=".so" +shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= @@ -9775,14 +10258,16 @@ # 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' + 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' + soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) @@ -9790,41 +10275,91 @@ need_lib_prefix=no need_version=no hardcode_into_libs=yes - if test "$host_cpu" = ia64; then + 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}' + 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 + # 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 + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # 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. - if test "$aix_use_runtimelinking" = yes; then + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else + 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' - fi + 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 ;; @@ -9834,18 +10369,18 @@ 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}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + 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}' + library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; @@ -9853,8 +10388,8 @@ 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' + 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" @@ -9866,7 +10401,7 @@ cygwin* | mingw* | pw32* | cegcc*) version_type=windows - shrext_cmds=".dll" + shrext_cmds=.dll need_version=no need_lib_prefix=no @@ -9875,8 +10410,8 @@ # 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'\''`~ + 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~ @@ -9892,17 +10427,17 @@ 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" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + 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}' + 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' @@ -9911,8 +10446,8 @@ *,cl*) # Native MSVC libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' case $build_os in mingw*) @@ -9939,7 +10474,7 @@ 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" + 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'` @@ -9952,8 +10487,8 @@ 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'\''`~ + 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' @@ -9966,7 +10501,7 @@ *) # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac @@ -9979,8 +10514,8 @@ 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' + 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`' @@ -9993,8 +10528,8 @@ 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' + 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 ;; @@ -10012,12 +10547,13 @@ version_type=freebsd-$objformat case $version_type in freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac @@ -10047,10 +10583,10 @@ 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes + shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; @@ -10068,14 +10604,15 @@ dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then + 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 - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -10083,8 +10620,8 @@ 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' + 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 ;; @@ -10093,8 +10630,8 @@ 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' + 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, ... @@ -10107,8 +10644,8 @@ 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' + 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 @@ -10119,7 +10656,7 @@ case $host_os in nonstopux*) version_type=nonstopux ;; *) - if test "$lt_cv_prog_gnu_ld" = yes; then + 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 @@ -10127,8 +10664,8 @@ 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}' + 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= @@ -10147,8 +10684,8 @@ 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}" + 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 ;; @@ -10157,13 +10694,33 @@ 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' + 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 @@ -10207,7 +10764,12 @@ # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # 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" @@ -10239,12 +10801,12 @@ 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' + 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' + 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 @@ -10254,7 +10816,7 @@ 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}' + 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 ;; @@ -10263,58 +10825,68 @@ 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' + 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*) +openbsd* | bitrig*) version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" + sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no else - shlibpath_overrides_runpath=yes + 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' - shrext_cmds=".dll" + version_type=windows + shrext_cmds=.dll + need_version=no need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' + # 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=LIBPATH + 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}' + 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" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) @@ -10325,8 +10897,8 @@ 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' + 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 @@ -10336,11 +10908,11 @@ sunos4*) version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes @@ -10348,8 +10920,8 @@ 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' + 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) @@ -10370,24 +10942,24 @@ ;; sysv4*MP*) - if test -d /usr/nec ;then + 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' + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf + 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then + 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' @@ -10405,7 +10977,7 @@ 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}' + 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 @@ -10413,8 +10985,8 @@ 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' + 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 ;; @@ -10424,20 +10996,35 @@ esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no +test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then +if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +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 "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" + +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 + + + + + + @@ -10534,15 +11121,15 @@ hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then + test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && + 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 "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else @@ -10557,12 +11144,12 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi @@ -10572,7 +11159,7 @@ - if test "x$enable_dlopen" != xyes; then + if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown @@ -10582,23 +11169,23 @@ case $host_os in beos*) - lt_cv_dlopen="load_add_on" + 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=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) - lt_cv_dlopen="dlopen" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) - # if libdl is installed we need to link against it + # 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 : @@ -10636,10 +11223,10 @@ { $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" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else - lt_cv_dlopen="dyld" + lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes @@ -10647,10 +11234,18 @@ ;; + 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" + 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; } @@ -10689,11 +11284,11 @@ { $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" + 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" + 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; } @@ -10732,7 +11327,7 @@ { $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" + 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; } @@ -10771,7 +11366,7 @@ { $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" + 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; } @@ -10810,7 +11405,7 @@ { $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" + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -10831,21 +11426,21 @@ ;; esac - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else + 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 "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - save_LIBS="$LIBS" + save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 @@ -10853,7 +11448,7 @@ if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : + if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -10900,9 +11495,9 @@ # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* 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)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -10932,7 +11527,7 @@ (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 + 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 @@ -10952,14 +11547,14 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } - if test "x$lt_cv_dlopen_self" = xyes; then + 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 "$cross_compiling" = yes; then : + if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -11006,9 +11601,9 @@ # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* 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)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -11038,7 +11633,7 @@ (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 + 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 @@ -11059,9 +11654,9 @@ $as_echo "$lt_cv_dlopen_self_static" >&6; } fi - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS ;; esac @@ -11105,7 +11700,7 @@ # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) - if test -n "$STRIP" ; then + if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -11133,7 +11728,7 @@ - # Report which library types will actually be built + # 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 @@ -11141,13 +11736,13 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no + 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 "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' @@ -11155,8 +11750,12 @@ ;; aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + 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 @@ -11166,7 +11765,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } @@ -11180,7 +11779,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -CC="$lt_save_CC" +CC=$lt_save_CC @@ -11673,15 +12272,15 @@ 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}\$%%"`;; + 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 - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then + 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' @@ -11860,7 +12459,7 @@ # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then +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;" @@ -11921,46 +12520,39 @@ CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + 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 "$GXX" = yes; then + 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 "$GXX" = yes; then + 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 "$withval" = no || with_gnu_ld=yes + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld -if test "$GCC" = yes; then +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 + # 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` ;; @@ -11974,7 +12566,7 @@ 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" + test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. @@ -11985,7 +12577,7 @@ with_gnu_ld=unknown ;; esac -elif test "$with_gnu_ld" = yes; then +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 @@ -11996,32 +12588,32 @@ $as_echo_n "(cached) " >&6 else if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do - IFS="$lt_save_ifs" + 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" + lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break + test no != "$with_gnu_ld" && break ;; *) - test "$with_gnu_ld" != yes && break + test yes != "$with_gnu_ld" && break ;; esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs else - lt_cv_path_LD="$LD" # Let the user override the test with a path. + lt_cv_path_LD=$LD # Let the user override the test with a path. fi fi -LD="$lt_cv_path_LD" +LD=$lt_cv_path_LD if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } @@ -12057,22 +12649,22 @@ # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + 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' + 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}' + 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' + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_CXX= fi @@ -12109,18 +12701,30 @@ ld_shlibs_CXX=no ;; aix[4-9]*) - if test "$host_cpu" = ia64; then + 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="" + no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # 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 @@ -12130,6 +12734,13 @@ ;; 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 @@ -12148,13 +12759,21 @@ hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes - file_list_spec_CXX='${wl}-f,' + 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 "$GXX" = yes; then + 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` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -12172,36 +12791,44 @@ fi esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + 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 "$host_cpu" = ia64; then + 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 "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + 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' + export_dynamic_flag_spec_CXX='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then + 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_CXX='-berok' + # 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 "${lt_cv_aix_libpath+set}" = set; then + if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : @@ -12236,7 +12863,7 @@ 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" + lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi @@ -12244,18 +12871,18 @@ aix_libpath=$lt_cv_aix_libpath__CXX fi - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + 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 "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + 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" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then + if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : @@ -12290,7 +12917,7 @@ 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" + lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi @@ -12298,22 +12925,34 @@ aix_libpath=$lt_cv_aix_libpath__CXX fi - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + 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' + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + 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 ;; @@ -12323,7 +12962,7 @@ allow_undefined_flag_CXX=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi @@ -12351,57 +12990,58 @@ # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + 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' + 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' + export_dynamic_flag_spec_CXX='$wl--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + 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 @@ -12415,27 +13055,27 @@ hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + 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" + allow_undefined_flag_CXX=$_lt_dar_allow_undefined case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; + ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac - if test "$_lt_dar_can_shared" = "yes"; then + 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 "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + 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 @@ -12444,6 +13084,34 @@ ;; + 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++*) @@ -12479,14 +13147,14 @@ ;; haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + 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_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' + 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 @@ -12498,7 +13166,7 @@ ld_shlibs_CXX=no ;; aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + 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. @@ -12507,11 +13175,11 @@ # 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"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + 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 @@ -12521,15 +13189,15 @@ ;; hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + 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' + export_dynamic_flag_spec_CXX='$wl-E' ;; esac fi @@ -12555,13 +13223,13 @@ 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' + 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+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' + 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 @@ -12572,20 +13240,20 @@ # 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"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then + 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' + 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+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' + 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 @@ -12600,22 +13268,22 @@ 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' + 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' + 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' + 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 @@ -12624,17 +13292,17 @@ old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + 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' + 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_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; @@ -12647,8 +13315,8 @@ # 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' + 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. @@ -12657,10 +13325,10 @@ # 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"' + 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' + 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. @@ -12674,59 +13342,59 @@ # 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' + 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' + 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' + 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`"' + 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' + 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' + 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' + 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' + 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' + 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' + 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' @@ -12740,18 +13408,18 @@ # 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' + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + 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' + 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 ;; *) @@ -12759,10 +13427,10 @@ *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' + 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' + 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 @@ -12820,22 +13488,17 @@ ld_shlibs_CXX=yes ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - - openbsd*) + 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__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + 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 @@ -12851,9 +13514,9 @@ # 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_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_flag_spec_CXX='$wl-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using @@ -12871,17 +13534,17 @@ 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=' $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_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' + 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 @@ -12896,21 +13559,21 @@ # 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"' + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + 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 -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' + 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_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists @@ -12956,9 +13619,9 @@ # 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_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' + $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 @@ -12966,7 +13629,7 @@ solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. + # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; @@ -12983,30 +13646,30 @@ ;; gcx*) # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if 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 $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + 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 -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $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 + # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_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 -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $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 @@ -13014,11 +13677,11 @@ 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' + 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' + whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi @@ -13027,52 +13690,52 @@ ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' + 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 -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' + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # 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' + 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_flag_spec_CXX='$wl-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' + 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' + 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" + '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" + '"$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' + 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 ;; @@ -13104,10 +13767,10 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } - test "$ld_shlibs_CXX" = no && can_build_shared=no + test no = "$ld_shlibs_CXX" && can_build_shared=no - GCC_CXX="$GXX" - LD_CXX="$LD" + GCC_CXX=$GXX + LD_CXX=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -13151,13 +13814,13 @@ pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in + case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. - if test $p = "-L" || - test $p = "-R"; then + if test x-L = "$p" || + test x-R = "$p"; then prev=$p continue fi @@ -13173,16 +13836,16 @@ case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in + 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}" + compiler_lib_search_path_CXX=$prev$p else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" fi ;; # The "-l" case would never come before the object being @@ -13190,9 +13853,9 @@ esac else if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" + postdeps_CXX=$prev$p else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" + postdeps_CXX="${postdeps_CXX} $prev$p" fi fi prev= @@ -13207,15 +13870,15 @@ continue fi - if test "$pre_test_object_deps_done" = no; then + if test no = "$pre_test_object_deps_done"; then if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" + 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" + postdep_objects_CXX=$p else postdep_objects_CXX="$postdep_objects_CXX $p" fi @@ -13245,51 +13908,6 @@ postdep_objects_CXX= postdeps_CXX= ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; esac @@ -13298,7 +13916,7 @@ 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!^ !!'` + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi @@ -13337,17 +13955,18 @@ # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then + 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 "$host_cpu" = ia64; then + 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*) @@ -13358,8 +13977,8 @@ ;; 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'. + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac @@ -13374,6 +13993,11 @@ # 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 @@ -13423,7 +14047,7 @@ case $host_os in aix[4-9]*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else @@ -13463,14 +14087,14 @@ case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then + lt_prog_compiler_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' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default @@ -13507,7 +14131,7 @@ lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. + # 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' @@ -13652,7 +14276,7 @@ fi case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: + # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; @@ -13684,7 +14308,7 @@ 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" + 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 @@ -13714,7 +14338,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then +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" ;; @@ -13740,7 +14364,7 @@ $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" + 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 @@ -13759,13 +14383,13 @@ fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then +if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : else lt_prog_compiler_static_CXX= @@ -13879,8 +14503,8 @@ -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; 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; } @@ -13892,9 +14516,9 @@ ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + 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 @@ -13911,17 +14535,21 @@ case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". + # -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) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + 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='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | 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*) - export_symbols_cmds_CXX="$ltdll_cmds" + export_symbols_cmds_CXX=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in @@ -13944,7 +14572,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no +test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld @@ -13961,7 +14589,7 @@ # Assume -lc should be added archive_cmds_need_lc_CXX=yes - if test "$enable_shared" = yes && test "$GCC" = yes; then + if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. @@ -14089,7 +14717,7 @@ library_names_spec= libname_spec='lib$name' soname_spec= -shrext_cmds=".so" +shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= @@ -14106,14 +14734,16 @@ # 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' + 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' + soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) @@ -14121,41 +14751,91 @@ need_lib_prefix=no need_version=no hardcode_into_libs=yes - if test "$host_cpu" = ia64; then + 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}' + 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 + # 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 + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # 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. - if test "$aix_use_runtimelinking" = yes; then + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else + 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' - fi + 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 ;; @@ -14165,18 +14845,18 @@ 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}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + 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}' + library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; @@ -14184,8 +14864,8 @@ 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' + 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" @@ -14197,7 +14877,7 @@ cygwin* | mingw* | pw32* | cegcc*) version_type=windows - shrext_cmds=".dll" + shrext_cmds=.dll need_version=no need_lib_prefix=no @@ -14206,8 +14886,8 @@ # 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'\''`~ + 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~ @@ -14223,16 +14903,16 @@ 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*) # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + 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}' + 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' @@ -14241,8 +14921,8 @@ *,cl*) # Native MSVC libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' case $build_os in mingw*) @@ -14269,7 +14949,7 @@ 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" + 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'` @@ -14282,8 +14962,8 @@ 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'\''`~ + 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' @@ -14296,7 +14976,7 @@ *) # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac @@ -14309,8 +14989,8 @@ 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' + 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`' @@ -14322,8 +15002,8 @@ 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' + 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 ;; @@ -14341,12 +15021,13 @@ version_type=freebsd-$objformat case $version_type in freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac @@ -14376,10 +15057,10 @@ 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes + shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; @@ -14397,14 +15078,15 @@ dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then + 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 - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -14412,8 +15094,8 @@ 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' + 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 ;; @@ -14422,8 +15104,8 @@ 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' + 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, ... @@ -14436,8 +15118,8 @@ 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' + 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 @@ -14448,7 +15130,7 @@ case $host_os in nonstopux*) version_type=nonstopux ;; *) - if test "$lt_cv_prog_gnu_ld" = yes; then + 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 @@ -14456,8 +15138,8 @@ 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}' + 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= @@ -14476,8 +15158,8 @@ 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}" + 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 ;; @@ -14486,13 +15168,33 @@ 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' + 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 @@ -14536,7 +15238,12 @@ # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # 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" @@ -14568,12 +15275,12 @@ 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' + 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' + 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 @@ -14583,7 +15290,7 @@ 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}' + 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 ;; @@ -14592,58 +15299,68 @@ 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' + 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*) +openbsd* | bitrig*) version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" + sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no else - shlibpath_overrides_runpath=yes + 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' - shrext_cmds=".dll" + version_type=windows + shrext_cmds=.dll + need_version=no need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' + # 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=LIBPATH + 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}' + 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" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) @@ -14654,8 +15371,8 @@ 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' + 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 @@ -14665,11 +15382,11 @@ sunos4*) version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes @@ -14677,8 +15394,8 @@ 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' + 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) @@ -14699,24 +15416,24 @@ ;; sysv4*MP*) - if test -d /usr/nec ;then + 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' + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf + 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then + 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' @@ -14734,7 +15451,7 @@ 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}' + 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 @@ -14742,8 +15459,8 @@ 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' + 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 ;; @@ -14753,20 +15470,32 @@ esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no +test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then +if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +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 "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" + +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 + + + @@ -14809,15 +15538,15 @@ hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || - test "X$hardcode_automatic_CXX" = "Xyes" ; then + test yes = "$hardcode_automatic_CXX"; then # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && + 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 "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then + ## 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 @@ -14832,12 +15561,12 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } -if test "$hardcode_action_CXX" = relink || - test "$inherit_rpath_CXX" = yes; then +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then # Fast installation is not supported enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi @@ -14860,7 +15589,7 @@ lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes +fi # test yes != "$_lt_caught_CXX_error" ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -15636,7 +16365,7 @@ # Initialize automake stuff -am__api_version='1.14' +am__api_version='1.15' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } @@ -15732,7 +16461,7 @@ $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -15975,7 +16704,7 @@ # Define the identity of the package. PACKAGE='libde265' - VERSION='1.0.2' + VERSION='1.0.3' cat >>confdefs.h <<_ACEOF @@ -16009,8 +16738,8 @@ # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> mkdir_p='$(MKDIR_P)' -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' @@ -16324,8 +17053,9 @@ fi fi -CFLAGS+=" -std=c99" -CXXFLAGS+=" -Werror=return-type -Werror=unused-result -Werror=reorder" + +CFLAGS="$CFLAGS -std=c99" +CXXFLAGS="$CXXFLAGS -Werror=return-type -Werror=unused-result -Werror=reorder" ax_cxx_compile_cxx11_required=true ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' @@ -16553,6 +17283,35 @@ done +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 + +OLD_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CXXFLAGS" + +for ac_header in cstdint +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "cstdint" "ac_cv_header_cstdint" "$ac_includes_default" +if test "x$ac_cv_header_cstdint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CSTDINT 1 +_ACEOF + +fi + +done + +CPPFLAGS="$OLD_CPPFLAGS" +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 + + # Checks for typedefs, structures, and compiler characteristics. { $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; } @@ -17596,12 +18355,175 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if eval "test x$need_strict_ansi = xyes"; then - CFLAGS+=" -D__STRICT_ANSI__" - CXXFLAGS+=" -D__STRICT_ANSI__" + CFLAGS="$CFLAGS -D__STRICT_ANSI__" + CXXFLAGS="$CXXFLAGS -D__STRICT_ANSI__" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $need_strict_ansi" >&5 $as_echo "$need_strict_ansi" >&6; } +# Check if "std::shared_ptr" is "std::tr1::shared_ptr" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::shared_ptr" >&5 +$as_echo_n "checking for std::shared_ptr... " >&6; } +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <memory> + +int +main () +{ + +class A {}; +std::shared_ptr<A> a; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + has_std_shared_ptr=yes +else + has_std_shared_ptr=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext; +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_std_shared_ptr" >&5 +$as_echo "$has_std_shared_ptr" >&6; } +if eval "test x$has_std_shared_ptr = xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::tr1::shared_ptr" >&5 +$as_echo_n "checking for std::tr1::shared_ptr... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <tr1/memory> + +int +main () +{ + + class A {}; + std::tr1::shared_ptr<A> a; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + has_std_tr1_shared_ptr=yes +else + has_std_tr1_shared_ptr=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_std_tr1_shared_ptr" >&5 +$as_echo "$has_std_tr1_shared_ptr" >&6; } + if eval "test x$has_std_tr1_shared_ptr = xyes"; then + +$as_echo "#define USE_STD_TR1_NAMESPACE 1" >>confdefs.h + + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Check if "std::move" is available +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::move" >&5 +$as_echo_n "checking for std::move... " >&6; } +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <utility> + +int +main () +{ + +class A {}; +A* a = new A(); +A* b = std::move(a); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + has_std_move=yes +else + has_std_move=no +fi +rm -f core conftest.err conftest.$ac_objext 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 + +if eval "test x$has_std_move = xno"; then + +$as_echo "#define NEED_STD_MOVE_FALLBACK 1" >>confdefs.h + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_std_move" >&5 +$as_echo "$has_std_move" >&6; } + +# Check if "nullptr" is available +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for nullptr" >&5 +$as_echo_n "checking for nullptr... " >&6; } +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ + +class A {}; +A* a = nullptr; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + has_nullptr=yes +else + has_nullptr=no +fi +rm -f core conftest.err conftest.$ac_objext 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 + +if eval "test x$has_nullptr = xno"; then + +$as_echo "#define NEED_NULLPTR_FALLBACK 1" >>confdefs.h + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_nullptr" >&5 +$as_echo "$has_nullptr" >&6; } + # --- machine dependent optimizations --- #AX_EXT @@ -17787,7 +18709,7 @@ fi if eval "test $enable_log_error = yes"; then - CXXFLAGS+=" -DDE265_LOG_ERROR" + CXXFLAGS="$CXXFLAGS -DDE265_LOG_ERROR" fi # Check whether --enable-log-info was given. @@ -17798,7 +18720,7 @@ fi if eval "test $enable_log_info = yes"; then - CXXFLAGS+=" -DDE265_LOG_INFO" + CXXFLAGS="$CXXFLAGS -DDE265_LOG_INFO" fi # Check whether --enable-log-debug was given. @@ -17809,7 +18731,7 @@ fi if eval "test $enable_log_debug = yes"; then - CXXFLAGS+=" -DDE265_LOG_DEBUG" + CXXFLAGS="$CXXFLAGS -DDE265_LOG_DEBUG" fi # Check whether --enable-log-trace was given. @@ -17820,7 +18742,7 @@ fi if eval "test $enable_log_trace = yes"; then - CXXFLAGS+=" -DDE265_LOG_TRACE" + CXXFLAGS="$CXXFLAGS -DDE265_LOG_TRACE" fi @@ -18595,6 +19517,8 @@ ac_config_files="$ac_config_files tools/Makefile" +ac_config_files="$ac_config_files acceleration-speed/Makefile" + ac_config_files="$ac_config_files libde265.pc" cat >confcache <<\_ACEOF @@ -19179,7 +20103,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libde265 $as_me 1.0.2, which was +This file was extended by libde265 $as_me 1.0.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19245,7 +20169,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libde265 config.status 1.0.2 +libde265 config.status 1.0.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -19379,6 +20303,7 @@ 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"`' @@ -19428,10 +20353,13 @@ 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"`' @@ -19496,7 +20424,8 @@ finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +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"`' @@ -19601,9 +20530,12 @@ 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 \ @@ -19669,7 +20601,7 @@ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -19696,7 +20628,8 @@ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ -sys_lib_dlsearch_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 \ @@ -19710,7 +20643,7 @@ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$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\\\\\\"" @@ -19719,19 +20652,16 @@ done ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' -# See if we are running on zsh, and set the options which allow our +# 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 +if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' @@ -19763,6 +20693,7 @@ "enc265/Makefile") CONFIG_FILES="$CONFIG_FILES enc265/Makefile" ;; "sherlock265/Makefile") CONFIG_FILES="$CONFIG_FILES sherlock265/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; + "acceleration-speed/Makefile") CONFIG_FILES="$CONFIG_FILES acceleration-speed/Makefile" ;; "libde265.pc") CONFIG_FILES="$CONFIG_FILES libde265.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; @@ -20361,55 +21292,53 @@ case $ac_file$ac_mode in "libtool":C) - # See if we are running on zsh, and set the options which allow our + # 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 + if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi - cfgfile="${ofile}T" + cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# 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 + +# 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. # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. +# 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 +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see <http://www.gnu.org/licenses/>. # The names of the tagged configurations supported by this script. -available_tags="CXX " +available_tags='CXX ' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG @@ -20429,6 +21358,9 @@ # 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 @@ -20546,18 +21478,27 @@ # 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 in which our libraries should be installed. +# 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 @@ -20648,8 +21589,11 @@ # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec +# 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 @@ -20742,13 +21686,13 @@ # 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 +# 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 +# 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 +# "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute @@ -20814,13 +21758,72 @@ _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 "X${COLLECT_NAMES+set}" != Xset; then +if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -20829,7 +21832,7 @@ esac -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if @@ -20839,165 +21842,6 @@ sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" @@ -21084,13 +21928,13 @@ # 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 +# 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 +# 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 +# "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX
View file
libde265-1.0.2.tar.gz/configure.ac -> libde265-1.0.3.tar.gz/configure.ac
Changed
@@ -2,11 +2,11 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([2.68]) -AC_INIT([libde265], [1.0.2], [farin@struktur.de]) +AC_INIT([libde265], [1.0.3], [farin@struktur.de]) AC_CONFIG_SRCDIR([libde265/de265.cc]) AC_CONFIG_HEADERS([config.h]) -NUMERIC_VERSION=0x01000200 # Numeric representation of the version (A.B.C[.D] = 0xAABBCCDD) +NUMERIC_VERSION=0x01000300 # Numeric representation of the version (A.B.C[.D] = 0xAABBCCDD) AC_SUBST(NUMERIC_VERSION) LIBDE265_CURRENT=0 @@ -36,8 +36,8 @@ # Initialize automake stuff AM_INIT_AUTOMAKE -CFLAGS+=" -std=c99" -CXXFLAGS+=" -Werror=return-type -Werror=unused-result -Werror=reorder" +CFLAGS="$CFLAGS -std=c99" +CXXFLAGS="$CXXFLAGS -Werror=return-type -Werror=unused-result -Werror=reorder" AX_CXX_COMPILE_STDCXX_11() dnl Use -Wall if we have gcc. @@ -58,6 +58,13 @@ # Checks for header files. AC_CHECK_HEADERS([stdint.h stdlib.h string.h malloc.h signal.h setjmp.h stddef.h sys/time.h]) +AC_LANG_PUSH(C++) +OLD_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CXXFLAGS" +AC_CHECK_HEADERS([cstdint]) +CPPFLAGS="$OLD_CPPFLAGS" +AC_LANG_POP(C++) + # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_TYPE_SIZE_T @@ -101,11 +108,66 @@ ],[],[need_strict_ansi=no],[need_strict_ansi=yes]); AC_LANG_POP(C++) if eval "test x$need_strict_ansi = xyes"; then - CFLAGS+=" -D__STRICT_ANSI__" - CXXFLAGS+=" -D__STRICT_ANSI__" + CFLAGS="$CFLAGS -D__STRICT_ANSI__" + CXXFLAGS="$CXXFLAGS -D__STRICT_ANSI__" fi AC_MSG_RESULT([$need_strict_ansi]) +# Check if "std::shared_ptr" is "std::tr1::shared_ptr" +AC_MSG_CHECKING([for std::shared_ptr]) +AC_LANG_PUSH(C++) +AC_TRY_COMPILE([ +#include <memory> +],[ +class A {}; +std::shared_ptr<A> a; +],[has_std_shared_ptr=yes],[has_std_shared_ptr=no]); +AC_MSG_RESULT([$has_std_shared_ptr]) +if eval "test x$has_std_shared_ptr = xno"; then + AC_MSG_CHECKING([for std::tr1::shared_ptr]) + AC_TRY_COMPILE([ + #include <tr1/memory> + ],[ + class A {}; + std::tr1::shared_ptr<A> a; + ],[has_std_tr1_shared_ptr=yes],[has_std_tr1_shared_ptr=no]); + AC_MSG_RESULT([$has_std_tr1_shared_ptr]) + if eval "test x$has_std_tr1_shared_ptr = xyes"; then + AC_DEFINE(USE_STD_TR1_NAMESPACE,1,[Define to 1 if the std::tr1 namespace should be included in the std namespace.]) + fi +fi +AC_LANG_POP(C++) + +# Check if "std::move" is available +AC_MSG_CHECKING([for std::move]) +AC_LANG_PUSH(C++) +AC_TRY_COMPILE([ +#include <utility> +],[ +class A {}; +A* a = new A(); +A* b = std::move(a); +],[has_std_move=yes],[has_std_move=no]); +AC_LANG_POP(C++) +if eval "test x$has_std_move = xno"; then + AC_DEFINE(NEED_STD_MOVE_FALLBACK,1,[Define to 1 if a fallback for "std::move" is required.]) +fi +AC_MSG_RESULT([$has_std_move]) + +# Check if "nullptr" is available +AC_MSG_CHECKING([for nullptr]) +AC_LANG_PUSH(C++) +AC_TRY_COMPILE([ +],[ +class A {}; +A* a = nullptr; +],[has_nullptr=yes],[has_nullptr=no]); +AC_LANG_POP(C++) +if eval "test x$has_nullptr = xno"; then + AC_DEFINE(NEED_NULLPTR_FALLBACK,1,[Define to 1 if a fallback for "nullptr" is required.]) +fi +AC_MSG_RESULT([$has_nullptr]) + # --- machine dependent optimizations --- #AX_EXT @@ -180,7 +242,7 @@ [enable_log_error=$enableval], [enable_log_error=yes]) if eval "test $enable_log_error = yes"; then - CXXFLAGS+=" -DDE265_LOG_ERROR" + CXXFLAGS="$CXXFLAGS -DDE265_LOG_ERROR" fi AC_ARG_ENABLE(log-info, @@ -189,7 +251,7 @@ [enable_log_info=$enableval], [enable_log_info=no]) if eval "test $enable_log_info = yes"; then - CXXFLAGS+=" -DDE265_LOG_INFO" + CXXFLAGS="$CXXFLAGS -DDE265_LOG_INFO" fi AC_ARG_ENABLE(log-debug, @@ -198,7 +260,7 @@ [enable_log_debug=$enableval], [enable_log_debug=no]) if eval "test $enable_log_debug = yes"; then - CXXFLAGS+=" -DDE265_LOG_DEBUG" + CXXFLAGS="$CXXFLAGS -DDE265_LOG_DEBUG" fi AC_ARG_ENABLE(log-trace, @@ -207,7 +269,7 @@ [enable_log_trace=$enableval], [enable_log_trace=no]) if eval "test $enable_log_trace = yes"; then - CXXFLAGS+=" -DDE265_LOG_TRACE" + CXXFLAGS="$CXXFLAGS -DDE265_LOG_TRACE" fi @@ -306,5 +368,6 @@ AC_CONFIG_FILES([enc265/Makefile]) AC_CONFIG_FILES([sherlock265/Makefile]) AC_CONFIG_FILES([tools/Makefile]) +AC_CONFIG_FILES([acceleration-speed/Makefile]) AC_CONFIG_FILES([libde265.pc]) AC_OUTPUT
View file
libde265-1.0.2.tar.gz/dec265/Makefile.in -> libde265-1.0.3.tar.gz/dec265/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -87,8 +97,6 @@ @HAVE_SDL_TRUE@am__append_5 = sdl.cc sdl.hh @MINGW_TRUE@am__append_6 = -static-libgcc -static-libstdc++ subdir = dec265 -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -99,6 +107,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -199,6 +208,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp COPYING DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -251,6 +261,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -333,6 +344,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -378,7 +390,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu dec265/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu dec265/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -738,6 +749,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
View file
libde265-1.0.2.tar.gz/dec265/dec265.cc -> libde265-1.0.3.tar.gz/dec265/dec265.cc
Changed
@@ -113,6 +113,7 @@ for (int c=0;c<3;c++) { int stride; const uint8_t* p = de265_get_image_plane(img, c, &stride); + int width = de265_get_image_width(img,c); if (de265_get_bits_per_pixel(img,c)<=8) { @@ -125,12 +126,15 @@ else { // --- save 16 bit YUV --- + int bpp = (de265_get_bits_per_pixel(img,c)+7)/8; + int pixelsPerLine = stride/bpp; + uint8_t* buf = new uint8_t[width*2]; uint16_t* p16 = (uint16_t*)p; for (int y=0;y<de265_get_image_height(img,c);y++) { for (int x=0;x<width;x++) { - uint16_t pixel_value = (p16+y*stride)[x]; + uint16_t pixel_value = (p16+y*pixelsPerLine)[x]; buf[2*x+0] = pixel_value & 0xFF; buf[2*x+1] = pixel_value >> 8; } @@ -217,14 +221,15 @@ } #endif -static uint8_t* convert_to_8bit(const uint8_t* data, int width, int height, int stride, int bit_depth) +static uint8_t* convert_to_8bit(const uint8_t* data, int width, int height, + int pixelsPerLine, int bit_depth) { const uint16_t* data16 = (const uint16_t*)data; - uint8_t* out = new uint8_t[stride*height]; + uint8_t* out = new uint8_t[pixelsPerLine*height]; for (int y=0;y<height;y++) { for (int x=0;x<width;x++) { - out[y*stride + x] = *(data16 + y*stride +x) >> (bit_depth-8); + out[y*pixelsPerLine + x] = *(data16 + y*pixelsPerLine +x) >> (bit_depth-8); } } @@ -264,25 +269,30 @@ const uint8_t* cb =de265_get_image_plane(img,1,&chroma_stride); const uint8_t* cr =de265_get_image_plane(img,2,NULL); + int bpp_y = (de265_get_bits_per_pixel(img,0)+7)/8; + int bpp_c = (de265_get_bits_per_pixel(img,1)+7)/8; + int ppl_y = stride/bpp_y; + int ppl_c = chroma_stride/bpp_c; + uint8_t* y16 = NULL; uint8_t* cb16 = NULL; uint8_t* cr16 = NULL; int bd; if ((bd=de265_get_bits_per_pixel(img, 0)) > 8) { - y16 = convert_to_8bit(y, width,height,stride,bd); y=y16; + y16 = convert_to_8bit(y, width,height,ppl_y,bd); y=y16; } if (chroma != de265_chroma_mono) { if ((bd=de265_get_bits_per_pixel(img, 1)) > 8) { - cb16 = convert_to_8bit(cb, chroma_width,chroma_height,chroma_stride,bd); cb=cb16; + cb16 = convert_to_8bit(cb, chroma_width,chroma_height,ppl_c,bd); cb=cb16; } if ((bd=de265_get_bits_per_pixel(img, 2)) > 8) { - cr16 = convert_to_8bit(cr, chroma_width,chroma_height,chroma_stride,bd); cr=cr16; + cr16 = convert_to_8bit(cr, chroma_width,chroma_height,ppl_c,bd); cr=cr16; } } - sdlWin.display(y,cb,cr, stride, chroma_stride); + sdlWin.display(y,cb,cr, ppl_y, ppl_c); delete[] y16; delete[] cb16;
View file
libde265-1.0.2.tar.gz/depcomp -> libde265-1.0.3.tar.gz/depcomp
Changed
@@ -3,7 +3,7 @@ scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
libde265-1.0.2.tar.gz/enc265/CMakeLists.txt -> libde265-1.0.3.tar.gz/enc265/CMakeLists.txt
Changed
@@ -1,5 +1,6 @@ set (enc265_sources enc265.cc + image-io-png.cc ) if(MSVC)
View file
libde265-1.0.2.tar.gz/enc265/Makefile.am -> libde265-1.0.3.tar.gz/enc265/Makefile.am
Changed
@@ -7,7 +7,7 @@ enc265_CXXFLAGS = enc265_LDFLAGS = enc265_LDADD = ../libde265/libde265.la -lstdc++ -enc265_SOURCES = enc265.cc +enc265_SOURCES = enc265.cc image-io-png.cc image-io-png.h if HAVE_VIDEOGFX enc265_CXXFLAGS += $(VIDEOGFX_CFLAGS)
View file
libde265-1.0.2.tar.gz/enc265/Makefile.in -> libde265-1.0.3.tar.gz/enc265/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ @HAVE_VIDEOGFX_TRUE@am__append_1 = $(VIDEOGFX_CFLAGS) @HAVE_VIDEOGFX_TRUE@am__append_2 = $(VIDEOGFX_LIBS) subdir = enc265 -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -95,13 +103,15 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) -am_enc265_OBJECTS = enc265-enc265.$(OBJEXT) +am_enc265_OBJECTS = enc265-enc265.$(OBJEXT) \ + enc265-image-io-png.$(OBJEXT) enc265_OBJECTS = $(am_enc265_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -144,6 +154,24 @@ am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = $(enc265_SOURCES) DIST_SOURCES = $(enc265_SOURCES) am__can_run_installinfo = \ @@ -170,6 +198,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -222,6 +251,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -304,6 +334,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -321,7 +352,7 @@ enc265_CXXFLAGS = $(am__append_1) enc265_LDFLAGS = $(am__append_2) enc265_LDADD = ../libde265/libde265.la -lstdc++ -enc265_SOURCES = enc265.cc +enc265_SOURCES = enc265.cc image-io-png.cc image-io-png.h EXTRA_DIST = \ CMakeLists.txt \ Makefile.vc7 @@ -342,7 +373,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu enc265/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu enc265/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -421,6 +451,7 @@ -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enc265-enc265.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enc265-image-io-png.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -457,6 +488,20 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(enc265_CXXFLAGS) $(CXXFLAGS) -c -o enc265-enc265.obj `if test -f 'enc265.cc'; then $(CYGPATH_W) 'enc265.cc'; else $(CYGPATH_W) '$(srcdir)/enc265.cc'; fi` +enc265-image-io-png.o: image-io-png.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(enc265_CXXFLAGS) $(CXXFLAGS) -MT enc265-image-io-png.o -MD -MP -MF $(DEPDIR)/enc265-image-io-png.Tpo -c -o enc265-image-io-png.o `test -f 'image-io-png.cc' || echo '$(srcdir)/'`image-io-png.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/enc265-image-io-png.Tpo $(DEPDIR)/enc265-image-io-png.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='image-io-png.cc' object='enc265-image-io-png.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(enc265_CXXFLAGS) $(CXXFLAGS) -c -o enc265-image-io-png.o `test -f 'image-io-png.cc' || echo '$(srcdir)/'`image-io-png.cc + +enc265-image-io-png.obj: image-io-png.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(enc265_CXXFLAGS) $(CXXFLAGS) -MT enc265-image-io-png.obj -MD -MP -MF $(DEPDIR)/enc265-image-io-png.Tpo -c -o enc265-image-io-png.obj `if test -f 'image-io-png.cc'; then $(CYGPATH_W) 'image-io-png.cc'; else $(CYGPATH_W) '$(srcdir)/image-io-png.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/enc265-image-io-png.Tpo $(DEPDIR)/enc265-image-io-png.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='image-io-png.cc' object='enc265-image-io-png.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(enc265_CXXFLAGS) $(CXXFLAGS) -c -o enc265-image-io-png.obj `if test -f 'image-io-png.cc'; then $(CYGPATH_W) 'image-io-png.cc'; else $(CYGPATH_W) '$(srcdir)/image-io-png.cc'; fi` + mostlyclean-libtool: -rm -f *.lo @@ -668,6 +713,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
View file
libde265-1.0.2.tar.gz/enc265/enc265.cc -> libde265-1.0.3.tar.gz/enc265/enc265.cc
Changed
@@ -18,12 +18,16 @@ * along with libde265. If not, see <http://www.gnu.org/licenses/>. */ -#include "libde265/en265.h" //coder-context.h" +#include "libde265/en265.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include "libde265/configparam.h" #include "libde265/image-io.h" -#include "libde265/encoder/analyze.h" +#include "libde265/encoder/encoder-core.h" #include "libde265/util.h" +#include "image-io-png.h" #include <getopt.h> @@ -85,6 +89,8 @@ option_int input_width; option_int input_height; + option_bool input_is_rgb; + // output option_string output_filename; @@ -123,6 +129,10 @@ input_height.set_ID("height"); input_height.set_short_option('h'); input_height.set_minimum(1); input_height.set_default(288); + + input_is_rgb.set_ID("rgb"); + input_is_rgb.set_default(false); + input_is_rgb.set_description("input is sequence of RGB PNG images"); } @@ -134,6 +144,11 @@ config.add_option(&max_number_of_frames); config.add_option(&input_width); config.add_option(&input_height); +#if HAVE_VIDEOGFX + if (videogfx::PNG_Supported()) { + config.add_option(&input_is_rgb); + } +#endif } @@ -175,6 +190,9 @@ extern int skipTBSplit, noskipTBSplit; extern int zeroBlockCorrelation[6][2][5]; +/*LIBDE265_API*/ ImageSink_YUV reconstruction_sink; + + int main(int argc, char** argv) { de265_init(); @@ -224,7 +242,7 @@ fprintf(stderr," enc265 v%s\n", de265_get_version()); fprintf(stderr,"--------------\n"); fprintf(stderr,"usage: enc265 [options]\n"); - fprintf(stderr,"The video file must be a raw YUV file\n"); + fprintf(stderr,"The video file must be a raw YUV file or a PNG sequence for RGB input\n"); fprintf(stderr,"\n"); fprintf(stderr,"options:\n"); fprintf(stderr," --help show help\n"); @@ -240,6 +258,7 @@ de265_set_verbosity(verbosity); + #if HAVE_VIDEOGFX //debug_set_image_output(debug_show_image_libvideogfx); #endif @@ -247,16 +266,31 @@ //test_parameters_API(ectx); - ImageSink_YUV reconstruction_sink; if (strlen(inout_params.reconstruction_yuv.get().c_str()) != 0) { reconstruction_sink.set_filename(inout_params.reconstruction_yuv.get().c_str()); //ectx.reconstruction_sink = &reconstruction_sink; } - ImageSource_YUV image_source; - image_source.set_input_file(inout_params.input_yuv.get().c_str(), - inout_params.input_width, - inout_params.input_height); + ImageSource* image_source; + ImageSource_YUV image_source_yuv; +#if HAVE_VIDEOGFX + ImageSource_PNG image_source_png; +#endif + + + if (inout_params.input_is_rgb) { +#if HAVE_VIDEOGFX + image_source_png.set_input_file(inout_params.input_yuv.get().c_str()); + image_source = &image_source_png; +#endif + } + else { + image_source_yuv.set_input_file(inout_params.input_yuv.get().c_str(), + inout_params.input_width, + inout_params.input_height); + image_source = &image_source_yuv; + } + PacketSink_File packet_sink; packet_sink.set_filename(inout_params.output_filename.get().c_str()); @@ -264,7 +298,7 @@ // --- run encoder --- - image_source.skip_frames( inout_params.first_frame ); + image_source->skip_frames( inout_params.first_frame ); en265_start_encoder(ectx, 0); @@ -278,7 +312,7 @@ { // push one image into the encoder - de265_image* input_image = image_source.get_image(); + de265_image* input_image = image_source->get_image(); if (input_image==NULL) { en265_push_eof(ectx); eof=true; @@ -308,7 +342,6 @@ } - // --- print statistics --- en265_print_logging((encoder_context*)ectx, "tb-split", NULL);
View file
libde265-1.0.3.tar.gz/enc265/image-io-png.cc
Added
@@ -0,0 +1,110 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "image-io-png.h" +#include <assert.h> + +#if HAVE_VIDEOGFX +#include <libvideogfx.hh> +using namespace videogfx; + + +ImageSource_PNG::ImageSource_PNG() +{ + mFilenameTemplate = NULL; + mNextImageNumber = 1; + + mReachedEndOfStream = false; + + mWidth=mHeight=0; +} + +ImageSource_PNG::~ImageSource_PNG() +{ +} + +bool ImageSource_PNG::set_input_file(const char* filename) +{ + mFilenameTemplate = filename; + return true; +} + +de265_image* ImageSource_PNG::get_image(bool block) +{ + if (mReachedEndOfStream) return NULL; + + + // --- construct image filename --- + + char filename[1000]; + sprintf(filename,mFilenameTemplate,mNextImageNumber); + mNextImageNumber++; + + + // --- load image --- + + Image<Pixel> input; + bool success = videogfx::ReadImage_PNG(input, filename); + if (!success) { + mReachedEndOfStream = true; + return NULL; + } + + + mWidth = input.AskWidth(); + mHeight= input.AskHeight(); + + de265_image* img = new de265_image; + img->alloc_image(mWidth,mHeight,de265_chroma_444, NULL, false, + NULL, NULL, 0, NULL, false); + assert(img); // TODO: error handling + + + uint8_t* p; + int stride; + + for (int c=0;c<3;c++) { + int h265channel; + switch (c) { + case 0: h265channel=2; break; // R + case 1: h265channel=0; break; // G + case 2: h265channel=1; break; // B + } + + p = img->get_image_plane(h265channel); + stride = img->get_image_stride(h265channel); + + for (int y=0;y<mHeight;y++) { + memcpy(p, input.AskFrame((BitmapChannel(c)))[y], mWidth); + p += stride; + } + } + + return img; +} + +void ImageSource_PNG::skip_frames(int n) +{ + mNextImageNumber += n; +} + +#endif
View file
libde265-1.0.3.tar.gz/enc265/image-io-png.h
Added
@@ -0,0 +1,56 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef IMAGE_IO_PNG_H +#define IMAGE_IO_PNG_H + +#include "libde265/image-io.h" +#include <deque> + + +#if HAVE_VIDEOGFX +class ImageSource_PNG : public ImageSource +{ + public: + LIBDE265_API ImageSource_PNG(); + virtual LIBDE265_API ~ImageSource_PNG(); + + bool LIBDE265_API set_input_file(const char* filename); + + //virtual ImageStatus get_status(); + virtual LIBDE265_API de265_image* get_image(bool block=true); + virtual LIBDE265_API void skip_frames(int n); + + virtual LIBDE265_API int get_width() const { return mWidth; } + virtual LIBDE265_API int get_height() const { return mHeight; } + + private: + const char* mFilenameTemplate; + int mNextImageNumber; + + bool mReachedEndOfStream; + + int mWidth,mHeight; +}; +#endif + +#endif
View file
libde265-1.0.2.tar.gz/install-sh -> libde265-1.0.3.tar.gz/install-sh
Changed
@@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-11-20.07; # UTC +scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -41,19 +41,15 @@ # This script is compatible with the BSD install script, but was written # from scratch. +tab=' ' nl=' ' -IFS=" "" $nl" +IFS=" $tab$nl" -# set DOITPROG to echo to test this script +# 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 +doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. @@ -68,17 +64,6 @@ 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. @@ -97,7 +82,7 @@ dst_arg= copy_on_change=false -no_target_directory= +is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE @@ -137,46 +122,57 @@ -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift;; + 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) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; - -T) no_target_directory=true;; + -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; - --) shift - break;; + --) shift + break;; - -*) echo "$0: invalid option: $1" >&2 - exit 1;; + -*) echo "$0: invalid option: $1" >&2 + exit 1;; *) break;; esac shift done +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. @@ -208,6 +204,15 @@ fi if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 @@ -223,16 +228,16 @@ *[0-7]) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw='% 200' + u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw=,u+rw + u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac @@ -269,41 +274,15 @@ # 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 + if test "$is_target_a_directory" = never; 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' - ` - + dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi @@ -314,74 +293,81 @@ 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-writable 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;; + # 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. + ;; + *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; esac if $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else @@ -391,53 +377,51 @@ # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - eval "$initialize_posix_glob" - oIFS=$IFS IFS=/ - $posix_glob set -f + set -f set fnord $dstdir shift - $posix_glob set +f + 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/ + 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 + # 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 @@ -472,15 +456,12 @@ # 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 && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - + set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then @@ -493,24 +474,24 @@ # 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" + # 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
View file
libde265-1.0.3.tar.gz/libde265-1.0.2
Added
+(directory)
View file
libde265-1.0.3.tar.gz/libde265-1.0.2/COPYING
Added
@@ -0,0 +1,853 @@ +The library `libde265` is distributed under the terms of the GNU Lesser +General Public License. The sample applications are distributed under +the terms of the GNU General Public License. + +License texts below and in the `COPYING` files of the corresponding +subfolders. + +---------------------------------------------------------------------- + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + +---------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. + +----------------------------------------------------------------------
View file
libde265-1.0.2.tar.gz/libde265/CMakeLists.txt -> libde265-1.0.3.tar.gz/libde265/CMakeLists.txt
Changed
@@ -65,20 +65,16 @@ add_definitions(-DLIBDE265_EXPORTS) -add_library(${LIBDE265_LIBRARY_NAME} SHARED ${libde265_sources}) - -target_link_libraries(${LIBDE265_LIBRARY_NAME} ${CMAKE_THREAD_LIBS_INIT}) - -if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - SET_TARGET_PROPERTIES(${LIBDE265_LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fPIC") -endif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - add_subdirectory (encoder) -target_link_libraries(${LIBDE265_LIBRARY_NAME} encoder) - if(SUPPORTS_SSE4_1) add_definitions(-DHAVE_SSE4_1) add_subdirectory (x86) - target_link_libraries(${LIBDE265_LIBRARY_NAME} x86) endif() + +add_library(${LIBDE265_LIBRARY_NAME} SHARED ${libde265_sources} ${ENCODER_OBJECTS} ${X86_OBJECTS}) +target_link_libraries(${LIBDE265_LIBRARY_NAME} ${CMAKE_THREAD_LIBS_INIT}) + +if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + SET_TARGET_PROPERTIES(${LIBDE265_LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fPIC") +endif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
View file
libde265-1.0.2.tar.gz/libde265/Makefile.am -> libde265-1.0.3.tar.gz/libde265/Makefile.am
Changed
@@ -19,7 +19,6 @@ endif libde265_la_LDFLAGS = -version-info $(LIBDE265_CURRENT):$(LIBDE265_REVISION):$(LIBDE265_AGE) -libde265_la_LIBADD = -lstdc++ libde265_la_SOURCES = \ acceleration.h \ @@ -92,7 +91,7 @@ vui.h SUBDIRS = encoder -libde265_la_LIBADD += encoder/libde265_encoder.la +libde265_la_LIBADD = encoder/libde265_encoder.la if ENABLE_SSE_OPT SUBDIRS += x86
View file
libde265-1.0.2.tar.gz/libde265/Makefile.in -> libde265-1.0.3.tar.gz/libde265/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -89,9 +99,6 @@ @MINGW_TRUE@am__append_7 = ../extra/win32cond.c ../extra/win32cond.h @MINGW_TRUE@am__append_8 = -no-undefined -static-libgcc -static-libstdc++ subdir = libde265 -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(srcdir)/de265-version.h.in $(top_srcdir)/depcomp \ - $(libde265_la_HEADERS) COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -102,6 +109,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(libde265_la_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = de265-version.h @@ -273,6 +282,8 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = encoder x86 arm +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/de265-version.h.in \ + $(top_srcdir)/depcomp COPYING DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -350,6 +361,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -432,6 +444,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -457,8 +470,6 @@ libde265_la_LDFLAGS = -version-info \ $(LIBDE265_CURRENT):$(LIBDE265_REVISION):$(LIBDE265_AGE) \ $(am__append_8) -libde265_la_LIBADD = -lstdc++ encoder/libde265_encoder.la \ - $(am__append_4) $(am__append_6) libde265_la_SOURCES = acceleration.h alloc_pool.h alloc_pool.cc \ bitstream.cc bitstream.h cabac.cc cabac.h configparam.cc \ configparam.h contextmodel.cc contextmodel.h de265.cc \ @@ -473,6 +484,8 @@ transform.h util.cc util.h visualize.cc visualize.h vps.cc \ vps.h vui.cc vui.h $(am__append_7) SUBDIRS = encoder $(am__append_3) $(am__append_5) +libde265_la_LIBADD = encoder/libde265_encoder.la $(am__append_4) \ + $(am__append_6) EXTRA_DIST = Makefile.vc7 \ CMakeLists.txt \ ../extra/stdbool.h \ @@ -498,7 +511,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libde265/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libde265/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -1214,6 +1226,8 @@ uninstall-am uninstall-libLTLIBRARIES \ uninstall-libde265_laHEADERS +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
View file
libde265-1.0.2.tar.gz/libde265/Makefile.vc7 -> libde265-1.0.3.tar.gz/libde265/Makefile.vc7
Changed
@@ -4,7 +4,7 @@ CFLAGS=/I..\extra /I.. /I. CC=cl /nologo LINK=link /nologo /subsystem:console -DEFINES=/DWIN32 /D_WIN32_WINNT=0x0400 /DNDEBUG /DLIBDE265_EXPORTS /D_CRT_SECURE_NO_WARNINGS /DHAVE_SSE4_1 /DNOMINMAX +DEFINES=/DWIN32 /D_WIN32_WINNT=0x0400 /DNDEBUG /DLIBDE265_EXPORTS /D_CRT_SECURE_NO_WARNINGS /DHAVE_SSE4_1 /DNOMINMAX /DHAVE_STDINT_H CFLAGS=$(CFLAGS) /MT /Ox /Ob2 /Oi /TP /W4 /GL /EHsc @@ -64,10 +64,11 @@ visualize.obj \ vps.obj \ vui.obj \ - encoder\analyze.obj \ - encoder\encode.obj \ + encoder\encoder-core.obj \ + encoder\encoder-types.obj \ encoder\encoder-context.obj \ encoder\encoder-params.obj \ + encoder\encoder-syntax.obj \ encoder\encpicbuf.obj \ encoder\sop.obj \ encoder\algo\algo.obj \ @@ -81,7 +82,9 @@ encoder\algo\ctb-qscale.obj \ encoder\algo\pb-mv.obj \ encoder\algo\tb-intrapredmode.obj \ + encoder\algo\tb-rateestim.obj \ encoder\algo\tb-split.obj \ + encoder\algo\tb-transform.obj \ x86\sse.obj \ x86\sse-dct.obj \ x86\sse-motion.obj \
View file
libde265-1.0.2.tar.gz/libde265/alloc_pool.h -> libde265-1.0.3.tar.gz/libde265/alloc_pool.h
Changed
@@ -23,11 +23,16 @@ #ifndef ALLOC_POOL_H #define ALLOC_POOL_H +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <vector> #include <cstddef> #ifdef HAVE_STDINT_H #include <stdint.h> -#else +#endif +#ifdef HAVE_CSTDINT #include <cstdint> #endif
View file
libde265-1.0.2.tar.gz/libde265/arm/Makefile.in -> libde265-1.0.3.tar.gz/libde265/arm/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -84,8 +94,6 @@ @ENABLE_NEON_OPT_TRUE@am__append_1 = libde265_arm_neon.la @ENABLE_NEON_OPT_TRUE@am__append_2 = libde265_arm_neon.la subdir = libde265/arm -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -96,6 +104,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -211,6 +220,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -263,6 +273,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -345,6 +356,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -390,7 +402,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libde265/arm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libde265/arm/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -724,6 +735,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + @HAVE_VISIBILITY_TRUE@ libde265_arm_la_CXXFLAGS += -DHAVE_VISIBILITY
View file
libde265-1.0.2.tar.gz/libde265/configparam.cc -> libde265-1.0.3.tar.gz/libde265/configparam.cc
Changed
@@ -241,6 +241,8 @@ argv[i]+2)==0) { option_found=true; + printf("FOUND %s\n",argv[i]); + bool success = mOptions[o]->processCmdLineArguments(argv,argc, i+1); if (!success) { if (first_idx_ptr) { *first_idx_ptr = i; } @@ -346,6 +348,10 @@ sstr << ", default=" << o->get_default_string(); } + if (o->has_description()) { + sstr << " : " << o->get_description(); + } + sstr << "\n"; std::cerr << sstr.str(); @@ -399,7 +405,7 @@ choice_option_base* o = dynamic_cast<choice_option_base*>(option); assert(o); - + return o->get_choice_names(); }
View file
libde265-1.0.2.tar.gz/libde265/configparam.h -> libde265-1.0.3.tar.gz/libde265/configparam.h
Changed
@@ -63,6 +63,7 @@ void set_description(std::string descr) { mDescription = descr; } std::string get_description() const { return mDescription; } + bool has_description() const { return !mDescription.empty(); } // --- value --- @@ -130,8 +131,8 @@ void set_default(bool v) { default_value=v; default_set=true; } virtual std::string get_default_string() const { return default_value ? "true":"false"; } - virtual std::string getTypeDescr() const { return "boolean"; } - virtual LIBDE265_API bool processCmdLineArguments(char** argv, int* argc, int idx) { value=true; return true; } + virtual std::string getTypeDescr() const { return "(boolean)"; } + virtual LIBDE265_API bool processCmdLineArguments(char** argv, int* argc, int idx) { set(true); return true; } bool set(bool v) { value_set=true; value=v; return true; }
View file
libde265-1.0.2.tar.gz/libde265/contextmodel.cc -> libde265-1.0.3.tar.gz/libde265/contextmodel.cc
Changed
@@ -78,7 +78,7 @@ // if (*refcnt == 1) { return; } <- keep memory for later, but does not work when we believe that we freed the memory and nulled all references (*refcnt)--; - if (refcnt==0) { + if (*refcnt==0) { delete[] model; delete refcnt; }
View file
libde265-1.0.2.tar.gz/libde265/de265-version.h -> libde265-1.0.3.tar.gz/libde265/de265-version.h
Changed
@@ -28,9 +28,9 @@ #define LIBDE265_VERSION_H /* Numeric representation of the version */ -#define LIBDE265_NUMERIC_VERSION 0x01000200 +#define LIBDE265_NUMERIC_VERSION 0x01000300 /* Version string */ -#define LIBDE265_VERSION "1.0.2" +#define LIBDE265_VERSION "1.0.3" #endif
View file
libde265-1.0.2.tar.gz/libde265/de265.cc -> libde265-1.0.3.tar.gz/libde265/de265.cc
Changed
@@ -168,12 +168,12 @@ -ALIGNED_8(static de265_sync_int de265_init_count) = 0; +static std::atomic<int> de265_init_count; LIBDE265_API de265_error de265_init() { - int cnt = de265_sync_add_and_fetch(&de265_init_count,1); - if (cnt>1) { + int cnt = std::atomic_fetch_add(&de265_init_count,1); + if (cnt>0) { // we are not the first -> already initialized return DE265_OK; @@ -185,7 +185,7 @@ init_scan_orders(); if (!alloc_and_init_significant_coeff_ctxIdx_lookupTable()) { - de265_sync_sub_and_fetch(&de265_init_count,1); + std::atomic_fetch_sub(&de265_init_count,1); return DE265_ERROR_LIBRARY_INITIALIZATION_FAILED; } @@ -194,13 +194,13 @@ LIBDE265_API de265_error de265_free() { - int cnt = de265_sync_sub_and_fetch(&de265_init_count,1); - if (cnt<0) { - de265_sync_add_and_fetch(&de265_init_count,1); + int cnt = std::atomic_fetch_sub(&de265_init_count,1); + if (cnt<=0) { + std::atomic_fetch_add(&de265_init_count,1); return DE265_ERROR_LIBRARY_NOT_INITIALIZED; } - if (cnt==0) { + if (cnt==1) { free_significant_coeff_ctxIdx_lookupTable(); } @@ -620,10 +620,10 @@ { switch (channel) { case 0: - return img->sps.BitDepth_Y; + return img->get_sps().BitDepth_Y; case 1: case 2: - return img->sps.BitDepth_C; + return img->get_sps().BitDepth_C; default: return 0; }
View file
libde265-1.0.2.tar.gz/libde265/deblock.cc -> libde265-1.0.3.tar.gz/libde265/deblock.cc
Changed
@@ -129,23 +129,24 @@ bool derive_edgeFlags_CTBRow(de265_image* img, int ctby) { - const int minCbSize = img->sps.MinCbSizeY; - bool deblocking_enabled=false; // whether deblocking is enabled in some part of the image + const seq_parameter_set& sps = img->get_sps(); + const pic_parameter_set& pps = img->get_pps(); - int ctb_mask = (1<<img->sps.Log2CtbSizeY)-1; - int picWidthInCtbs = img->sps.PicWidthInCtbsY; - int ctbshift = img->sps.Log2CtbSizeY; + const int minCbSize = sps.MinCbSizeY; + bool deblocking_enabled=false; // whether deblocking is enabled in some part of the image - const pic_parameter_set* pps = &img->pps; + int ctb_mask = (1<<sps.Log2CtbSizeY)-1; + int picWidthInCtbs = sps.PicWidthInCtbsY; + int ctbshift = sps.Log2CtbSizeY; - int cb_y_start = ( ctby << img->sps.Log2CtbSizeY) >> img->sps.Log2MinCbSizeY; - int cb_y_end = ((ctby+1) << img->sps.Log2CtbSizeY) >> img->sps.Log2MinCbSizeY; + int cb_y_start = ( ctby << sps.Log2CtbSizeY) >> sps.Log2MinCbSizeY; + int cb_y_end = ((ctby+1) << sps.Log2CtbSizeY) >> sps.Log2MinCbSizeY; - cb_y_end = std::min(cb_y_end, img->sps.PicHeightInMinCbsY); + cb_y_end = std::min(cb_y_end, sps.PicHeightInMinCbsY); for (int cb_y=cb_y_start;cb_y<cb_y_end;cb_y++) - for (int cb_x=0;cb_x<img->sps.PicWidthInMinCbsY;cb_x++) + for (int cb_x=0;cb_x<img->get_sps().PicWidthInMinCbsY;cb_x++) { int log2CbSize = img->get_log2CbSize_cbUnits(cb_x,cb_y); if (log2CbSize==0) { @@ -185,9 +186,9 @@ { filterLeftCbEdge = 0; } - else if (pps->loop_filter_across_tiles_enabled_flag == 0 && - pps->TileIdRS[ x0ctb +y0ctb*picWidthInCtbs] != - pps->TileIdRS[((x0-1)>>ctbshift)+y0ctb*picWidthInCtbs]) { + else if (pps.loop_filter_across_tiles_enabled_flag == 0 && + pps.TileIdRS[ x0ctb +y0ctb*picWidthInCtbs] != + pps.TileIdRS[((x0-1)>>ctbshift)+y0ctb*picWidthInCtbs]) { filterLeftCbEdge = 0; } } @@ -199,9 +200,9 @@ { filterTopCbEdge = 0; } - else if (pps->loop_filter_across_tiles_enabled_flag == 0 && - pps->TileIdRS[x0ctb+ y0ctb *picWidthInCtbs] != - pps->TileIdRS[x0ctb+((y0-1)>>ctbshift)*picWidthInCtbs]) { + else if (pps.loop_filter_across_tiles_enabled_flag == 0 && + pps.TileIdRS[x0ctb+ y0ctb *picWidthInCtbs] != + pps.TileIdRS[x0ctb+((y0-1)>>ctbshift)*picWidthInCtbs]) { filterTopCbEdge = 0; } } @@ -228,7 +229,7 @@ { bool deblocking_enabled=false; - for (int y=0;y<img->sps.PicHeightInCtbsY;y++) { + for (int y=0;y<img->get_sps().PicHeightInCtbsY;y++) { deblocking_enabled |= derive_edgeFlags_CTBRow(img,y); } @@ -252,8 +253,8 @@ xEnd = libde265_min(xEnd,img->get_deblk_width()); yEnd = libde265_min(yEnd,img->get_deblk_height()); - int TUShift = img->sps.Log2MinTrafoSize; - int TUStride= img->sps.PicWidthInTbsY; + int TUShift = img->get_sps().Log2MinTrafoSize; + int TUStride= img->get_sps().PicWidthInTbsY; for (int y=yStart;y<yEnd;y+=yIncr) for (int x=xStart;x<xEnd;x+=xIncr) { @@ -288,16 +289,16 @@ bS = 0; - const MotionVectorSpec* mviP = img->get_mv_info(xDiOpp,yDiOpp); - const MotionVectorSpec* mviQ = img->get_mv_info(xDi ,yDi); + const PBMotion& mviP = img->get_mv_info(xDiOpp,yDiOpp); + const PBMotion& mviQ = img->get_mv_info(xDi ,yDi); slice_segment_header* shdrP = img->get_SliceHeader(xDiOpp,yDiOpp); slice_segment_header* shdrQ = img->get_SliceHeader(xDi ,yDi); - int refPicP0 = mviP->predFlag[0] ? shdrP->RefPicList[0][ mviP->refIdx[0] ] : -1; - int refPicP1 = mviP->predFlag[1] ? shdrP->RefPicList[1][ mviP->refIdx[1] ] : -1; - int refPicQ0 = mviQ->predFlag[0] ? shdrQ->RefPicList[0][ mviQ->refIdx[0] ] : -1; - int refPicQ1 = mviQ->predFlag[1] ? shdrQ->RefPicList[1][ mviQ->refIdx[1] ] : -1; + int refPicP0 = mviP.predFlag[0] ? shdrP->RefPicList[0][ mviP.refIdx[0] ] : -1; + int refPicP1 = mviP.predFlag[1] ? shdrP->RefPicList[1][ mviP.refIdx[1] ] : -1; + int refPicQ0 = mviQ.predFlag[0] ? shdrQ->RefPicList[0][ mviQ.refIdx[0] ] : -1; + int refPicQ1 = mviQ.predFlag[1] ? shdrQ->RefPicList[1][ mviQ.refIdx[1] ] : -1; bool samePics = ((refPicP0==refPicQ0 && refPicP1==refPicQ1) || (refPicP0==refPicQ1 && refPicP1==refPicQ0)); @@ -306,13 +307,13 @@ bS = 1; } else { - MotionVector mvP0 = mviP->mv[0]; if (!mviP->predFlag[0]) { mvP0.x=mvP0.y=0; } - MotionVector mvP1 = mviP->mv[1]; if (!mviP->predFlag[1]) { mvP1.x=mvP1.y=0; } - MotionVector mvQ0 = mviQ->mv[0]; if (!mviQ->predFlag[0]) { mvQ0.x=mvQ0.y=0; } - MotionVector mvQ1 = mviQ->mv[1]; if (!mviQ->predFlag[1]) { mvQ1.x=mvQ1.y=0; } + MotionVector mvP0 = mviP.mv[0]; if (!mviP.predFlag[0]) { mvP0.x=mvP0.y=0; } + MotionVector mvP1 = mviP.mv[1]; if (!mviP.predFlag[1]) { mvP1.x=mvP1.y=0; } + MotionVector mvQ0 = mviQ.mv[0]; if (!mviQ.predFlag[0]) { mvQ0.x=mvQ0.y=0; } + MotionVector mvQ1 = mviQ.mv[1]; if (!mviQ.predFlag[1]) { mvQ1.x=mvQ1.y=0; } - int numMV_P = mviP->predFlag[0] + mviP->predFlag[1]; - int numMV_Q = mviQ->predFlag[0] + mviQ->predFlag[1]; + int numMV_P = mviP.predFlag[0] + mviP.predFlag[1]; + int numMV_Q = mviQ.predFlag[0] + mviQ.predFlag[1]; if (numMV_P!=numMV_Q) { img->decctx->add_warning(DE265_WARNING_NUMMVP_NOT_EQUAL_TO_NUMMVQ, false); @@ -376,7 +377,7 @@ void derive_boundaryStrength_CTB(de265_image* img, bool vertical, int xCtb,int yCtb) { - int ctbSize = img->sps.CtbSizeY; + int ctbSize = img->get_sps().CtbSizeY; int deblkSize = ctbSize/4; derive_boundaryStrength(img,vertical, @@ -406,12 +407,14 @@ { //printf("luma %d-%d %d-%d\n",xStart,xEnd,yStart,yEnd); + const seq_parameter_set& sps = img->get_sps(); + int xIncr = vertical ? 2 : 1; int yIncr = vertical ? 1 : 2; const int stride = img->get_image_stride(0); - int bitDepth_Y = img->sps.BitDepth_Y; + int bitDepth_Y = sps.BitDepth_Y; xEnd = libde265_min(xEnd,img->get_deblk_width()); yEnd = libde265_min(yEnd,img->get_deblk_height()); @@ -572,17 +575,17 @@ bool filterQ = true; if (vertical) { - if (img->sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(xDi-1,yDi)) filterP=false; + if (sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(xDi-1,yDi)) filterP=false; if (img->get_cu_transquant_bypass(xDi-1,yDi)) filterP=false; - if (img->sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(xDi,yDi)) filterQ=false; + if (sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(xDi,yDi)) filterQ=false; if (img->get_cu_transquant_bypass(xDi,yDi)) filterQ=false; } else { - if (img->sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(xDi,yDi-1)) filterP=false; + if (sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(xDi,yDi-1)) filterP=false; if (img->get_cu_transquant_bypass(xDi,yDi-1)) filterP=false; - if (img->sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(xDi,yDi)) filterQ=false; + if (sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(xDi,yDi)) filterQ=false; if (img->get_cu_transquant_bypass(xDi,yDi)) filterQ=false; } @@ -709,7 +712,7 @@ void edge_filtering_luma_CTB(de265_image* img, bool vertical, int xCtb,int yCtb) { - int ctbSize = img->sps.CtbSizeY; + int ctbSize = img->get_sps().CtbSizeY; int deblkSize = ctbSize/4; edge_filtering_luma(img,vertical, @@ -730,8 +733,10 @@ { //printf("chroma %d-%d %d-%d\n",xStart,xEnd,yStart,yEnd); - const int SubWidthC = img->sps.SubWidthC; - const int SubHeightC = img->sps.SubHeightC; + const seq_parameter_set& sps = img->get_sps(); + + const int SubWidthC = sps.SubWidthC; + const int SubHeightC = sps.SubHeightC; int xIncr = vertical ? 2 : 1; int yIncr = vertical ? 1 : 2; @@ -744,7 +749,7 @@ xEnd = libde265_min(xEnd,img->get_deblk_width()); yEnd = libde265_min(yEnd,img->get_deblk_height()); - int bitDepth_C = img->sps.BitDepth_C; + int bitDepth_C = sps.BitDepth_C; for (int y=yStart;y<yEnd;y+=yIncr) for (int x=xStart;x<xEnd;x+=xIncr) { @@ -760,8 +765,8 @@ for (int cplane=0;cplane<2;cplane++) { int cQpPicOffset = (cplane==0 ? - img->pps.pic_cb_qp_offset : - img->pps.pic_cr_qp_offset); + img->get_pps().pic_cb_qp_offset : + img->get_pps().pic_cr_qp_offset); pixel_t* ptr = img->get_image_plane_at_pos_NEW<pixel_t>(cplane+1, xDi,yDi); @@ -807,7 +812,7 @@ img->get_QPY(SubWidthC*xDi,SubHeightC*yDi-1)); int qP_i = ((QP_Q+QP_P+1)>>1) + cQpPicOffset; int QP_C; - if (img->sps.ChromaArrayType == CHROMA_420) { + if (sps.ChromaArrayType == CHROMA_420) { QP_C = table8_22(qP_i); } else { QP_C = libde265_min(qP_i, 51); @@ -824,17 +829,17 @@ int Q = Clip3(0,53, QP_C + 2*(bS-1) + tc_offset); int tcPrime = table_8_23_tc[Q]; - int tc = tcPrime * (1<<(img->sps.BitDepth_C - 8)); + int tc = tcPrime * (1<<(sps.BitDepth_C - 8)); logtrace(LogDeblock,"tc_offset=%d Q=%d tc'=%d tc=%d\n",tc_offset,Q,tcPrime,tc); if (vertical) { bool filterP = true; - if (img->sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(SubWidthC*xDi-1,SubHeightC*yDi)) filterP=false; + if (sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(SubWidthC*xDi-1,SubHeightC*yDi)) filterP=false; if (img->get_cu_transquant_bypass(SubWidthC*xDi-1,SubHeightC*yDi)) filterP=false; bool filterQ = true; - if (img->sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(SubWidthC*xDi,SubHeightC*yDi)) filterQ=false; + if (sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(SubWidthC*xDi,SubHeightC*yDi)) filterQ=false; if (img->get_cu_transquant_bypass(SubWidthC*xDi,SubHeightC*yDi)) filterQ=false; @@ -847,11 +852,11 @@ } else { bool filterP = true; - if (img->sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(SubWidthC*xDi,SubHeightC*yDi-1)) filterP=false; + if (sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(SubWidthC*xDi,SubHeightC*yDi-1)) filterP=false; if (img->get_cu_transquant_bypass(SubWidthC*xDi,SubHeightC*yDi-1)) filterP=false; bool filterQ = true; - if (img->sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(SubWidthC*xDi,SubHeightC*yDi)) filterQ=false; + if (sps.pcm_loop_filter_disable_flag && img->get_pcm_flag(SubWidthC*xDi,SubHeightC*yDi)) filterQ=false; if (img->get_cu_transquant_bypass(SubWidthC*xDi,SubHeightC*yDi)) filterQ=false; for (int k=0;k<4;k++) { @@ -880,7 +885,7 @@ void edge_filtering_chroma_CTB(de265_image* img, bool vertical, int xCtb,int yCtb) { - int ctbSize = img->sps.CtbSizeY; + int ctbSize = img->get_sps().CtbSizeY; int deblkSize = ctbSize/4; edge_filtering_chroma(img,vertical, @@ -914,7 +919,7 @@ int xStart=0; int xEnd = img->get_deblk_width(); - int ctbSize = img->sps.CtbSizeY; + int ctbSize = img->get_sps().CtbSizeY; int deblkSize = ctbSize/4; int first = ctb_y * deblkSize; @@ -926,12 +931,12 @@ int finalProgress = CTB_PROGRESS_DEBLK_V; if (!vertical) finalProgress = CTB_PROGRESS_DEBLK_H; - int rightCtb = img->sps.PicWidthInCtbsY-1; + int rightCtb = img->get_sps().PicWidthInCtbsY-1; if (vertical) { // pass 1: vertical - int CtbRow = std::min(ctb_y+1 , img->sps.PicHeightInCtbsY-1); + int CtbRow = std::min(ctb_y+1 , img->get_sps().PicHeightInCtbsY-1); img->wait_for_progress(this, rightCtb,CtbRow, CTB_PROGRESS_PREFILTER); } else { @@ -943,7 +948,7 @@ img->wait_for_progress(this, rightCtb,ctb_y, CTB_PROGRESS_DEBLK_V); - if (ctb_y+1<img->sps.PicHeightInCtbsY) { + if (ctb_y+1<img->get_sps().PicHeightInCtbsY) { img->wait_for_progress(this, rightCtb,ctb_y+1, CTB_PROGRESS_DEBLK_V); } } @@ -969,13 +974,13 @@ edge_filtering_luma(img, vertical, first,last, xStart,xEnd); - if (img->sps.ChromaArrayType != CHROMA_MONO) { + if (img->get_sps().ChromaArrayType != CHROMA_MONO) { edge_filtering_chroma(img, vertical, first,last, xStart,xEnd); } } for (int x=0;x<=rightCtb;x++) { - const int CtbWidth = img->sps.PicWidthInCtbsY; + const int CtbWidth = img->get_sps().PicWidthInCtbsY; img->ctb_progress[x+ctb_y*CtbWidth].set_progress(finalProgress); } @@ -989,14 +994,14 @@ de265_image* img = imgunit->img; decoder_context* ctx = img->decctx; - int nRows = img->sps.PicHeightInCtbsY; + int nRows = img->get_sps().PicHeightInCtbsY; int n=0; img->thread_start(nRows*2); for (int pass=0;pass<2;pass++) { - for (int y=0;y<img->sps.PicHeightInCtbsY;y++) + for (int y=0;y<img->get_sps().PicHeightInCtbsY;y++) { thread_task_deblock_CTBRow* task = new thread_task_deblock_CTBRow; @@ -1026,7 +1031,7 @@ derive_boundaryStrength(img, true ,0,img->get_deblk_height(),0,img->get_deblk_width()); edge_filtering_luma (img, true ,0,img->get_deblk_height(),0,img->get_deblk_width()); - if (img->sps.ChromaArrayType != CHROMA_MONO) { + if (img->get_sps().ChromaArrayType != CHROMA_MONO) { edge_filtering_chroma (img, true ,0,img->get_deblk_height(),0,img->get_deblk_width()); } #if 0 @@ -1041,7 +1046,7 @@ derive_boundaryStrength(img, false ,0,img->get_deblk_height(),0,img->get_deblk_width()); edge_filtering_luma (img, false ,0,img->get_deblk_height(),0,img->get_deblk_width()); - if (img->sps.ChromaArrayType != CHROMA_MONO) { + if (img->get_sps().ChromaArrayType != CHROMA_MONO) { edge_filtering_chroma (img, false ,0,img->get_deblk_height(),0,img->get_deblk_width()); }
View file
libde265-1.0.2.tar.gz/libde265/decctx.cc -> libde265-1.0.3.tar.gz/libde265/decctx.cc
Changed
@@ -124,9 +124,12 @@ //memset(this,0,sizeof(thread_context)); - // some compilers/linkers don't align struct members correctly, - // adjust if necessary - int offset = (uintptr_t)_coeffBuf & 0x0f; + // There is a interesting issue here. When aligning _coeffBuf to 16 bytes offset with + // __attribute__((align(16))), the following statement is optimized away since the + // compiler assumes that the pointer would be 16-byte aligned. However, this is not the + // case when the structure has been dynamically allocated. In this case, the base can + // also be at 8 byte offsets (at least with MingW,32 bit). + int offset = ((uintptr_t)_coeffBuf) & 0xf; if (offset == 0) { coeffBuf = _coeffBuf; // correctly aligned already @@ -463,24 +466,24 @@ // find the previous CTB in TS order - const pic_parameter_set* pps = &tctx->img->pps; - const seq_parameter_set* sps = &tctx->img->sps; + const pic_parameter_set& pps = tctx->img->get_pps(); + const seq_parameter_set& sps = tctx->img->get_sps(); if (tctx->shdr->slice_segment_address > 0) { - int prevCtb = pps->CtbAddrTStoRS[ pps->CtbAddrRStoTS[tctx->shdr->slice_segment_address] -1 ]; + int prevCtb = pps.CtbAddrTStoRS[ pps.CtbAddrRStoTS[tctx->shdr->slice_segment_address] -1 ]; - int ctbX = prevCtb % sps->PicWidthInCtbsY; - int ctbY = prevCtb / sps->PicWidthInCtbsY; + int ctbX = prevCtb % sps.PicWidthInCtbsY; + int ctbY = prevCtb / sps.PicWidthInCtbsY; // take the pixel at the bottom right corner (but consider that the image size might be smaller) - int x = ((ctbX+1) << sps->Log2CtbSizeY)-1; - int y = ((ctbY+1) << sps->Log2CtbSizeY)-1; + int x = ((ctbX+1) << sps.Log2CtbSizeY)-1; + int y = ((ctbY+1) << sps.Log2CtbSizeY)-1; - x = std::min(x,sps->pic_width_in_luma_samples-1); - y = std::min(y,sps->pic_height_in_luma_samples-1); + x = std::min(x,sps.pic_width_in_luma_samples-1); + y = std::min(y,sps.pic_height_in_luma_samples-1); //printf("READ QPY: %d %d -> %d (should %d)\n",x,y,imgunit->img->get_QPY(x,y), tc.currentQPY); @@ -527,17 +530,17 @@ { logdebug(LogHeaders,"---> read VPS\n"); - video_parameter_set vps; - de265_error err = vps.read(this,&reader); + std::shared_ptr<video_parameter_set> new_vps = std::make_shared<video_parameter_set>(); + de265_error err = new_vps->read(this,&reader); if (err != DE265_OK) { return err; } if (param_vps_headers_fd>=0) { - vps.dump(param_vps_headers_fd); + new_vps->dump(param_vps_headers_fd); } - process_vps(&vps); + vps[ new_vps->video_parameter_set_id ] = new_vps; return DE265_OK; } @@ -546,18 +549,18 @@ { logdebug(LogHeaders,"----> read SPS\n"); - seq_parameter_set sps; + std::shared_ptr<seq_parameter_set> new_sps = std::make_shared<seq_parameter_set>(); de265_error err; - if ((err=sps.read(this, &reader)) != DE265_OK) { + if ((err=new_sps->read(this, &reader)) != DE265_OK) { return err; } if (param_sps_headers_fd>=0) { - sps.dump(param_sps_headers_fd); + new_sps->dump(param_sps_headers_fd); } - process_sps(&sps); + sps[ new_sps->seq_parameter_set_id ] = new_sps; return DE265_OK; } @@ -566,16 +569,16 @@ { logdebug(LogHeaders,"----> read PPS\n"); - pic_parameter_set pps; + std::shared_ptr<pic_parameter_set> new_pps = std::make_shared<pic_parameter_set>(); - bool success = pps.read(&reader,this); + bool success = new_pps->read(&reader,this); if (param_pps_headers_fd>=0) { - pps.dump(param_pps_headers_fd); + new_pps->dump(param_pps_headers_fd); } if (success) { - process_pps(&pps); + pps[ (int)new_pps->pic_parameter_set_id ] = new_pps; } return success ? DE265_OK : DE265_WARNING_PPS_HEADER_INVALID; @@ -591,8 +594,8 @@ de265_error err = DE265_OK; - if ((err=read_sei(&reader,&sei, suffix, current_sps)) == DE265_OK) { - dump_sei(&sei, current_sps); + if ((err=read_sei(&reader,&sei, suffix, current_sps.get())) == DE265_OK) { + dump_sei(&sei, current_sps.get()); if (image_units.empty()==false && suffix) { image_units.back()->suffix_SEIs.push_back(sei); @@ -633,7 +636,7 @@ } - if (process_slice_segment_header(this, shdr, &err, nal->pts, &nal_hdr, nal->user_data) == false) + if (process_slice_segment_header(shdr, &err, nal->pts, &nal_hdr, nal->user_data) == false) { if (img!=NULL) img->integrity = INTEGRITY_NOT_DECODED; nal_parser.free_NAL_unit(nal); @@ -803,7 +806,7 @@ remove_images_from_dpb(sliceunit->shdr->RemoveReferencesList); - if (sliceunit->shdr->slice_segment_address >= imgunit->img->pps.CtbAddrRStoTS.size()) { + if (sliceunit->shdr->slice_segment_address >= imgunit->img->get_pps().CtbAddrRStoTS.size()) { return DE265_ERROR_CTB_OUTSIDE_IMAGE_AREA; } @@ -815,7 +818,7 @@ tctx.decctx = this; tctx.imgunit = imgunit; tctx.sliceunit= sliceunit; - tctx.CtbAddrInTS = imgunit->img->pps.CtbAddrRStoTS[tctx.shdr->slice_segment_address]; + tctx.CtbAddrInTS = imgunit->img->get_pps().CtbAddrRStoTS[tctx.shdr->slice_segment_address]; tctx.task = NULL; init_thread_context(&tctx); @@ -830,9 +833,9 @@ // alloc CABAC-model array if entropy_coding_sync is enabled - if (pps->entropy_coding_sync_enabled_flag && + if (imgunit->img->get_pps().entropy_coding_sync_enabled_flag && sliceunit->shdr->first_slice_segment_in_pic_flag) { - imgunit->ctx_models.resize( (img->sps.PicHeightInCtbsY-1) ); //* CONTEXT_MODEL_TABLE_LENGTH ); + imgunit->ctx_models.resize( (img->get_sps().PicHeightInCtbsY-1) ); //* CONTEXT_MODEL_TABLE_LENGTH ); } sliceunit->nThreads=1; @@ -890,21 +893,21 @@ */ de265_image* img = imgunit->img; - const pic_parameter_set* pps = &img->pps; + const pic_parameter_set& pps = img->get_pps(); sliceunit->state = slice_unit::InProgress; bool use_WPP = (img->decctx->num_worker_threads > 0 && - pps->entropy_coding_sync_enabled_flag); + pps.entropy_coding_sync_enabled_flag); bool use_tiles = (img->decctx->num_worker_threads > 0 && - pps->tiles_enabled_flag); + pps.tiles_enabled_flag); // TODO: remove this warning later when we do frame-parallel decoding if (img->decctx->num_worker_threads > 0 && - pps->entropy_coding_sync_enabled_flag == false && - pps->tiles_enabled_flag == false) { + pps.entropy_coding_sync_enabled_flag == false && + pps.tiles_enabled_flag == false) { img->decctx->add_warning(DE265_WARNING_NO_WPP_CANNOT_USE_MULTITHREADING, true); } @@ -980,10 +983,10 @@ de265_image* img = imgunit->img; slice_segment_header* shdr = sliceunit->shdr; - const pic_parameter_set* pps = &img->pps; + const pic_parameter_set& pps = img->get_pps(); int nRows = shdr->num_entry_point_offsets +1; - int ctbsWidth = img->sps.PicWidthInCtbsY; + int ctbsWidth = img->get_sps().PicWidthInCtbsY; assert(img->num_threads_active() == 0); @@ -993,7 +996,7 @@ if (shdr->first_slice_segment_in_pic_flag) { // reserve space for nRows-1 because we don't need to save the CABAC model in the last CTB row - imgunit->ctx_models.resize( (img->sps.PicHeightInCtbsY-1) ); //* CONTEXT_MODEL_TABLE_LENGTH ); + imgunit->ctx_models.resize( (img->get_sps().PicHeightInCtbsY-1) ); //* CONTEXT_MODEL_TABLE_LENGTH ); } @@ -1030,7 +1033,7 @@ tctx->img = img; tctx->imgunit = imgunit; tctx->sliceunit= sliceunit; - tctx->CtbAddrInTS = pps->CtbAddrRStoTS[ctbAddrRS]; + tctx->CtbAddrInTS = pps.CtbAddrRStoTS[ctbAddrRS]; init_thread_context(tctx); @@ -1094,10 +1097,10 @@ de265_image* img = imgunit->img; slice_segment_header* shdr = sliceunit->shdr; - const pic_parameter_set* pps = &img->pps; + const pic_parameter_set& pps = img->get_pps(); int nTiles = shdr->num_entry_point_offsets +1; - int ctbsWidth = img->sps.PicWidthInCtbsY; + int ctbsWidth = img->get_sps().PicWidthInCtbsY; assert(img->num_threads_active() == 0); @@ -1107,20 +1110,20 @@ // first CTB in this slice int ctbAddrRS = shdr->slice_segment_address; - int tileID = pps->TileIdRS[ctbAddrRS]; + int tileID = pps.TileIdRS[ctbAddrRS]; for (int entryPt=0;entryPt<nTiles;entryPt++) { // entry points other than the first start at tile beginnings if (entryPt>0) { tileID++; - if (tileID >= pps->num_tile_columns * pps->num_tile_rows) { + if (tileID >= pps.num_tile_columns * pps.num_tile_rows) { err = DE265_WARNING_SLICEHEADER_INVALID; break; } - int ctbX = pps->colBd[tileID % pps->num_tile_columns]; - int ctbY = pps->rowBd[tileID / pps->num_tile_columns]; + int ctbX = pps.colBd[tileID % pps.num_tile_columns]; + int ctbY = pps.rowBd[tileID / pps.num_tile_columns]; ctbAddrRS = ctbY * ctbsWidth + ctbX; } @@ -1133,7 +1136,7 @@ tctx->img = img; tctx->imgunit = imgunit; tctx->sliceunit= sliceunit; - tctx->CtbAddrInTS = pps->CtbAddrRStoTS[ctbAddrRS]; + tctx->CtbAddrInTS = pps.CtbAddrRStoTS[ctbAddrRS]; init_thread_context(tctx); @@ -1344,41 +1347,20 @@ } -void decoder_context::process_vps(video_parameter_set* vps) -{ - this->vps[ vps->video_parameter_set_id ] = *vps; -} - - -void decoder_context::process_sps(seq_parameter_set* sps) -{ - //push_current_picture_to_output_queue(); - - this->sps[ sps->seq_parameter_set_id ] = *sps; -} - - -void decoder_context::process_pps(pic_parameter_set* pps) -{ - //push_current_picture_to_output_queue(); - - this->pps[ (int)pps->pic_parameter_set_id ] = *pps; -} - /* 8.3.1 */ -void decoder_context::process_picture_order_count(decoder_context* ctx, slice_segment_header* hdr) +void decoder_context::process_picture_order_count(slice_segment_header* hdr) { loginfo(LogHeaders,"POC computation. lsb:%d prev.pic.lsb:%d msb:%d\n", - hdr->slice_pic_order_cnt_lsb, - ctx->prevPicOrderCntLsb, - ctx->PicOrderCntMsb); + hdr->slice_pic_order_cnt_lsb, + prevPicOrderCntLsb, + PicOrderCntMsb); - if (isIRAP(ctx->nal_unit_type) && - ctx->NoRaslOutputFlag) + if (isIRAP(nal_unit_type) && + NoRaslOutputFlag) { - ctx->PicOrderCntMsb=0; + PicOrderCntMsb=0; // flush all images from reorder buffer @@ -1388,37 +1370,37 @@ } else { - int MaxPicOrderCntLsb = ctx->current_sps->MaxPicOrderCntLsb; + int MaxPicOrderCntLsb = current_sps->MaxPicOrderCntLsb; - if ((hdr->slice_pic_order_cnt_lsb < ctx->prevPicOrderCntLsb) && - (ctx->prevPicOrderCntLsb - hdr->slice_pic_order_cnt_lsb) >= MaxPicOrderCntLsb/2) { - ctx->PicOrderCntMsb = ctx->prevPicOrderCntMsb + MaxPicOrderCntLsb; + if ((hdr->slice_pic_order_cnt_lsb < prevPicOrderCntLsb) && + (prevPicOrderCntLsb - hdr->slice_pic_order_cnt_lsb) >= MaxPicOrderCntLsb/2) { + PicOrderCntMsb = prevPicOrderCntMsb + MaxPicOrderCntLsb; } - else if ((hdr->slice_pic_order_cnt_lsb > ctx->prevPicOrderCntLsb) && - (hdr->slice_pic_order_cnt_lsb - ctx->prevPicOrderCntLsb) > MaxPicOrderCntLsb/2) { - ctx->PicOrderCntMsb = ctx->prevPicOrderCntMsb - MaxPicOrderCntLsb; + else if ((hdr->slice_pic_order_cnt_lsb > prevPicOrderCntLsb) && + (hdr->slice_pic_order_cnt_lsb - prevPicOrderCntLsb) > MaxPicOrderCntLsb/2) { + PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb; } else { - ctx->PicOrderCntMsb = ctx->prevPicOrderCntMsb; + PicOrderCntMsb = prevPicOrderCntMsb; } } - ctx->img->PicOrderCntVal = ctx->PicOrderCntMsb + hdr->slice_pic_order_cnt_lsb; - ctx->img->picture_order_cnt_lsb = hdr->slice_pic_order_cnt_lsb; + img->PicOrderCntVal = PicOrderCntMsb + hdr->slice_pic_order_cnt_lsb; + img->picture_order_cnt_lsb = hdr->slice_pic_order_cnt_lsb; loginfo(LogHeaders,"POC computation. new msb:%d POC=%d\n", - ctx->PicOrderCntMsb, - ctx->img->PicOrderCntVal); + PicOrderCntMsb, + img->PicOrderCntVal); - if (ctx->img->nal_hdr.nuh_temporal_id==0 && - !isSublayerNonReference(ctx->nal_unit_type) && - !isRASL(ctx->nal_unit_type) && - !isRADL(ctx->nal_unit_type)) + if (img->nal_hdr.nuh_temporal_id==0 && + !isSublayerNonReference(nal_unit_type) && + !isRASL(nal_unit_type) && + !isRADL(nal_unit_type)) { loginfo(LogHeaders,"set prevPicOrderCntLsb/Msb\n"); - ctx->prevPicOrderCntLsb = hdr->slice_pic_order_cnt_lsb; - ctx->prevPicOrderCntMsb = ctx->PicOrderCntMsb; + prevPicOrderCntLsb = hdr->slice_pic_order_cnt_lsb; + prevPicOrderCntMsb = PicOrderCntMsb; } } @@ -1426,17 +1408,18 @@ /* 8.3.3.2 Returns DPB index of the generated picture. */ -int decoder_context::generate_unavailable_reference_picture(decoder_context* ctx, - const seq_parameter_set* sps, +int decoder_context::generate_unavailable_reference_picture(const seq_parameter_set* sps, int POC, bool longTerm) { - assert(ctx->dpb.has_free_dpb_picture(true)); + assert(dpb.has_free_dpb_picture(true)); + + std::shared_ptr<const seq_parameter_set> current_sps = this->sps[ (int)current_pps->seq_parameter_set_id ]; - int idx = ctx->dpb.new_image(ctx->current_sps, this, 0,0, false); + int idx = dpb.new_image(current_sps, this, 0,0, false); assert(idx>=0); //printf("-> fill with unavailable POC %d\n",POC); - de265_image* img = ctx->dpb.get_image(idx); + de265_image* img = dpb.get_image(idx); img->fill_image(1<<(sps->BitDepth_Y-1), 1<<(sps->BitDepth_C-1), @@ -1458,16 +1441,16 @@ This function will mark pictures in the DPB as 'unused' or 'used for long-term reference' */ -void decoder_context::process_reference_picture_set(decoder_context* ctx, slice_segment_header* hdr) +void decoder_context::process_reference_picture_set(slice_segment_header* hdr) { std::vector<int> removeReferencesList; - const int currentID = ctx->img->get_ID(); + const int currentID = img->get_ID(); - if (isIRAP(ctx->nal_unit_type) && ctx->NoRaslOutputFlag) { + if (isIRAP(nal_unit_type) && NoRaslOutputFlag) { - int currentPOC = ctx->img->PicOrderCntVal; + int currentPOC = img->PicOrderCntVal; // reset DPB @@ -1481,14 +1464,14 @@ */ for (int i=0;i<dpb.size();i++) { - de265_image* img = ctx->dpb.get_image(i); + de265_image* img = dpb.get_image(i); if (img->PicState != UnusedForReference && img->PicOrderCntVal < currentPOC && - img->removed_at_picture_id > ctx->img->get_ID()) { + img->removed_at_picture_id > img->get_ID()) { removeReferencesList.push_back(img->get_ID()); - img->removed_at_picture_id = ctx->img->get_ID(); + img->removed_at_picture_id = img->get_ID(); //printf("will remove ID %d (a)\n",img->get_ID()); } @@ -1496,15 +1479,15 @@ } - if (isIDR(ctx->nal_unit_type)) { + if (isIDR(nal_unit_type)) { // clear all reference pictures - ctx->NumPocStCurrBefore = 0; - ctx->NumPocStCurrAfter = 0; - ctx->NumPocStFoll = 0; - ctx->NumPocLtCurr = 0; - ctx->NumPocLtFoll = 0; + NumPocStCurrBefore = 0; + NumPocStCurrAfter = 0; + NumPocStFoll = 0; + NumPocLtCurr = 0; + NumPocLtFoll = 0; } else { const ref_pic_set* rps = &hdr->CurrRps; @@ -1520,15 +1503,15 @@ i++) { if (rps->UsedByCurrPicS0[i]) { - ctx->PocStCurrBefore[j++] = ctx->img->PicOrderCntVal + rps->DeltaPocS0[i]; - //printf("PocStCurrBefore = %d\n",ctx->PocStCurrBefore[j-1]); + PocStCurrBefore[j++] = img->PicOrderCntVal + rps->DeltaPocS0[i]; + //printf("PocStCurrBefore = %d\n",PocStCurrBefore[j-1]); } else { - ctx->PocStFoll[k++] = ctx->img->PicOrderCntVal + rps->DeltaPocS0[i]; + PocStFoll[k++] = img->PicOrderCntVal + rps->DeltaPocS0[i]; } } - ctx->NumPocStCurrBefore = j; + NumPocStCurrBefore = j; // scan ref-pic-set for larger POCs and fill into PocStCurrAfter / PocStFoll @@ -1538,99 +1521,103 @@ i++) { if (rps->UsedByCurrPicS1[i]) { - ctx->PocStCurrAfter[j++] = ctx->img->PicOrderCntVal + rps->DeltaPocS1[i]; - //printf("PocStCurrAfter = %d\n",ctx->PocStCurrAfter[j-1]); + PocStCurrAfter[j++] = img->PicOrderCntVal + rps->DeltaPocS1[i]; + //printf("PocStCurrAfter = %d\n",PocStCurrAfter[j-1]); } else { - ctx->PocStFoll[k++] = ctx->img->PicOrderCntVal + rps->DeltaPocS1[i]; + PocStFoll[k++] = img->PicOrderCntVal + rps->DeltaPocS1[i]; } } - ctx->NumPocStCurrAfter = j; - ctx->NumPocStFoll = k; + NumPocStCurrAfter = j; + NumPocStFoll = k; // find used / future long-term references for (i=0, j=0, k=0; - //i<ctx->current_sps->num_long_term_ref_pics_sps + hdr->num_long_term_pics; + //i<current_sps->num_long_term_ref_pics_sps + hdr->num_long_term_pics; i<hdr->num_long_term_sps + hdr->num_long_term_pics; i++) { - int pocLt = ctx->PocLsbLt[i]; + int pocLt = PocLsbLt[i]; if (hdr->delta_poc_msb_present_flag[i]) { - int currentPictureMSB = ctx->img->PicOrderCntVal - hdr->slice_pic_order_cnt_lsb; + int currentPictureMSB = img->PicOrderCntVal - hdr->slice_pic_order_cnt_lsb; pocLt += currentPictureMSB - - ctx->DeltaPocMsbCycleLt[i] * ctx->current_sps->MaxPicOrderCntLsb; + - DeltaPocMsbCycleLt[i] * current_sps->MaxPicOrderCntLsb; } - if (ctx->UsedByCurrPicLt[i]) { - ctx->PocLtCurr[j] = pocLt; - ctx->CurrDeltaPocMsbPresentFlag[j] = hdr->delta_poc_msb_present_flag[i]; + if (UsedByCurrPicLt[i]) { + PocLtCurr[j] = pocLt; + CurrDeltaPocMsbPresentFlag[j] = hdr->delta_poc_msb_present_flag[i]; j++; } else { - ctx->PocLtFoll[k] = pocLt; - ctx->FollDeltaPocMsbPresentFlag[k] = hdr->delta_poc_msb_present_flag[i]; + PocLtFoll[k] = pocLt; + FollDeltaPocMsbPresentFlag[k] = hdr->delta_poc_msb_present_flag[i]; k++; } } - ctx->NumPocLtCurr = j; - ctx->NumPocLtFoll = k; + NumPocLtCurr = j; + NumPocLtFoll = k; } // (old 8-99) / (new 8-106) // 1. - std::vector<bool> picInAnyList(dpb.size(), false); + std::vector<char> picInAnyList(dpb.size(), false); dpb.log_dpb_content(); - for (int i=0;i<ctx->NumPocLtCurr;i++) { + for (int i=0;i<NumPocLtCurr;i++) { int k; - if (!ctx->CurrDeltaPocMsbPresentFlag[i]) { - k = ctx->dpb.DPB_index_of_picture_with_LSB(ctx->PocLtCurr[i], currentID, true); + if (!CurrDeltaPocMsbPresentFlag[i]) { + k = dpb.DPB_index_of_picture_with_LSB(PocLtCurr[i], currentID, true); } else { - k = ctx->dpb.DPB_index_of_picture_with_POC(ctx->PocLtCurr[i], currentID, true); + k = dpb.DPB_index_of_picture_with_POC(PocLtCurr[i], currentID, true); } - ctx->RefPicSetLtCurr[i] = k; // -1 == "no reference picture" + RefPicSetLtCurr[i] = k; // -1 == "no reference picture" if (k>=0) picInAnyList[k]=true; else { // TODO, CHECK: is it ok that we generate a picture with POC = LSB (PocLtCurr) // We do not know the correct MSB - int concealedPicture = generate_unavailable_reference_picture(ctx, ctx->current_sps, - ctx->PocLtCurr[i], true); - ctx->RefPicSetLtCurr[i] = k = concealedPicture; + int concealedPicture = generate_unavailable_reference_picture(current_sps.get(), + PocLtCurr[i], true); + picInAnyList.resize(dpb.size(), false); // adjust size of array to hold new picture + + RefPicSetLtCurr[i] = k = concealedPicture; picInAnyList[concealedPicture]=true; } - if (ctx->dpb.get_image(k)->integrity != INTEGRITY_CORRECT) { - ctx->img->integrity = INTEGRITY_DERIVED_FROM_FAULTY_REFERENCE; + if (dpb.get_image(k)->integrity != INTEGRITY_CORRECT) { + img->integrity = INTEGRITY_DERIVED_FROM_FAULTY_REFERENCE; } } - for (int i=0;i<ctx->NumPocLtFoll;i++) { + for (int i=0;i<NumPocLtFoll;i++) { int k; - if (!ctx->FollDeltaPocMsbPresentFlag[i]) { - k = ctx->dpb.DPB_index_of_picture_with_LSB(ctx->PocLtFoll[i], currentID, true); + if (!FollDeltaPocMsbPresentFlag[i]) { + k = dpb.DPB_index_of_picture_with_LSB(PocLtFoll[i], currentID, true); } else { - k = ctx->dpb.DPB_index_of_picture_with_POC(ctx->PocLtFoll[i], currentID, true); + k = dpb.DPB_index_of_picture_with_POC(PocLtFoll[i], currentID, true); } - ctx->RefPicSetLtFoll[i] = k; // -1 == "no reference picture" + RefPicSetLtFoll[i] = k; // -1 == "no reference picture" if (k>=0) picInAnyList[k]=true; else { - int concealedPicture = k = generate_unavailable_reference_picture(ctx, ctx->current_sps, - ctx->PocLtFoll[i], true); - ctx->RefPicSetLtFoll[i] = concealedPicture; + int concealedPicture = k = generate_unavailable_reference_picture(current_sps.get(), + PocLtFoll[i], true); + picInAnyList.resize(dpb.size(), false); // adjust size of array to hold new picture + + RefPicSetLtFoll[i] = concealedPicture; picInAnyList[concealedPicture]=true; } } @@ -1638,81 +1625,84 @@ // 2. Mark all pictures in RefPicSetLtCurr / RefPicSetLtFoll as UsedForLongTermReference - for (int i=0;i<ctx->NumPocLtCurr;i++) { - ctx->dpb.get_image(ctx->RefPicSetLtCurr[i])->PicState = UsedForLongTermReference; + for (int i=0;i<NumPocLtCurr;i++) { + dpb.get_image(RefPicSetLtCurr[i])->PicState = UsedForLongTermReference; } - for (int i=0;i<ctx->NumPocLtFoll;i++) { - ctx->dpb.get_image(ctx->RefPicSetLtFoll[i])->PicState = UsedForLongTermReference; + for (int i=0;i<NumPocLtFoll;i++) { + dpb.get_image(RefPicSetLtFoll[i])->PicState = UsedForLongTermReference; } // 3. - for (int i=0;i<ctx->NumPocStCurrBefore;i++) { - int k = ctx->dpb.DPB_index_of_picture_with_POC(ctx->PocStCurrBefore[i], currentID); + for (int i=0;i<NumPocStCurrBefore;i++) { + int k = dpb.DPB_index_of_picture_with_POC(PocStCurrBefore[i], currentID); - //printf("st curr before, poc=%d -> idx=%d\n",ctx->PocStCurrBefore[i], k); + //printf("st curr before, poc=%d -> idx=%d\n",PocStCurrBefore[i], k); - ctx->RefPicSetStCurrBefore[i] = k; // -1 == "no reference picture" + RefPicSetStCurrBefore[i] = k; // -1 == "no reference picture" if (k>=0) picInAnyList[k]=true; else { - int concealedPicture = generate_unavailable_reference_picture(ctx, ctx->current_sps, - ctx->PocStCurrBefore[i], false); - ctx->RefPicSetStCurrBefore[i] = k = concealedPicture; - picInAnyList[concealedPicture]=true; + int concealedPicture = generate_unavailable_reference_picture(current_sps.get(), + PocStCurrBefore[i], false); + RefPicSetStCurrBefore[i] = k = concealedPicture; + + if (concealedPicture < picInAnyList.size()) { + picInAnyList[concealedPicture] = true; + } //printf(" concealed: %d\n", concealedPicture); } - if (ctx->dpb.get_image(k)->integrity != INTEGRITY_CORRECT) { - ctx->img->integrity = INTEGRITY_DERIVED_FROM_FAULTY_REFERENCE; + if (dpb.get_image(k)->integrity != INTEGRITY_CORRECT) { + img->integrity = INTEGRITY_DERIVED_FROM_FAULTY_REFERENCE; } } - for (int i=0;i<ctx->NumPocStCurrAfter;i++) { - int k = ctx->dpb.DPB_index_of_picture_with_POC(ctx->PocStCurrAfter[i], currentID); + for (int i=0;i<NumPocStCurrAfter;i++) { + int k = dpb.DPB_index_of_picture_with_POC(PocStCurrAfter[i], currentID); - //printf("st curr after, poc=%d -> idx=%d\n",ctx->PocStCurrAfter[i], k); + //printf("st curr after, poc=%d -> idx=%d\n",PocStCurrAfter[i], k); - ctx->RefPicSetStCurrAfter[i] = k; // -1 == "no reference picture" + RefPicSetStCurrAfter[i] = k; // -1 == "no reference picture" if (k>=0) picInAnyList[k]=true; else { - int concealedPicture = generate_unavailable_reference_picture(ctx, ctx->current_sps, - ctx->PocStCurrAfter[i], false); - ctx->RefPicSetStCurrAfter[i] = k = concealedPicture; + int concealedPicture = generate_unavailable_reference_picture(current_sps.get(), + PocStCurrAfter[i], false); + RefPicSetStCurrAfter[i] = k = concealedPicture; picInAnyList[concealedPicture]=true; //printf(" concealed: %d\n", concealedPicture); } - if (ctx->dpb.get_image(k)->integrity != INTEGRITY_CORRECT) { - ctx->img->integrity = INTEGRITY_DERIVED_FROM_FAULTY_REFERENCE; + if (dpb.get_image(k)->integrity != INTEGRITY_CORRECT) { + img->integrity = INTEGRITY_DERIVED_FROM_FAULTY_REFERENCE; } } - for (int i=0;i<ctx->NumPocStFoll;i++) { - int k = ctx->dpb.DPB_index_of_picture_with_POC(ctx->PocStFoll[i], currentID); + for (int i=0;i<NumPocStFoll;i++) { + int k = dpb.DPB_index_of_picture_with_POC(PocStFoll[i], currentID); // if (k<0) { assert(false); } // IGNORE - ctx->RefPicSetStFoll[i] = k; // -1 == "no reference picture" + RefPicSetStFoll[i] = k; // -1 == "no reference picture" if (k>=0) picInAnyList[k]=true; } // 4. any picture that is not marked for reference is put into the "UnusedForReference" state for (int i=0;i<dpb.size();i++) - if (!picInAnyList[i]) // no reference + if (i>=picInAnyList.size() || !picInAnyList[i]) // no reference { - de265_image* dpbimg = ctx->dpb.get_image(i); - if (dpbimg != ctx->img && // not the current picture - dpbimg->removed_at_picture_id > ctx->img->get_ID()) // has not been removed before + de265_image* dpbimg = dpb.get_image(i); + if (dpbimg != img && // not the current picture + dpbimg->removed_at_picture_id > img->get_ID()) // has not been removed before { if (dpbimg->PicState != UnusedForReference) { removeReferencesList.push_back(dpbimg->get_ID()); //printf("will remove ID %d (b)\n",dpbimg->get_ID()); - dpbimg->removed_at_picture_id = ctx->img->get_ID(); + dpbimg->removed_at_picture_id = img->get_ID(); } } } @@ -1732,7 +1722,7 @@ - the RefPicList_POC[2][], containing POCs. - LongTermRefPic[2][] is also set to true if it is a long-term reference */ -bool decoder_context::construct_reference_picture_lists(decoder_context* ctx, slice_segment_header* hdr) +bool decoder_context::construct_reference_picture_lists(slice_segment_header* hdr) { int NumPocTotalCurr = hdr->NumPocTotalCurr; int NumRpsCurrTempList0 = libde265_max(hdr->num_ref_idx_l0_active, NumPocTotalCurr); @@ -1753,27 +1743,27 @@ int rIdx=0; while (rIdx < NumRpsCurrTempList0) { - for (int i=0;i<ctx->NumPocStCurrBefore && rIdx<NumRpsCurrTempList0; rIdx++,i++) - RefPicListTemp0[rIdx] = ctx->RefPicSetStCurrBefore[i]; + for (int i=0;i<NumPocStCurrBefore && rIdx<NumRpsCurrTempList0; rIdx++,i++) + RefPicListTemp0[rIdx] = RefPicSetStCurrBefore[i]; - for (int i=0;i<ctx->NumPocStCurrAfter && rIdx<NumRpsCurrTempList0; rIdx++,i++) - RefPicListTemp0[rIdx] = ctx->RefPicSetStCurrAfter[i]; + for (int i=0;i<NumPocStCurrAfter && rIdx<NumRpsCurrTempList0; rIdx++,i++) + RefPicListTemp0[rIdx] = RefPicSetStCurrAfter[i]; - for (int i=0;i<ctx->NumPocLtCurr && rIdx<NumRpsCurrTempList0; rIdx++,i++) { - RefPicListTemp0[rIdx] = ctx->RefPicSetLtCurr[i]; + for (int i=0;i<NumPocLtCurr && rIdx<NumRpsCurrTempList0; rIdx++,i++) { + RefPicListTemp0[rIdx] = RefPicSetLtCurr[i]; isLongTerm[0][rIdx] = true; } // This check is to prevent an endless loop when no images are added above. if (rIdx==0) { - ctx->add_warning(DE265_WARNING_FAULTY_REFERENCE_PICTURE_LIST, false); + add_warning(DE265_WARNING_FAULTY_REFERENCE_PICTURE_LIST, false); return false; } } /* if (hdr->num_ref_idx_l0_active > 16) { - ctx->add_warning(DE265_WARNING_NONEXISTING_REFERENCE_PICTURE_ACCESSED, false); + add_warning(DE265_WARNING_NONEXISTING_REFERENCE_PICTURE_ACCESSED, false); return false; } */ @@ -1786,7 +1776,7 @@ hdr->LongTermRefPic[0][rIdx] = isLongTerm[0][idx]; // remember POC of referenced image (needed in motion.c, derive_collocated_motion_vector) - de265_image* img_0_rIdx = ctx->dpb.get_image(hdr->RefPicList[0][rIdx]); + de265_image* img_0_rIdx = dpb.get_image(hdr->RefPicList[0][rIdx]); if (img_0_rIdx==NULL) { return false; } @@ -1806,28 +1796,28 @@ int rIdx=0; while (rIdx < NumRpsCurrTempList1) { - for (int i=0;i<ctx->NumPocStCurrAfter && rIdx<NumRpsCurrTempList1; rIdx++,i++) { - RefPicListTemp1[rIdx] = ctx->RefPicSetStCurrAfter[i]; + for (int i=0;i<NumPocStCurrAfter && rIdx<NumRpsCurrTempList1; rIdx++,i++) { + RefPicListTemp1[rIdx] = RefPicSetStCurrAfter[i]; } - for (int i=0;i<ctx->NumPocStCurrBefore && rIdx<NumRpsCurrTempList1; rIdx++,i++) { - RefPicListTemp1[rIdx] = ctx->RefPicSetStCurrBefore[i]; + for (int i=0;i<NumPocStCurrBefore && rIdx<NumRpsCurrTempList1; rIdx++,i++) { + RefPicListTemp1[rIdx] = RefPicSetStCurrBefore[i]; } - for (int i=0;i<ctx->NumPocLtCurr && rIdx<NumRpsCurrTempList1; rIdx++,i++) { - RefPicListTemp1[rIdx] = ctx->RefPicSetLtCurr[i]; + for (int i=0;i<NumPocLtCurr && rIdx<NumRpsCurrTempList1; rIdx++,i++) { + RefPicListTemp1[rIdx] = RefPicSetLtCurr[i]; isLongTerm[1][rIdx] = true; } // This check is to prevent an endless loop when no images are added above. if (rIdx==0) { - ctx->add_warning(DE265_WARNING_FAULTY_REFERENCE_PICTURE_LIST, false); + add_warning(DE265_WARNING_FAULTY_REFERENCE_PICTURE_LIST, false); return false; } } if (hdr->num_ref_idx_l0_active > 16) { - ctx->add_warning(DE265_WARNING_NONEXISTING_REFERENCE_PICTURE_ACCESSED, false); + add_warning(DE265_WARNING_NONEXISTING_REFERENCE_PICTURE_ACCESSED, false); return false; } @@ -1839,7 +1829,7 @@ hdr->LongTermRefPic[1][rIdx] = isLongTerm[1][idx]; // remember POC of referenced imaged (needed in motion.c, derive_collocated_motion_vector) - de265_image* img_1_rIdx = ctx->dpb.get_image(hdr->RefPicList[1][rIdx]); + de265_image* img_1_rIdx = dpb.get_image(hdr->RefPicList[1][rIdx]); if (img_1_rIdx == NULL) { return false; } hdr->RefPicList_POC[1][rIdx] = img_1_rIdx->PicOrderCntVal; hdr->RefPicList_PicState[1][rIdx] = img_1_rIdx->PicState; @@ -1955,8 +1945,13 @@ // check for full reorder buffers - int sublayer = outimg->vps.vps_max_sub_layers -1; - int maxNumPicsInReorderBuffer = outimg->vps.layer[sublayer].vps_max_num_reorder_pics; + int maxNumPicsInReorderBuffer = 0; + + // TODO: I'd like to have the has_vps() check somewhere else (not decode the picture at all) + if (outimg->has_vps()) { + int sublayer = outimg->get_vps().vps_max_sub_layers -1; + maxNumPicsInReorderBuffer = outimg->get_vps().layer[sublayer].vps_max_num_reorder_pics; + } if (dpb.num_pictures_in_reorder_buffer() > maxNumPicsInReorderBuffer) { dpb.output_next_picture_in_reorder_buffer(); @@ -1969,7 +1964,7 @@ // returns whether we can continue decoding the stream or whether we should give up -bool decoder_context::process_slice_segment_header(decoder_context* ctx, slice_segment_header* hdr, +bool decoder_context::process_slice_segment_header(slice_segment_header* hdr, de265_error* err, de265_PTS pts, nal_header* nal_hdr, void* user_data) @@ -1982,14 +1977,14 @@ // get PPS and SPS for this slice int pps_id = hdr->slice_pic_parameter_set_id; - if (ctx->pps[pps_id].pps_read==false) { + if (pps[pps_id]->pps_read==false) { logerror(LogHeaders, "PPS %d has not been read\n", pps_id); assert(false); // TODO } - ctx->current_pps = &ctx->pps[pps_id]; - ctx->current_sps = &ctx->sps[ (int)ctx->current_pps->seq_parameter_set_id ]; - ctx->current_vps = &ctx->vps[ (int)ctx->current_sps->video_parameter_set_id ]; + current_pps = pps[pps_id]; + current_sps = sps[ (int)current_pps->seq_parameter_set_id ]; + current_vps = vps[ (int)current_sps->video_parameter_set_id ]; calc_tid_and_framerate_ratio(); @@ -2002,76 +1997,76 @@ //ctx->push_current_picture_to_output_queue(); - ctx->current_image_poc_lsb = hdr->slice_pic_order_cnt_lsb; + current_image_poc_lsb = hdr->slice_pic_order_cnt_lsb; - seq_parameter_set* sps = ctx->current_sps; + seq_parameter_set* sps = current_sps.get(); // --- find and allocate image buffer for decoding --- int image_buffer_idx; - bool isOutputImage = (!sps->sample_adaptive_offset_enabled_flag || ctx->param_disable_sao); - image_buffer_idx = ctx->dpb.new_image(sps, this, pts, user_data, isOutputImage); + bool isOutputImage = (!sps->sample_adaptive_offset_enabled_flag || param_disable_sao); + image_buffer_idx = dpb.new_image(current_sps, this, pts, user_data, isOutputImage); if (image_buffer_idx == -1) { *err = DE265_ERROR_IMAGE_BUFFER_FULL; return false; } - de265_image* img = ctx->dpb.get_image(image_buffer_idx); + /*de265_image* */ img = dpb.get_image(image_buffer_idx); img->nal_hdr = *nal_hdr; - ctx->img = img; - img->vps = *ctx->current_vps; - //img->sps = *ctx->current_sps; // already set in new_image() - img->pps = *ctx->current_pps; - img->decctx = ctx; + // Note: sps is already set in new_image() -> ??? still the case with shared_ptr ? + + img->set_headers(current_vps, current_sps, current_pps); + + img->decctx = this; img->clear_metadata(); - if (isIRAP(ctx->nal_unit_type)) { - if (isIDR(ctx->nal_unit_type) || - isBLA(ctx->nal_unit_type) || - ctx->first_decoded_picture || - ctx->FirstAfterEndOfSequenceNAL) + if (isIRAP(nal_unit_type)) { + if (isIDR(nal_unit_type) || + isBLA(nal_unit_type) || + first_decoded_picture || + FirstAfterEndOfSequenceNAL) { - ctx->NoRaslOutputFlag = true; - ctx->FirstAfterEndOfSequenceNAL = false; + NoRaslOutputFlag = true; + FirstAfterEndOfSequenceNAL = false; } else if (0) // TODO: set HandleCraAsBlaFlag by external means { } else { - ctx->NoRaslOutputFlag = false; - ctx->HandleCraAsBlaFlag = false; + NoRaslOutputFlag = false; + HandleCraAsBlaFlag = false; } } - if (isRASL(ctx->nal_unit_type) && - ctx->NoRaslOutputFlag) + if (isRASL(nal_unit_type) && + NoRaslOutputFlag) { - ctx->img->PicOutputFlag = false; + img->PicOutputFlag = false; } else { - ctx->img->PicOutputFlag = !!hdr->pic_output_flag; + img->PicOutputFlag = !!hdr->pic_output_flag; } - process_picture_order_count(ctx,hdr); + process_picture_order_count(hdr); if (hdr->first_slice_segment_in_pic_flag) { // mark picture so that it is not overwritten by unavailable reference frames img->PicState = UsedForShortTermReference; - process_reference_picture_set(ctx,hdr); + process_reference_picture_set(hdr); } img->PicState = UsedForShortTermReference; - log_set_current_POC(ctx->img->PicOrderCntVal); + log_set_current_POC(img->PicOrderCntVal); // next image is not the first anymore @@ -2081,7 +2076,7 @@ else { // claims to be not the first slice, but there is no active image available - if (ctx->img == NULL) { + if (img == NULL) { return false; } } @@ -2089,7 +2084,7 @@ if (hdr->slice_type == SLICE_TYPE_B || hdr->slice_type == SLICE_TYPE_P) { - bool success = construct_reference_picture_lists(ctx,hdr); + bool success = construct_reference_picture_lists(hdr); if (!success) { return false; } @@ -2098,16 +2093,16 @@ //printf("process slice segment header\n"); loginfo(LogHeaders,"end of process-slice-header\n"); - ctx->dpb.log_dpb_content(); + dpb.log_dpb_content(); if (hdr->dependent_slice_segment_flag==0) { hdr->SliceAddrRS = hdr->slice_segment_address; } else { - hdr->SliceAddrRS = ctx->previous_slice_header->SliceAddrRS; + hdr->SliceAddrRS = previous_slice_header->SliceAddrRS; } - ctx->previous_slice_header = hdr; + previous_slice_header = hdr; loginfo(LogHeaders,"SliceAddrRS = %d\n",hdr->SliceAddrRS);
View file
libde265-1.0.2.tar.gz/libde265/decctx.h -> libde265-1.0.3.tar.gz/libde265/decctx.h
Changed
@@ -35,6 +35,8 @@ #include "libde265/acceleration.h" #include "libde265/nal-parser.h" +#include <memory> + #define DE265_MAX_VPS_SETS 16 // this is the maximum as defined in the standard #define DE265_MAX_SPS_SETS 16 // this is the maximum as defined in the standard #define DE265_MAX_PPS_SETS 64 // this is the maximum as defined in the standard @@ -61,7 +63,7 @@ // motion vectors - motion_spec motion; + PBMotionCoding motion; // prediction @@ -77,8 +79,10 @@ uint8_t explicit_rdpcm_flag; uint8_t explicit_rdpcm_dir; - ALIGNED_16(int16_t) _coeffBuf[(32*32)+8]; // alignment required for SSE code ! - int16_t *coeffBuf; + // we need 16 bytes of extra memory (8*int16) to shift the base for the + // alignment required for SSE code ! + int16_t _coeffBuf[(32*32)+8]; + int16_t *coeffBuf; // the base pointer for into _coeffBuf, aligned to 16 bytes int16_t coeffList[3][32*32]; int16_t coeffPos[3][32*32]; @@ -294,10 +298,13 @@ void reset(); - /* */ seq_parameter_set* get_sps(int id) { return &sps[id]; } - const seq_parameter_set* get_sps(int id) const { return &sps[id]; } - /* */ pic_parameter_set* get_pps(int id) { return &pps[id]; } - const pic_parameter_set* get_pps(int id) const { return &pps[id]; } + bool has_sps(int id) const { return (bool)sps[id]; } + bool has_pps(int id) const { return (bool)pps[id]; } + + /* */ seq_parameter_set* get_sps(int id) { return sps[id].get(); } + const seq_parameter_set* get_sps(int id) const { return sps[id].get(); } + /* */ pic_parameter_set* get_pps(int id) { return pps[id].get(); } + const pic_parameter_set* get_pps(int id) const { return pps[id].get(); } /* const slice_segment_header* get_SliceHeader_atCtb(int ctb) { @@ -320,11 +327,8 @@ void process_nal_hdr(nal_header*); - void process_vps(video_parameter_set*); - void process_sps(seq_parameter_set*); - void process_pps(pic_parameter_set*); - bool process_slice_segment_header(decoder_context*, slice_segment_header*, + bool process_slice_segment_header(slice_segment_header*, de265_error*, de265_PTS pts, nal_header* nal_hdr, void* user_data); @@ -381,13 +385,13 @@ private: // --- internal data --- - video_parameter_set vps[ DE265_MAX_VPS_SETS ]; - seq_parameter_set sps[ DE265_MAX_SPS_SETS ]; - pic_parameter_set pps[ DE265_MAX_PPS_SETS ]; + std::shared_ptr<video_parameter_set> vps[ DE265_MAX_VPS_SETS ]; + std::shared_ptr<seq_parameter_set> sps[ DE265_MAX_SPS_SETS ]; + std::shared_ptr<pic_parameter_set> pps[ DE265_MAX_PPS_SETS ]; - video_parameter_set* current_vps; - seq_parameter_set* current_sps; - pic_parameter_set* current_pps; + std::shared_ptr<video_parameter_set> current_vps; + std::shared_ptr<seq_parameter_set> current_sps; + std::shared_ptr<pic_parameter_set> current_pps; public: thread_pool thread_pool_; @@ -505,11 +509,11 @@ slice_unit* sliceunit, int progress); - void process_picture_order_count(decoder_context* ctx, slice_segment_header* hdr); - int generate_unavailable_reference_picture(decoder_context* ctx, const seq_parameter_set* sps, + void process_picture_order_count(slice_segment_header* hdr); + int generate_unavailable_reference_picture(const seq_parameter_set* sps, int POC, bool longTerm); - void process_reference_picture_set(decoder_context* ctx, slice_segment_header* hdr); - bool construct_reference_picture_lists(decoder_context* ctx, slice_segment_header* hdr); + void process_reference_picture_set(slice_segment_header* hdr); + bool construct_reference_picture_lists(slice_segment_header* hdr); void remove_images_from_dpb(const std::vector<int>& removeImageList);
View file
libde265-1.0.2.tar.gz/libde265/dpb.cc -> libde265-1.0.3.tar.gz/libde265/dpb.cc
Changed
@@ -201,7 +201,7 @@ } -int decoded_picture_buffer::new_image(const seq_parameter_set* sps, +int decoded_picture_buffer::new_image(std::shared_ptr<const seq_parameter_set> sps, decoder_context* decctx, de265_PTS pts, void* user_data, bool isOutputImage) {
View file
libde265-1.0.2.tar.gz/libde265/dpb.h -> libde265-1.0.3.tar.gz/libde265/dpb.h
Changed
@@ -39,7 +39,7 @@ /* Alloc a new image in the DPB and return its index. If there is no space for a new image, return -1. */ - int new_image(const seq_parameter_set* sps, decoder_context* decctx, + int new_image(std::shared_ptr<const seq_parameter_set> sps, decoder_context* decctx, de265_PTS pts, void* user_data, bool isOutputImage); /* Check for a free slot in the DPB. There are some slots reserved for
View file
libde265-1.0.2.tar.gz/libde265/encoder/CMakeLists.txt -> libde265-1.0.3.tar.gz/libde265/encoder/CMakeLists.txt
Changed
@@ -1,18 +1,17 @@ -set (encoder_sources - analyze.cc analyze.h - encode.h encode.cc +set (encoder_sources + encoder-core.cc encoder-core.h + encoder-types.h encoder-types.cc encoder-params.h encoder-params.cc encoder-context.h encoder-context.cc + encoder-syntax.h encoder-syntax.cc encpicbuf.h encpicbuf.cc sop.h sop.cc ) -add_library(encoder STATIC ${encoder_sources}) +add_subdirectory (algo) +add_library(encoder OBJECT ${encoder_sources}) +set(ENCODER_OBJECTS $<TARGET_OBJECTS:encoder> ${ALGO_OBJECTS} PARENT_SCOPE) if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") SET_TARGET_PROPERTIES(encoder PROPERTIES COMPILE_FLAGS "-fPIC") endif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - -add_subdirectory (algo) - -target_link_libraries(encoder algo)
View file
libde265-1.0.2.tar.gz/libde265/encoder/Makefile.am -> libde265-1.0.3.tar.gz/libde265/encoder/Makefile.am
Changed
@@ -2,10 +2,11 @@ libde265_encoder_la_CXXFLAGS = -I.. libde265_encoder_la_SOURCES = \ - analyze.cc analyze.h \ - encode.h encode.cc \ + encoder-core.cc encoder-core.h \ + encoder-types.h encoder-types.cc \ encoder-params.h encoder-params.cc \ encoder-context.h encoder-context.cc \ + encoder-syntax.h encoder-syntax.cc \ encpicbuf.h encpicbuf.cc \ sop.h sop.cc
View file
libde265-1.0.2.tar.gz/libde265/encoder/Makefile.in -> libde265-1.0.3.tar.gz/libde265/encoder/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,8 +90,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = libde265/encoder -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -92,16 +100,18 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libde265_encoder_la_DEPENDENCIES = algo/libde265_encoder_algo.la -am_libde265_encoder_la_OBJECTS = libde265_encoder_la-analyze.lo \ - libde265_encoder_la-encode.lo \ +am_libde265_encoder_la_OBJECTS = libde265_encoder_la-encoder-core.lo \ + libde265_encoder_la-encoder-types.lo \ libde265_encoder_la-encoder-params.lo \ libde265_encoder_la-encoder-context.lo \ + libde265_encoder_la-encoder-syntax.lo \ libde265_encoder_la-encpicbuf.lo libde265_encoder_la-sop.lo libde265_encoder_la_OBJECTS = $(am_libde265_encoder_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -207,6 +217,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -284,6 +295,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -366,6 +378,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -381,10 +394,11 @@ noinst_LTLIBRARIES = libde265_encoder.la libde265_encoder_la_CXXFLAGS = -I.. libde265_encoder_la_SOURCES = \ - analyze.cc analyze.h \ - encode.h encode.cc \ + encoder-core.cc encoder-core.h \ + encoder-types.h encoder-types.cc \ encoder-params.h encoder-params.cc \ encoder-context.h encoder-context.cc \ + encoder-syntax.h encoder-syntax.cc \ encpicbuf.h encpicbuf.cc \ sop.h sop.cc @@ -409,7 +423,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libde265/encoder/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libde265/encoder/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -448,10 +461,11 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-analyze.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-encode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-encoder-context.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-encoder-core.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-encoder-params.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-encoder-syntax.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-encoder-types.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-encpicbuf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_la-sop.Plo@am__quote@ @@ -476,19 +490,19 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< -libde265_encoder_la-analyze.lo: analyze.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_la-analyze.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_la-analyze.Tpo -c -o libde265_encoder_la-analyze.lo `test -f 'analyze.cc' || echo '$(srcdir)/'`analyze.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_la-analyze.Tpo $(DEPDIR)/libde265_encoder_la-analyze.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='analyze.cc' object='libde265_encoder_la-analyze.lo' libtool=yes @AMDEPBACKSLASH@ +libde265_encoder_la-encoder-core.lo: encoder-core.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_la-encoder-core.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_la-encoder-core.Tpo -c -o libde265_encoder_la-encoder-core.lo `test -f 'encoder-core.cc' || echo '$(srcdir)/'`encoder-core.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_la-encoder-core.Tpo $(DEPDIR)/libde265_encoder_la-encoder-core.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='encoder-core.cc' object='libde265_encoder_la-encoder-core.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_la-analyze.lo `test -f 'analyze.cc' || echo '$(srcdir)/'`analyze.cc +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_la-encoder-core.lo `test -f 'encoder-core.cc' || echo '$(srcdir)/'`encoder-core.cc -libde265_encoder_la-encode.lo: encode.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_la-encode.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_la-encode.Tpo -c -o libde265_encoder_la-encode.lo `test -f 'encode.cc' || echo '$(srcdir)/'`encode.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_la-encode.Tpo $(DEPDIR)/libde265_encoder_la-encode.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='encode.cc' object='libde265_encoder_la-encode.lo' libtool=yes @AMDEPBACKSLASH@ +libde265_encoder_la-encoder-types.lo: encoder-types.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_la-encoder-types.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_la-encoder-types.Tpo -c -o libde265_encoder_la-encoder-types.lo `test -f 'encoder-types.cc' || echo '$(srcdir)/'`encoder-types.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_la-encoder-types.Tpo $(DEPDIR)/libde265_encoder_la-encoder-types.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='encoder-types.cc' object='libde265_encoder_la-encoder-types.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_la-encode.lo `test -f 'encode.cc' || echo '$(srcdir)/'`encode.cc +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_la-encoder-types.lo `test -f 'encoder-types.cc' || echo '$(srcdir)/'`encoder-types.cc libde265_encoder_la-encoder-params.lo: encoder-params.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_la-encoder-params.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_la-encoder-params.Tpo -c -o libde265_encoder_la-encoder-params.lo `test -f 'encoder-params.cc' || echo '$(srcdir)/'`encoder-params.cc @@ -504,6 +518,13 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_la-encoder-context.lo `test -f 'encoder-context.cc' || echo '$(srcdir)/'`encoder-context.cc +libde265_encoder_la-encoder-syntax.lo: encoder-syntax.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_la-encoder-syntax.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_la-encoder-syntax.Tpo -c -o libde265_encoder_la-encoder-syntax.lo `test -f 'encoder-syntax.cc' || echo '$(srcdir)/'`encoder-syntax.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_la-encoder-syntax.Tpo $(DEPDIR)/libde265_encoder_la-encoder-syntax.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='encoder-syntax.cc' object='libde265_encoder_la-encoder-syntax.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_la-encoder-syntax.lo `test -f 'encoder-syntax.cc' || echo '$(srcdir)/'`encoder-syntax.cc + libde265_encoder_la-encpicbuf.lo: encpicbuf.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_la-encpicbuf.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_la-encpicbuf.Tpo -c -o libde265_encoder_la-encpicbuf.lo `test -f 'encpicbuf.cc' || echo '$(srcdir)/'`encpicbuf.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_la-encpicbuf.Tpo $(DEPDIR)/libde265_encoder_la-encpicbuf.Plo @@ -801,6 +822,8 @@ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/CMakeLists.txt -> libde265-1.0.3.tar.gz/libde265/encoder/algo/CMakeLists.txt
Changed
@@ -9,11 +9,14 @@ cb-intra-inter.h cb-intra-inter.cc cb-mergeindex.h cb-mergeindex.cc tb-split.h tb-split.cc + tb-transform.h tb-transform.cc tb-intrapredmode.h tb-intrapredmode.cc + tb-rateestim.h tb-rateestim.cc pb-mv.h pb-mv.cc ) -add_library(algo STATIC ${algo_sources}) +add_library(algo OBJECT ${algo_sources}) +set(ALGO_OBJECTS $<TARGET_OBJECTS:algo> PARENT_SCOPE) if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") SET_TARGET_PROPERTIES(algo PROPERTIES COMPILE_FLAGS "-fPIC")
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/Makefile.am -> libde265-1.0.3.tar.gz/libde265/encoder/algo/Makefile.am
Changed
@@ -12,7 +12,9 @@ cb-intra-inter.h cb-intra-inter.cc \ cb-mergeindex.h cb-mergeindex.cc \ tb-split.h tb-split.cc \ + tb-transform.h tb-transform.cc \ tb-intrapredmode.h tb-intrapredmode.cc \ + tb-rateestim.h tb-rateestim.cc \ pb-mv.h pb-mv.cc EXTRA_DIST = \
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/Makefile.in -> libde265-1.0.3.tar.gz/libde265/encoder/algo/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,8 +90,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = libde265/encoder/algo -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -92,6 +100,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -109,7 +118,9 @@ libde265_encoder_algo_la-cb-intra-inter.lo \ libde265_encoder_algo_la-cb-mergeindex.lo \ libde265_encoder_algo_la-tb-split.lo \ + libde265_encoder_algo_la-tb-transform.lo \ libde265_encoder_algo_la-tb-intrapredmode.lo \ + libde265_encoder_algo_la-tb-rateestim.lo \ libde265_encoder_algo_la-pb-mv.lo libde265_encoder_algo_la_OBJECTS = \ $(am_libde265_encoder_algo_la_OBJECTS) @@ -199,6 +210,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -251,6 +263,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -333,6 +346,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -358,7 +372,9 @@ cb-intra-inter.h cb-intra-inter.cc \ cb-mergeindex.h cb-mergeindex.cc \ tb-split.h tb-split.cc \ + tb-transform.h tb-transform.cc \ tb-intrapredmode.h tb-intrapredmode.cc \ + tb-rateestim.h tb-rateestim.cc \ pb-mv.h pb-mv.cc EXTRA_DIST = \ @@ -380,7 +396,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libde265/encoder/algo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libde265/encoder/algo/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -430,7 +445,9 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_algo_la-ctb-qscale.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_algo_la-pb-mv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_algo_la-tb-intrapredmode.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_algo_la-tb-rateestim.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_algo_la-tb-split.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libde265_encoder_algo_la-tb-transform.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -523,6 +540,13 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_algo_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_algo_la-tb-split.lo `test -f 'tb-split.cc' || echo '$(srcdir)/'`tb-split.cc +libde265_encoder_algo_la-tb-transform.lo: tb-transform.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_algo_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_algo_la-tb-transform.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_algo_la-tb-transform.Tpo -c -o libde265_encoder_algo_la-tb-transform.lo `test -f 'tb-transform.cc' || echo '$(srcdir)/'`tb-transform.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_algo_la-tb-transform.Tpo $(DEPDIR)/libde265_encoder_algo_la-tb-transform.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tb-transform.cc' object='libde265_encoder_algo_la-tb-transform.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_algo_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_algo_la-tb-transform.lo `test -f 'tb-transform.cc' || echo '$(srcdir)/'`tb-transform.cc + libde265_encoder_algo_la-tb-intrapredmode.lo: tb-intrapredmode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_algo_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_algo_la-tb-intrapredmode.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_algo_la-tb-intrapredmode.Tpo -c -o libde265_encoder_algo_la-tb-intrapredmode.lo `test -f 'tb-intrapredmode.cc' || echo '$(srcdir)/'`tb-intrapredmode.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_algo_la-tb-intrapredmode.Tpo $(DEPDIR)/libde265_encoder_algo_la-tb-intrapredmode.Plo @@ -530,6 +554,13 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_algo_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_algo_la-tb-intrapredmode.lo `test -f 'tb-intrapredmode.cc' || echo '$(srcdir)/'`tb-intrapredmode.cc +libde265_encoder_algo_la-tb-rateestim.lo: tb-rateestim.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_algo_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_algo_la-tb-rateestim.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_algo_la-tb-rateestim.Tpo -c -o libde265_encoder_algo_la-tb-rateestim.lo `test -f 'tb-rateestim.cc' || echo '$(srcdir)/'`tb-rateestim.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_algo_la-tb-rateestim.Tpo $(DEPDIR)/libde265_encoder_algo_la-tb-rateestim.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tb-rateestim.cc' object='libde265_encoder_algo_la-tb-rateestim.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_algo_la_CXXFLAGS) $(CXXFLAGS) -c -o libde265_encoder_algo_la-tb-rateestim.lo `test -f 'tb-rateestim.cc' || echo '$(srcdir)/'`tb-rateestim.cc + libde265_encoder_algo_la-pb-mv.lo: pb-mv.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libde265_encoder_algo_la_CXXFLAGS) $(CXXFLAGS) -MT libde265_encoder_algo_la-pb-mv.lo -MD -MP -MF $(DEPDIR)/libde265_encoder_algo_la-pb-mv.Tpo -c -o libde265_encoder_algo_la-pb-mv.lo `test -f 'pb-mv.cc' || echo '$(srcdir)/'`pb-mv.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libde265_encoder_algo_la-pb-mv.Tpo $(DEPDIR)/libde265_encoder_algo_la-pb-mv.Plo @@ -746,6 +777,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/algo.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/algo.cc
Changed
@@ -22,3 +22,74 @@ #include "libde265/encoder/algo/algo.h" #include "libde265/encoder/encoder-context.h" + +#include <stdarg.h> + + + +#ifdef DE265_LOG_DEBUG +static int descendLevel = 0; + +void Algo::enter() +{ + if (logdebug_enabled(LogEncoder)) { + printf("%d",descendLevel+1); + for (int i=0;i<descendLevel+1;i++) { printf(" "); } + printf(":%s\n",name()); + } +} + +void Algo::descend(const enc_node* node, const char* option, ...) +{ + if (logdebug_enabled(LogEncoder)) { + descendLevel++; + printf("%d ",descendLevel); + for (int i=0;i<descendLevel;i++) { printf(" "); } + + va_list va; + va_start(va, option); + va_end(va); + + fprintf(stdout, ">%s(", name()); + vfprintf(stdout, option, va); + fprintf(stdout, ") %d;%d %dx%d %p\n",node->x,node->y,1<<node->log2Size,1<<node->log2Size,node); + } +} + +void Algo::ascend(const enc_node* resultNode, const char* fmt, ...) +{ + if (logdebug_enabled(LogEncoder)) { + if (fmt != NULL) { + printf("%d ",descendLevel); + for (int i=0;i<descendLevel;i++) { printf(" "); } + + va_list va; + va_start(va, fmt); + va_end(va); + + fprintf(stdout, "<%s(", name()); + vfprintf(stdout, fmt, va); + fprintf(stdout, ") <- %p\n",resultNode); + } + + descendLevel--; + } +} + +void Algo::leaf(const enc_node* node, const char* option, ...) +{ + if (logdebug_enabled(LogEncoder)) { + printf("%d ",descendLevel+1); + for (int i=0;i<descendLevel+1;i++) { printf(" "); } + + va_list va; + va_start(va, option); + va_end(va); + + fprintf(stdout, "%s(", name()); + vfprintf(stdout, option, va); + fprintf(stdout, ") %d;%d %dx%d\n",node->x,node->y,1<<node->log2Size,1<<node->log2Size); + } +} + +#endif
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/algo.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/algo.h
Changed
@@ -23,26 +23,47 @@ #ifndef ALGO_H #define ALGO_H -#include "libde265/encoder/encode.h" +#include "libde265/encoder/encoder-types.h" /* When entering the next recursion level, it is assumed that a valid CB structure is passed down. Ownership is transferred to the new algorithm. That algorithm passes back a (possibly different) - CB structure that the first algorithm should use. The original CB - structure might have been deleted in the called algorithm. + CB structure that the first algorithm should use. The receiving + algorithm will be the owner of the passed back algorithm. + The original CB structure might have been deleted in the called algorithm. + + When using CodingOptions, it is important to set the passed back + enc_node in the CodingOption (set_node()), so that the CodingOption + can correctly handle ownership and delete nodes as needed. The context_model_table passed down is at the current state. When the algorithm returns, the state should represent the state after running this algorithm. - - When returning from the algorithm, it is also assumed that the - ectx->img content (reconstruction and metadata) represent the - current state. When the algorithm tries several variants, it - has to restore the state to the selected variant. */ -class Algo_CB +class Algo +{ + public: + virtual ~Algo() { } + + virtual const char* name() const { return "noname"; } + +#ifdef DE265_LOG_DEBUG + void enter(); + void descend(const enc_node* node,const char* option_description, ...); + void ascend(const enc_node* resultNode=NULL, const char* fmt=NULL, ...); + void leaf(const enc_node* node,const char* option_description, ...); +#else + inline void enter() { } + inline void descend(const enc_node*,const char*, ...) { } + inline void ascend(const enc_node* resultNode=NULL,const char* fmt=NULL, ...) { } + inline void leaf(const enc_node*,const char*, ...) { } +#endif +}; + + +class Algo_CB : public Algo { public: virtual ~Algo_CB() { } @@ -59,7 +80,7 @@ }; -class Algo_PB +class Algo_PB : public Algo { public: virtual ~Algo_PB() { }
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-interpartmode.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-interpartmode.cc
Changed
@@ -48,46 +48,46 @@ case PART_NxN: s = 1<<(log2Size-1); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x ,y ,s,s); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x+s,y ,s,s); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 2, x ,y+s,s,s); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 3, x+s,y+s,s,s); + descend(cb,"NxN(1/4)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x ,y ,s,s); ascend(); + descend(cb,"NxN(2/4)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x+s,y ,s,s); ascend(); + descend(cb,"NxN(3/4)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 2, x ,y+s,s,s); ascend(); + descend(cb,"NxN(4/4)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 3, x+s,y+s,s,s); ascend(); break; case PART_2NxN: s = 1<<(log2Size-1); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x,y ,w,s); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x,y+s,w,s); + descend(cb,"2NxN(1/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x,y ,w,s); ascend(); + descend(cb,"2NxN(2/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x,y+s,w,s); ascend(); break; case PART_Nx2N: s = 1<<(log2Size-1); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x ,y,s,w); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x+s,y,s,w); + descend(cb,"Nx2N(1/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x ,y,s,w); ascend(); + descend(cb,"Nx2N(2/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x+s,y,s,w); ascend(); break; case PART_2NxnU: s = 1<<(log2Size-2); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x,y ,w,s); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x,y+s,w,w-s); + descend(cb,"2NxnU(1/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x,y ,w,s); ascend(); + descend(cb,"2NxnU(2/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x,y+s,w,w-s); ascend(); break; case PART_2NxnD: s = 1<<(log2Size-2); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x,y ,w,w-s); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x,y+w-s,w,s); + descend(cb,"2NxnD(1/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x,y ,w,w-s); ascend(); + descend(cb,"2NxnD(2/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x,y+w-s,w,s); ascend(); break; case PART_nLx2N: s = 1<<(log2Size-2); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x ,y,s ,w); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x+s,y,w-s,w); + descend(cb,"nLx2N(1/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x ,y,s ,w); ascend(); + descend(cb,"nLx2N(2/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x+s,y,w-s,w); ascend(); break; case PART_nRx2N: s = 1<<(log2Size-2); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x ,y,w-s,w); - cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x+w-s,y,s ,w); + descend(cb,"nRx2N(1/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 0, x ,y,w-s,w); ascend(); + descend(cb,"nRx2N(2/2)"); cb = mChildAlgo->analyze(ectx, ctxModel, cb, 1, x+w-s,y,s ,w); ascend(); break; }
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-interpartmode.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-interpartmode.h
Changed
@@ -25,7 +25,6 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -50,6 +49,8 @@ void setChildAlgo(Algo_PB* algo) { mChildAlgo = algo; } + virtual const char* name() const { return "cb-interpartmode"; } + protected: Algo_PB* mChildAlgo; @@ -98,6 +99,8 @@ context_model_table&, enc_cb* cb); + virtual const char* name() const { return "cb-interpartmode-fixed"; } + private: params mParams; };
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-intra-inter.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-intra-inter.cc
Changed
@@ -40,7 +40,7 @@ bool try_inter = (ectx->shdr->slice_type != SLICE_TYPE_I); bool debug_halt = try_inter; - //try_inter = false; + try_inter = false; //try_intra = !try_inter; // TODO HACK: no intra in inter frames if (ectx->imgdata->frame_number > 0) { @@ -50,10 +50,10 @@ // 0: intra // 1: inter - CodingOptions options(ectx,cb,ctxModel); + CodingOptions<enc_cb> options(ectx,cb,ctxModel); - CodingOption option_intra = options.new_option(try_intra); - CodingOption option_inter = options.new_option(try_inter); + CodingOption<enc_cb> option_intra = options.new_option(try_intra); + CodingOption<enc_cb> option_inter = options.new_option(try_inter); options.start(); @@ -69,13 +69,15 @@ if (option_inter) { option_inter.begin(); - cb_inter = option_inter.get_cb(); + cb_inter = option_inter.get_node(); cb_inter->PredMode = MODE_INTER; ectx->img->set_pred_mode(x,y, log2CbSize, MODE_INTER); enc_cb* cb_result; + descend(cb,"inter"); cb_result=mInterAlgo->analyze(ectx, option_inter.get_context(), cb_inter); + ascend(); if (cb_result->PredMode != MODE_SKIP) { CABAC_encoder_estim* cabac = option_inter.get_cabac(); @@ -88,7 +90,7 @@ cb_result->rate += rate_pred_mode_flag; } - option_inter.set_cb(cb_result); + option_inter.set_node(cb_result); option_inter.end(); } @@ -98,13 +100,15 @@ if (option_intra) { option_intra.begin(); - cb_intra = option_intra.get_cb(); + cb_intra = option_intra.get_node(); cb_intra->PredMode = MODE_INTRA; ectx->img->set_pred_mode(x,y, log2CbSize, MODE_INTRA); enc_cb* cb_result; + descend(cb,"intra"); cb_result=mIntraAlgo->analyze(ectx, option_intra.get_context(), cb_intra); + ascend(); if (ectx->shdr->slice_type != SLICE_TYPE_I) { CABAC_encoder_estim* cabac = option_intra.get_cabac(); @@ -117,12 +121,12 @@ cb_result->rate += rate_pred_mode_flag; } - option_intra.set_cb(cb_result); + option_intra.set_node(cb_result); option_intra.end(); } options.compute_rdo_costs(); - return options.return_best_rdo(); + return options.return_best_rdo_node(); }
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-intra-inter.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-intra-inter.h
Changed
@@ -25,7 +25,6 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -51,6 +50,8 @@ void setIntraChildAlgo(Algo_CB* algo) { mIntraAlgo = algo; } void setInterChildAlgo(Algo_CB* algo) { mInterAlgo = algo; } + virtual const char* name() const { return "cb-intra-inter"; } + protected: Algo_CB* mIntraAlgo; Algo_CB* mInterAlgo;
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-intrapartmode.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-intrapartmode.cc
Changed
@@ -42,8 +42,8 @@ const int x = cb_in->x; const int y = cb_in->y; - const bool can_use_NxN = ((log2CbSize == ectx->sps.Log2MinCbSizeY) && - (log2CbSize > ectx->sps.Log2MinTrafoSize)); + const bool can_use_NxN = ((log2CbSize == ectx->get_sps().Log2MinCbSizeY) && + (log2CbSize > ectx->get_sps().Log2MinTrafoSize)); // test all modes @@ -54,8 +54,8 @@ // 0: 2Nx2N (always checked) // 1: NxN (only checked at MinCbSize) - CodingOptions options(ectx,cb_in,ctxModel); - CodingOption option[2]; + CodingOptions<enc_cb> options(ectx,cb_in,ctxModel); + CodingOption<enc_cb> option[2]; option[0] = options.new_option(true); option[1] = options.new_option(can_use_NxN); @@ -65,7 +65,8 @@ if (option[p]) { option[p].begin(); - enc_cb* cb = option[p].get_cb(); + enc_cb* cb = option[p].get_node(); + *(cb_in->downPtr) = cb; // --- set intra prediction mode --- @@ -74,17 +75,23 @@ ectx->img->set_pred_mode(x,y, log2CbSize, cb->PredMode); // TODO: probably unnecessary ectx->img->set_PartMode (x,y, cb->PartMode); + // encode transform tree int IntraSplitFlag= (cb->PredMode == MODE_INTRA && cb->PartMode == PART_NxN); - int MaxTrafoDepth = ectx->sps.max_transform_hierarchy_depth_intra + IntraSplitFlag; + int MaxTrafoDepth = ectx->get_sps().max_transform_hierarchy_depth_intra + IntraSplitFlag; + + descend(cb,p==0 ? "2Nx2N" : "NxN"); + + enc_tb* tb = new enc_tb(x,y,log2CbSize,cb); + tb->downPtr = &cb->transform_tree; cb->transform_tree = mTBIntraPredModeAlgo->analyze(ectx, option[p].get_context(), - ectx->imgdata->input, NULL, cb, - x,y, x,y, log2CbSize, - 0, + ectx->imgdata->input, tb, 0, MaxTrafoDepth, IntraSplitFlag); + ascend(); + cb->distortion = cb->transform_tree->distortion; cb->rate = cb->transform_tree->rate; @@ -92,7 +99,7 @@ // rate for cu syntax logtrace(LogSymbols,"$1 part_mode=%d\n",cb->PartMode); - if (log2CbSize == ectx->sps.Log2MinCbSizeY) { + if (log2CbSize == ectx->get_sps().Log2MinCbSizeY) { int bin = (cb->PartMode==PART_2Nx2N); option[p].get_cabac()->reset(); option[p].get_cabac()->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+0, bin); @@ -103,7 +110,9 @@ } options.compute_rdo_costs(); - return options.return_best_rdo(); + enc_cb* bestCB = options.return_best_rdo_node(); + + return bestCB; } @@ -111,9 +120,6 @@ context_model_table& ctxModel, enc_cb* cb) { - std::cout << "CB-IntraPartMode in size=" << (1<<cb->log2Size) - << " hash=" << ctxModel.debug_dump() << "\n"; - enum PartMode PartMode = mParams.partMode(); @@ -125,7 +131,7 @@ // NxN can only be applied at minimum CB size. // If we are not at the minimum size, we have to use 2Nx2N. - if (PartMode==PART_NxN && log2CbSize != ectx->sps.Log2MinCbSizeY) { + if (PartMode==PART_NxN && log2CbSize != ectx->get_sps().Log2MinCbSizeY) { PartMode = PART_2Nx2N; } @@ -139,13 +145,17 @@ // encode transform tree int IntraSplitFlag= (cb->PredMode == MODE_INTRA && cb->PartMode == PART_NxN); - int MaxTrafoDepth = ectx->sps.max_transform_hierarchy_depth_intra + IntraSplitFlag; + int MaxTrafoDepth = ectx->get_sps().max_transform_hierarchy_depth_intra + IntraSplitFlag; + + enc_tb* tb = new enc_tb(x,y,log2CbSize,cb); + tb->blkIdx = 0; + tb->downPtr = &cb->transform_tree; + descend(cb,"fixed:%s", (PartMode==PART_2Nx2N ? "2Nx2N":"NxN")); cb->transform_tree = mTBIntraPredModeAlgo->analyze(ectx, ctxModel, - ectx->imgdata->input, NULL, cb, - cb->x,cb->y, cb->x,cb->y, log2CbSize, - 0, + ectx->imgdata->input, tb, 0, MaxTrafoDepth, IntraSplitFlag); + ascend(); // rate and distortion for this CB @@ -153,8 +163,6 @@ cb->distortion = cb->transform_tree->distortion; cb->rate = cb->transform_tree->rate; - std::cout << "SUM TB-tree hinter PartMode " << cb->rate << "\n"; - // rate for cu syntax @@ -166,15 +174,12 @@ //encode_part_mode(ectx,&estim, MODE_INTRA, PartMode, 0); logtrace(LogSymbols,"$1 part_mode=%d\n",PartMode); - if (log2CbSize == ectx->sps.Log2MinCbSizeY) { + if (log2CbSize == ectx->get_sps().Log2MinCbSizeY) { int bin = (PartMode==PART_2Nx2N); estim.write_CABAC_bit(CONTEXT_MODEL_PART_MODE+0, bin); } cb->rate += estim.getRDBits(); - std::cout << "CB-IntraPartMode out size=" << (1<<cb->log2Size) - << " hash=" << ctxModel.debug_dump() << "\n"; - return cb; }
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-intrapartmode.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-intrapartmode.h
Changed
@@ -25,7 +25,7 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" +#include "libde265/encoder/encoder-types.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -83,6 +83,8 @@ void setChildAlgo(Algo_TB_IntraPredMode* algo) { mTBIntraPredModeAlgo = algo; } + virtual const char* name() const { return "cb-intrapartmode"; } + protected: Algo_TB_IntraPredMode* mTBIntraPredModeAlgo; }; @@ -95,6 +97,8 @@ virtual enc_cb* analyze(encoder_context*, context_model_table&, enc_cb* cb); + + virtual const char* name() const { return "cb-intrapartmode-bruteforce"; } }; @@ -135,6 +139,8 @@ context_model_table& ctxModel, enc_cb* cb); + virtual const char* name() const { return "cb-intrapartmode-fixed"; } + private: params mParams; };
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-mergeindex.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-mergeindex.cc
Changed
@@ -23,6 +23,7 @@ #include "libde265/encoder/algo/cb-mergeindex.h" #include "libde265/encoder/encoder-context.h" +#include "libde265/encoder/encoder-syntax.h" #include <assert.h> #include <limits> #include <math.h> @@ -38,21 +39,21 @@ assert(cb->PredMode==MODE_SKIP); // TODO: || (cb->PredMode==MODE_INTER && cb->inter.skip_flag)); - MotionVectorSpec mergeCandList[5]; + PBMotion mergeCandList[5]; int partIdx = 0; int cbSize = 1 << cb->log2Size; - get_merge_candidate_list(ectx, ectx->shdr, ectx->img, - cb->x, cb->y, // xC/yC - cb->x, cb->y, // xP/yP - cbSize, // nCS - cbSize,cbSize, // nPbW/nPbH - partIdx, // partIdx - mergeCandList); + get_merge_candidate_list_from_tree(ectx, ectx->shdr, + cb->x, cb->y, // xC/yC + cb->x, cb->y, // xP/yP + cbSize, // nCS + cbSize,cbSize, // nPbW/nPbH + partIdx, // partIdx + mergeCandList); - motion_spec& spec = cb->inter.pb[partIdx].spec; + PBMotionCoding& spec = cb->inter.pb[partIdx].spec; spec.merge_flag = 1; // we use merge mode spec.merge_idx = 0; @@ -75,11 +76,12 @@ // TODO: fake motion data - const MotionVectorSpec& vec = mergeCandList[spec.merge_idx]; + const PBMotion& vec = mergeCandList[spec.merge_idx]; cb->inter.pb[partIdx].motion = vec; - ectx->img->set_mv_info(cb->x,cb->y, 1<<cb->log2Size,1<<cb->log2Size, vec); + //ectx->img->set_mv_info(cb->x,cb->y, 1<<cb->log2Size,1<<cb->log2Size, vec); + /* generate_inter_prediction_samples(ectx, ectx->shdr, ectx->prediction, cb->x,cb->y, // int xC,int yC, 0,0, // int xB,int yB, @@ -87,6 +89,7 @@ 1<<cb->log2Size, 1<<cb->log2Size, // int nPbW,int nPbH, &vec); + */ generate_inter_prediction_samples(ectx, ectx->shdr, ectx->img, cb->x,cb->y, // int xC,int yC, @@ -96,19 +99,31 @@ 1<<cb->log2Size, // int nPbW,int nPbH, &vec); + /* + printBlk("merge prediction:", + ectx->img->get_image_plane_at_pos(0, cb->x,cb->y), 1<<cb->log2Size, + ectx->img->get_image_stride(0), + "merge "); + */ + // estimate rate for sending merge index //CABAC_encoder_estim cabac; //cabac.write_bits(); int IntraSplitFlag = 0; - int MaxTrafoDepth = ectx->sps.max_transform_hierarchy_depth_inter; + int MaxTrafoDepth = ectx->get_sps().max_transform_hierarchy_depth_inter; if (mCodeResidual) { assert(false); + descend(cb,"with residual"); + assert(false); + /* TODO cb->transform_tree = mTBSplit->analyze(ectx,ctxModel, ectx->imgdata->input, NULL, cb, cb->x,cb->y,cb->x,cb->y, cb->log2Size,0, 0, MaxTrafoDepth, IntraSplitFlag); + */ + ascend(); cb->inter.rqt_root_cbf = ! cb->transform_tree->isZeroBlock(); @@ -117,7 +132,7 @@ } else { const de265_image* input = ectx->imgdata->input; - de265_image* img = ectx->prediction; + //de265_image* img = ectx->prediction; int x0 = cb->x; int y0 = cb->y; int tbSize = 1<<cb->log2Size; @@ -126,10 +141,32 @@ cabac.set_context_models(&ctxModel); encode_merge_idx(ectx, &cabac, spec.merge_idx); - cb->distortion = compute_distortion_ssd(input, img, x0,y0, cb->log2Size, 0); + leaf(cb,"no residual"); + cb->rate = cabac.getRDBits(); cb->inter.rqt_root_cbf = 0; + + + enc_tb* tb = new enc_tb(x0,y0,cb->log2Size,cb); + tb->downPtr = &cb->transform_tree; + cb->transform_tree = tb; + + tb->reconstruct(ectx, ectx->img); // reconstruct luma + + /* + printBlk("distortion input:", + input->get_image_plane_at_pos(0,x0,y0), 1<<cb->log2Size, + input->get_image_stride(0), + "input "); + + printBlk("distortion prediction:", + ectx->img->get_image_plane_at_pos(0,x0,y0), 1<<cb->log2Size, + ectx->img->get_image_stride(0), + "pred "); + */ + + cb->distortion = compute_distortion_ssd(input, ectx->img, x0,y0, cb->log2Size, 0); } //printf("%d;%d rqt_root_cbf=%d\n",cb->x,cb->y,cb->inter.rqt_root_cbf);
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-mergeindex.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-mergeindex.h
Changed
@@ -25,7 +25,6 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -52,6 +51,8 @@ void setChildAlgo(Algo_TB_Split* algo) { mTBSplit = algo; } // TODO void setInterChildAlgo(Algo_CB_IntraPartMode* algo) { mInterPartModeAlgo = algo; } + virtual const char* name() const { return "cb-mergeindex"; } + protected: Algo_TB_Split* mTBSplit;
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-skip.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-skip.cc
Changed
@@ -23,6 +23,7 @@ #include "libde265/encoder/algo/cb-skip.h" #include "libde265/encoder/algo/coding-options.h" +#include "libde265/encoder/encoder-syntax.h" #include "libde265/encoder/encoder-context.h" #include <assert.h> #include <limits> @@ -38,9 +39,11 @@ bool try_skip = (ectx->shdr->slice_type != SLICE_TYPE_I); bool try_nonskip = true; - CodingOptions options(ectx,cb,ctxModel); - CodingOption option_skip = options.new_option(try_skip); - CodingOption option_nonskip = options.new_option(try_nonskip); + //try_nonskip = !try_skip; + + CodingOptions<enc_cb> options(ectx,cb,ctxModel); + CodingOption<enc_cb> option_skip = options.new_option(try_skip); + CodingOption<enc_cb> option_nonskip = options.new_option(try_nonskip); options.start(); for (int i=0;i<CONTEXT_MODEL_TABLE_LENGTH;i++) { @@ -48,10 +51,10 @@ } if (option_skip) { - CodingOption& opt = option_skip; + CodingOption<enc_cb>& opt = option_skip; opt.begin(); - enc_cb* cb = opt.get_cb(); + enc_cb* cb = opt.get_node(); // calc rate for skip flag (=true) @@ -67,18 +70,20 @@ // encode CB + descend(cb,"yes"); cb = mSkipAlgo->analyze(ectx, opt.get_context(), cb); + ascend(); // add rate for PredMode cb->rate += rate_pred_mode; - opt.set_cb(cb); + opt.set_node(cb); opt.end(); } if (option_nonskip) { - CodingOption& opt = option_nonskip; - enc_cb* cb = opt.get_cb(); + CodingOption<enc_cb>& opt = option_nonskip; + enc_cb* cb = opt.get_node(); opt.begin(); @@ -93,14 +98,17 @@ cabac->reset(); } + descend(cb,"no"); cb = mNonSkipAlgo->analyze(ectx, opt.get_context(), cb); + ascend(); + // add rate for PredMode cb->rate += rate_pred_mode; - opt.set_cb(cb); + opt.set_node(cb); opt.end(); } options.compute_rdo_costs(); - return options.return_best_rdo(); + return options.return_best_rdo_node(); }
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-skip.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-skip.h
Changed
@@ -25,7 +25,6 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -53,6 +52,8 @@ void setNonSkipAlgo(Algo_CB* algo) { mNonSkipAlgo = algo; } + const char* name() const { return "cb-skip"; } + protected: Algo_CB_MergeIndex* mSkipAlgo; Algo_CB* mNonSkipAlgo; @@ -64,6 +65,8 @@ virtual enc_cb* analyze(encoder_context*, context_model_table&, enc_cb* cb); + + const char* name() const { return "cb-skip-bruteforce"; } }; #endif
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-split.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-split.cc
Changed
@@ -24,6 +24,7 @@ #include "libde265/encoder/algo/cb-split.h" #include "libde265/encoder/algo/coding-options.h" #include "libde265/encoder/encoder-context.h" +#include "libde265/encoder/encoder-syntax.h" #include <assert.h> #include <limits> #include <math.h> @@ -46,11 +47,15 @@ // encode all 4 children and sum their distortions and rates for (int i=0;i<4;i++) { + cb->children[i] = NULL; + } + + for (int i=0;i<4;i++) { int child_x = cb->x + ((i&1) << (cb->log2Size-1)); int child_y = cb->y + ((i>>1) << (cb->log2Size-1)); if (child_x>=w || child_y>=h) { - cb->children[i] = NULL; + // NOP } else { enc_cb* childCB = new enc_cb; @@ -59,8 +64,12 @@ childCB->x = child_x; childCB->y = child_y; + childCB->parent = cb; + childCB->downPtr = &cb->children[i]; + descend(cb,"yes %d/4",i+1); cb->children[i] = analyze(ectx, ctxModel, childCB); + ascend(); cb->distortion += cb->children[i]->distortion; cb->rate += cb->children[i]->rate; @@ -81,7 +90,7 @@ // --- prepare coding options --- - const SplitType split_type = get_split_type(&ectx->sps, + const SplitType split_type = get_split_type(&ectx->get_sps(), cb_input->x, cb_input->y, cb_input->log2Size); @@ -92,25 +101,32 @@ //if (can_split_CB) { can_nosplit_CB=false; } // TODO TMP //if (can_nosplit_CB) { can_split_CB=false; } // TODO TMP - CodingOptions options(ectx, cb_input, ctxModel); + CodingOptions<enc_cb> options(ectx, cb_input, ctxModel); - CodingOption option_split = options.new_option(can_split_CB); - CodingOption option_no_split = options.new_option(can_nosplit_CB); + CodingOption<enc_cb> option_no_split = options.new_option(can_nosplit_CB); + CodingOption<enc_cb> option_split = options.new_option(can_split_CB); options.start(); + /* + cb_input->writeSurroundingMetadata(ectx, ectx->img, + enc_node::METADATA_CT_DEPTH, // for estimation cb-split bits + cb_input->get_rectangle()); + */ + // --- encode without splitting --- if (option_no_split) { - CodingOption& opt = option_no_split; // abbrev. + CodingOption<enc_cb>& opt = option_no_split; // abbrev. opt.begin(); - enc_cb* cb = opt.get_cb(); + enc_cb* cb = opt.get_node(); + *cb_input->downPtr = cb; // set CB size in image data-structure - ectx->img->set_ctDepth(cb->x,cb->y,cb->log2Size, cb->ctDepth); - ectx->img->set_log2CbSize(cb->x,cb->y,cb->log2Size, true); + //ectx->img->set_ctDepth(cb->x,cb->y,cb->log2Size, cb->ctDepth); + //ectx->img->set_log2CbSize(cb->x,cb->y,cb->log2Size, true); /* We set QP here, because this is required at in non-split CBs only. */ @@ -118,7 +134,10 @@ // analyze subtree assert(mChildAlgo); + + descend(cb,"no"); cb = mChildAlgo->analyze(ectx, opt.get_context(), cb); + ascend(); // add rate for split flag if (split_type == OptionalSplit) { @@ -126,7 +145,7 @@ cb->rate += opt.get_cabac_rate(); } - opt.set_cb(cb); + opt.set_node(cb); opt.end(); } @@ -135,7 +154,9 @@ if (option_split) { option_split.begin(); - enc_cb* cb = option_split.get_cb(); + enc_cb* cb = option_split.get_node(); + *cb_input->downPtr = cb; + cb = encode_cb_split(ectx, option_split.get_context(), cb); // add rate for split flag @@ -144,12 +165,14 @@ cb->rate += option_split.get_cabac_rate(); } - option_split.set_cb(cb); + option_split.set_node(cb); option_split.end(); } options.compute_rdo_costs(); - enc_cb* bestCB = options.return_best_rdo(); + enc_cb* bestCB = options.return_best_rdo_node(); + + //bestCB->debug_assertTreeConsistency(ectx->img); return bestCB; }
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/cb-split.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/cb-split.h
Changed
@@ -25,7 +25,6 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -65,6 +64,8 @@ // has two child algorithms, depending on the coding mode. void setChildAlgo(Algo_CB* algo) { mChildAlgo = algo; } + const char* name() const { return "cb-split"; } + protected: Algo_CB* mChildAlgo; @@ -80,6 +81,8 @@ virtual enc_cb* analyze(encoder_context*, context_model_table&, enc_cb* cb); + + const char* name() const { return "cb-split-bruteforce"; } }; #endif
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/coding-options.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/coding-options.cc
Changed
@@ -24,25 +24,28 @@ #include "libde265/encoder/encoder-context.h" -CodingOptions::CodingOptions(encoder_context* ectx, enc_cb* cb, context_model_table& tab) +template <class node> +CodingOptions<node>::CodingOptions(encoder_context* ectx, node* _node, context_model_table& tab) { - mCBInput = cb; + //mCBMode = true; + mInputNode = _node; mContextModelInput = &tab; - mCurrentlyReconstructedOption=-1; mBestRDO=-1; mECtx = ectx; } -CodingOptions::~CodingOptions() +template <class node> +CodingOptions<node>::~CodingOptions() { } -CodingOption CodingOptions::new_option(bool active) +template <class node> +CodingOption<node> CodingOptions<node>::new_option(bool active) { if (!active) { - return CodingOption(); + return CodingOption<node>(); } @@ -50,15 +53,16 @@ bool firstOption = mOptions.empty(); if (firstOption) { - opt.cb = mCBInput; + opt.mNode = mInputNode; } else { - opt.cb = new enc_cb(*mCBInput); + opt.mNode = new node(*mInputNode); } - opt.context = *mContextModelInput; + opt.context = *mContextModelInput; + opt.computed = false; - CodingOption option(this, mOptions.size()); + CodingOption<node> option(this, mOptions.size()); mOptions.push_back( std::move(opt) ); @@ -66,7 +70,8 @@ } -void CodingOptions::start(enum RateEstimationMethod rateMethod) +template <class node> +void CodingOptions<node>::start(enum RateEstimationMethod rateMethod) { /* We don't need the input context model anymore. Releasing it now may save a copy during a later decouple(). @@ -102,33 +107,20 @@ } -void CodingOption::begin() -{ - mParent->cabac->reset(); - mParent->cabac->set_context_models( &get_context() ); - - if (mParent->mCurrentlyReconstructedOption >= 0) { - mParent->mOptions[mParent->mCurrentlyReconstructedOption].cb->save(mParent->mECtx->img); - } - - mParent->mCurrentlyReconstructedOption = mOptionIdx; -} - -void CodingOption::end() -{ - assert(mParent->mCurrentlyReconstructedOption == mOptionIdx); -} - - -void CodingOptions::compute_rdo_costs() +template <class node> +void CodingOptions<node>::compute_rdo_costs() { for (int i=0;i<mOptions.size();i++) { - mOptions[i].rdoCost = mOptions[i].cb->distortion + mECtx->lambda * mOptions[i].cb->rate; + if (mOptions[i].computed) { + //printf("compute_rdo_costs %d: %f\n",i, mOptions[i].mNode->rate); + mOptions[i].rdoCost = mOptions[i].mNode->distortion + mECtx->lambda * mOptions[i].mNode->rate; + } } } -enc_cb* CodingOptions::return_best_rdo() +template <class node> +int CodingOptions<node>::find_best_rdo_index() { assert(mOptions.size()>0); @@ -138,20 +130,29 @@ int bestRDO=-1; for (int i=0;i<mOptions.size();i++) { - float cost = mOptions[i].rdoCost; - if (first || cost < bestRDOCost) { - bestRDOCost = cost; - first = false; - bestRDO = i; + if (mOptions[i].computed) { + float cost = mOptions[i].rdoCost; + + //printf("option %d cost: %f\n",i,cost); + + if (first || cost < bestRDOCost) { + bestRDOCost = cost; + first = false; + bestRDO = i; + } } } + return bestRDO; +} - assert(bestRDO>=0); - if (bestRDO != mCurrentlyReconstructedOption) { - mOptions[bestRDO].cb->restore(mECtx->img); - } +template <class node> +node* CodingOptions<node>::return_best_rdo_node() +{ + int bestRDO = find_best_rdo_index(); + + assert(bestRDO>=0); *mContextModelInput = mOptions[bestRDO].context; @@ -161,10 +162,41 @@ for (int i=0;i<mOptions.size();i++) { if (i != bestRDO) { - delete mOptions[i].cb; - mOptions[i].cb = NULL; + delete mOptions[i].mNode; + mOptions[i].mNode = NULL; } } - return mOptions[bestRDO].cb; + return mOptions[bestRDO].mNode; } + + +template <class node> +void CodingOption<node>::begin() +{ + assert(mParent); + assert(mParent->cabac); // did you call CodingOptions.start() ? + + mParent->cabac->reset(); + mParent->cabac->set_context_models( &get_context() ); + + mParent->mOptions[mOptionIdx].computed = true; + + // link this node into the coding tree + + node* n = get_node(); + *(n->downPtr) = n; +} + + +template <class node> +void CodingOption<node>::end() +{ +} + + +template class CodingOptions<enc_tb>; +template class CodingOptions<enc_cb>; + +template class CodingOption<enc_tb>; +template class CodingOption<enc_cb>;
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/coding-options.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/coding-options.h
Changed
@@ -23,25 +23,28 @@ #ifndef CODING_OPTIONS_H #define CODING_OPTIONS_H -#include "libde265/encoder/encode.h" +#include "libde265/encoder/encoder-types.h" -class CodingOption; +template <class node> class CodingOption; +template <class node> class CodingOptions { public: - CodingOptions(encoder_context*, enc_cb*, context_model_table& tab); + CodingOptions(encoder_context*, node*, context_model_table& tab); ~CodingOptions(); + typedef CodingOption<node> Option; + // --- init --- call before object use - CodingOption new_option(bool active=true); + CodingOption<node> new_option(bool active=true); enum RateEstimationMethod { - Rate_Default, + Rate_Default, // take default value from encoder_context Rate_AdaptiveContext, Rate_FixedContext }; @@ -58,27 +61,30 @@ // --- end processing --- do not call any function after this one /* Return the CB with the lowest RDO cost. All other CBs are destroyed. - If the current reconstruction and metadata are not from the returned CB, - the data from the returned CB is reconstructed. + If the current metadata stored in the image are not from the returned block, + its metadata flags are set to zero. */ - enc_cb* return_best_rdo(); + node* return_best_rdo_node(); private: struct CodingOptionData { - enc_cb* cb; + node* mNode; + context_model_table context; bool mOptionActive; + bool computed; float rdoCost; }; encoder_context* mECtx; - enc_cb* mCBInput; + bool mCBMode; + node* mInputNode; + context_model_table* mContextModelInput; - int mCurrentlyReconstructedOption; int mBestRDO; std::vector<CodingOptionData> mOptions; @@ -87,10 +93,13 @@ CABAC_encoder_estim_constant cabac_constant; CABAC_encoder_estim* cabac; - friend class CodingOption; + friend class CodingOption<node>; + + int find_best_rdo_index(); }; +template <class node> class CodingOption { public: @@ -99,14 +108,22 @@ mOptionIdx = 0; } - enc_cb* get_cb() { return mParent->mOptions[mOptionIdx].cb; } - void set_cb(enc_cb* cb) { mParent->mOptions[mOptionIdx].cb = cb; } + node* get_node() { return mParent->mOptions[mOptionIdx].mNode; } + void set_node(node* _node) { + if (_node != mParent->mOptions[mOptionIdx].mNode) { + //printf("delete TB %p\n", mParent->mOptions[mOptionIdx].tb); + //delete mParent->mOptions[mOptionIdx].mNode; + } + mParent->mOptions[mOptionIdx].mNode = _node; + } context_model_table& get_context() { return mParent->mOptions[mOptionIdx].context; } + /** @return True if the option is active. + */ operator bool() const { return mParent; } - /* When modifying the reconstruction image or metadata, you have to + /* When modifying the metadata stored in the image, you have to encapsulate the modification between these two functions to ensure that the correct reconstruction will be active after return_best_rdo(). */ @@ -121,13 +138,13 @@ float get_cabac_rate() const { return mParent->cabac->getRDBits(); } private: - CodingOption(class CodingOptions* parent, int idx) + CodingOption(class CodingOptions<node>* parent, int idx) : mParent(parent), mOptionIdx(idx) { } - class CodingOptions* mParent; + class CodingOptions<node>* mParent; int mOptionIdx; - friend class CodingOptions; + friend class CodingOptions<node>; };
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/ctb-qscale.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/ctb-qscale.cc
Changed
@@ -33,21 +33,29 @@ enc_cb* Algo_CTB_QScale_Constant::analyze(encoder_context* ectx, context_model_table& ctxModel, - int ctb_x,int ctb_y) + int x,int y) { enc_cb* cb = new enc_cb(); - cb->log2Size = ectx->sps.Log2CtbSizeY; + cb->log2Size = ectx->get_sps().Log2CtbSizeY; cb->ctDepth = 0; - cb->x = ctb_x; - cb->y = ctb_y; + cb->x = x; + cb->y = y; + cb->downPtr = ectx->ctbs.getCTBRootPointer(x,y); + *cb->downPtr = cb; - ectx->img->set_QPY(ctb_x,ctb_y, cb->log2Size, ectx->active_qp); + cb->qp = ectx->active_qp; - // write currently unused coding options to image - ectx->img->set_cu_transquant_bypass(ctb_x,ctb_y,cb->log2Size, cb->cu_transquant_bypass_flag); - ectx->img->set_pcm_flag(ctb_x,ctb_y,cb->log2Size, cb->pcm_flag); + // write currently unused coding options + cb->cu_transquant_bypass_flag = false; + cb->pcm_flag = false; assert(mChildAlgo); - return mChildAlgo->analyze(ectx,ctxModel,cb); + descend(cb, "Q=%d",ectx->active_qp); + enc_cb* result_cb = mChildAlgo->analyze(ectx,ctxModel,cb); + ascend(); + + *cb->downPtr = result_cb; + + return result_cb; }
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/ctb-qscale.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/ctb-qscale.h
Changed
@@ -25,7 +25,7 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" +#include "libde265/encoder/algo/algo.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -54,7 +54,7 @@ // ========== choose a qscale at CTB level ========== -class Algo_CTB_QScale +class Algo_CTB_QScale : public Algo { public: Algo_CTB_QScale() : mChildAlgo(NULL) { } @@ -99,6 +99,8 @@ int getQP() const { return mParams.mQP; } + const char* name() const { return "ctb-qscale-constant"; } + private: params mParams; };
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/pb-mv.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/pb-mv.cc
Changed
@@ -49,8 +49,8 @@ //printf("%d/%d: [%d;%d] [%d;%d]\n",cb->x,cb->y, mvp[0].x,mvp[0].y, mvp[1].x,mvp[1].y); - motion_spec& spec = cb->inter.pb[PBidx].spec; - MotionVectorSpec& vec = cb->inter.pb[PBidx].motion; + PBMotionCoding& spec = cb->inter.pb[PBidx].spec; + PBMotion& vec = cb->inter.pb[PBidx].motion; spec.merge_flag = 0; spec.merge_idx = 0; @@ -93,6 +93,7 @@ ectx->img->set_mv_info(x,y,w,h, vec); + /* TMP REMOVE: ectx->prediction does not exist anymore generate_inter_prediction_samples(ectx, ectx->shdr, ectx->prediction, cb->x,cb->y, // int xC,int yC, 0,0, // int xB,int yB, @@ -100,18 +101,22 @@ 1<<cb->log2Size, 1<<cb->log2Size, // int nPbW,int nPbH, &vec); + */ // TODO estimate rate for sending MV int IntraSplitFlag = 0; - int MaxTrafoDepth = ectx->sps.max_transform_hierarchy_depth_inter; + int MaxTrafoDepth = ectx->get_sps().max_transform_hierarchy_depth_inter; mCodeResidual=true; if (mCodeResidual) { assert(mTBSplitAlgo); + assert(false); + /* cb->transform_tree = mTBSplitAlgo->analyze(ectx,ctxModel, ectx->imgdata->input, NULL, cb, cb->x,cb->y,cb->x,cb->y, cb->log2Size,0, 0, MaxTrafoDepth, IntraSplitFlag); + */ cb->inter.rqt_root_cbf = ! cb->transform_tree->isZeroBlock(); @@ -120,6 +125,7 @@ } else { const de265_image* input = ectx->imgdata->input; + /* TODO TMP REMOVE: prediction does not exist anymore de265_image* img = ectx->prediction; int x0 = cb->x; int y0 = cb->y; @@ -129,6 +135,7 @@ cb->rate = 5; // fake (MV) cb->inter.rqt_root_cbf = 0; + */ } return cb; @@ -174,8 +181,8 @@ 0, 0, // int refIdx, int partIdx, mvp); - motion_spec& spec = cb->inter.pb[PBidx].spec; - MotionVectorSpec& vec = cb->inter.pb[PBidx].motion; + PBMotionCoding& spec = cb->inter.pb[PBidx].spec; + PBMotion& vec = cb->inter.pb[PBidx].motion; spec.merge_flag = 0; spec.merge_idx = 0; @@ -258,6 +265,7 @@ ectx->img->set_mv_info(x,y,pbW,pbH, vec); + /* TMP REMOVE: ectx->prediction does not exist anymore generate_inter_prediction_samples(ectx, ectx->shdr, ectx->prediction, cb->x,cb->y, // int xC,int yC, 0,0, // int xB,int yB, @@ -265,6 +273,7 @@ 1<<cb->log2Size, 1<<cb->log2Size, // int nPbW,int nPbH, &vec); + */ // --- create residual --- @@ -273,13 +282,16 @@ // TODO estimate rate for sending MV int IntraSplitFlag = 0; - int MaxTrafoDepth = ectx->sps.max_transform_hierarchy_depth_inter; + int MaxTrafoDepth = ectx->get_sps().max_transform_hierarchy_depth_inter; mCodeResidual=true; if (mCodeResidual) { + assert(false); + /* cb->transform_tree = mTBSplitAlgo->analyze(ectx,ctxModel, ectx->imgdata->input, NULL, cb, cb->x,cb->y,cb->x,cb->y, cb->log2Size,0, 0, MaxTrafoDepth, IntraSplitFlag); + */ cb->inter.rqt_root_cbf = ! cb->transform_tree->isZeroBlock();
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/pb-mv.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/pb-mv.h
Changed
@@ -25,7 +25,6 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h"
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/tb-intrapredmode.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/tb-intrapredmode.cc
Changed
@@ -21,9 +21,9 @@ */ -#include "libde265/encoder/analyze.h" #include "libde265/encoder/encoder-context.h" #include "libde265/encoder/algo/tb-split.h" +#include "libde265/encoder/algo/coding-options.h" #include <assert.h> #include <limits> #include <math.h> @@ -31,65 +31,38 @@ #include <iostream> -enum IntraPredMode find_best_intra_mode(de265_image& img,int x0,int y0, int log2BlkSize, int cIdx, - const uint8_t* ref, int stride) +float get_intra_pred_mode_bits(const enum IntraPredMode candidates[3], + enum IntraPredMode intraMode, + enum IntraPredMode intraModeC, + context_model_table& context_models, + bool includeChroma) { - //return INTRA_ANGULAR_20; + float rate; + int enc_bin; - enum IntraPredMode best_mode; - int min_sad=-1; + /**/ if (candidates[0]==intraMode) { rate = 1; enc_bin=1; } + else if (candidates[1]==intraMode) { rate = 2; enc_bin=1; } + else if (candidates[2]==intraMode) { rate = 2; enc_bin=1; } + else { rate = 5; enc_bin=0; } - int candidates[3]; + CABAC_encoder_estim estim; + estim.set_context_models(&context_models); + logtrace(LogSymbols,"$1 prev_intra_luma_pred_flag=%d\n",enc_bin); + estim.write_CABAC_bit(CONTEXT_MODEL_PREV_INTRA_LUMA_PRED_FLAG, enc_bin); - const seq_parameter_set* sps = &img.sps; + // TODO: currently we make the chroma-pred-mode decision for each part even + // in NxN part mode. Since we always set this to the same value, it does not + // matter. However, we should only add the rate for it once (for blkIdx=0). + if (includeChroma) { + assert(intraMode == intraModeC); - fillIntraPredModeCandidates(candidates, x0,y0, - sps->getPUIndexRS(x0,y0), - x0>0, y0>0, &img); - - // --- test candidates first --- - - for (int idx=0;idx<3;idx++) { - enum IntraPredMode mode = (enum IntraPredMode)candidates[idx]; - decode_intra_prediction(&img, x0,y0, (enum IntraPredMode)mode, 1<<log2BlkSize, cIdx); - - uint32_t distortion = SSD(ref,stride, - img.get_image_plane_at_pos(cIdx, x0,y0), img.get_image_stride(cIdx), - 1<<log2BlkSize, 1<<log2BlkSize); - - int sad=distortion; - - sad *= 0.5; - //sad *= 0.9; - - if (mode==0 || sad<min_sad) { - min_sad = sad; - best_mode = (enum IntraPredMode)mode; - } + logtrace(LogSymbols,"$1 intra_chroma_pred_mode=%d\n",0); + estim.write_CABAC_bit(CONTEXT_MODEL_INTRA_CHROMA_PRED_MODE,0); } + rate += estim.getRDBits(); - - // --- test all modes --- - - for (int idx=0;idx<35;idx++) { - enum IntraPredMode mode = (enum IntraPredMode)idx; //candidates[idx]; - decode_intra_prediction(&img, x0,y0, (enum IntraPredMode)mode, 1<<log2BlkSize, cIdx); - - - uint32_t distortion = SSD(ref,stride, - img.get_image_plane_at_pos(cIdx, x0,y0), img.get_image_stride(cIdx), - 1<<log2BlkSize, 1<<log2BlkSize); - - int sad=distortion; - - if (min_sad<0 || sad<min_sad) { - min_sad = sad; - best_mode = (enum IntraPredMode)mode; - } - } - - return best_mode; + return rate; } @@ -97,10 +70,12 @@ float estim_TB_bitrate(const encoder_context* ectx, const de265_image* input, - int x0,int y0, int log2BlkSize, + const enc_tb* tb, enum TBBitrateEstimMethod method) { - int blkSize = 1<<log2BlkSize; + int x0 = tb->x; + int y0 = tb->y; + int blkSize = 1 << tb->log2Size; float distortion; @@ -109,35 +84,68 @@ case TBBitrateEstim_SSD: return SSD(input->get_image_plane_at_pos(0, x0,y0), input->get_image_stride(0), - ectx->img->get_image_plane_at_pos(0, x0,y0), - ectx->img->get_image_stride(0), - 1<<log2BlkSize, 1<<log2BlkSize); + tb->intra_prediction[0]->get_buffer_u8(), + tb->intra_prediction[0]->getStride(), + blkSize, blkSize); break; case TBBitrateEstim_SAD: return SAD(input->get_image_plane_at_pos(0, x0,y0), input->get_image_stride(0), - ectx->img->get_image_plane_at_pos(0, x0,y0), - ectx->img->get_image_stride(0), - 1<<log2BlkSize, 1<<log2BlkSize); + tb->intra_prediction[0]->get_buffer_u8(), + tb->intra_prediction[0]->getStride(), + blkSize, blkSize); break; case TBBitrateEstim_SATD_DCT: case TBBitrateEstim_SATD_Hadamard: { - int16_t coeffs[32*32]; - int16_t diff[32*32]; + int16_t coeffs[64*64]; + int16_t diff[64*64]; + + // Usually, TBs are max. 32x32 big. However, it may be that this is still called + // for 64x64 blocks, because we are sometimes computing an intra pred mode for a + // whole CTB at once. + assert(blkSize <= 64); diff_blk(diff,blkSize, input->get_image_plane_at_pos(0, x0,y0), input->get_image_stride(0), - ectx->img->get_image_plane_at_pos(0, x0,y0), ectx->img->get_image_stride(0), + tb->intra_prediction[0]->get_buffer_u8(), + tb->intra_prediction[0]->getStride(), blkSize); - if (method == TBBitrateEstim_SATD_Hadamard) { - ectx->acceleration.hadamard_transform_8[log2BlkSize-2](coeffs, diff, &diff[blkSize] - &diff[0]); + void (*transform)(int16_t *coeffs, const int16_t *src, ptrdiff_t stride); + + + if (tb->log2Size == 6) { + // hack for 64x64 blocks: compute 4 times 32x32 blocks + + if (method == TBBitrateEstim_SATD_Hadamard) { + transform = ectx->acceleration.hadamard_transform_8[6-1-2]; + + transform(coeffs, &diff[0 ], 64); + transform(coeffs+1*32*32, &diff[32 ], 64); + transform(coeffs+2*32*32, &diff[32*64 ], 64); + transform(coeffs+3*32*32, &diff[32*64+32], 64); + } + else { + transform = ectx->acceleration.fwd_transform_8[6-1-2]; + + transform(coeffs, &diff[0 ], 64); + transform(coeffs+1*32*32, &diff[32 ], 64); + transform(coeffs+2*32*32, &diff[32*64 ], 64); + transform(coeffs+3*32*32, &diff[32*64+32], 64); + } } else { - ectx->acceleration.fwd_transform_8[log2BlkSize-2](coeffs, diff, &diff[blkSize] - &diff[0]); + assert(tb->log2Size-2 <= 3); + + if (method == TBBitrateEstim_SATD_Hadamard) { + ectx->acceleration.hadamard_transform_8[tb->log2Size-2](coeffs, diff, &diff[blkSize] - &diff[0]); + } + else { + ectx->acceleration.fwd_transform_8[tb->log2Size-2](coeffs, diff, &diff[blkSize] - &diff[0]); + } } float distortion=0; @@ -166,119 +174,99 @@ Algo_TB_IntraPredMode_BruteForce::analyze(encoder_context* ectx, context_model_table& ctxModel, const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, - int log2TbSize, int blkIdx, + enc_tb* tb, int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag) { - //printf("encode_transform_tree_may_split %d %d (%d %d) size %d\n",x0,y0,xBase,yBase,1<<log2TbSize); + enter(); - /* - enum IntraPredMode pre_intraMode = find_best_intra_mode(ectx->img,x0,y0, log2TbSize, 0, - input->get_image_plane_at_pos(0,x0,y0), - input->get_image_stride(0)); - */ + enc_cb* cb = tb->cb; bool selectIntraPredMode = false; selectIntraPredMode |= (cb->PredMode==MODE_INTRA && cb->PartMode==PART_2Nx2N && TrafoDepth==0); selectIntraPredMode |= (cb->PredMode==MODE_INTRA && cb->PartMode==PART_NxN && TrafoDepth==1); if (selectIntraPredMode) { - enc_tb* tb[35]; - float minCost = std::numeric_limits<float>::max(); - int minCostIdx=0; - float minCandCost; + CodingOptions<enc_tb> options(ectx, tb, ctxModel); + CodingOption<enc_tb> option[35]; - const de265_image* img = ectx->img; - const seq_parameter_set* sps = &img->sps; - int candidates[3]; - fillIntraPredModeCandidates(candidates, x0,y0, - sps->getPUIndexRS(x0,y0), - x0>0, y0>0, img); + for (int i=0;i<35;i++) { + bool computeIntraMode = isPredModeEnabled((enum IntraPredMode)i); + option[i] = options.new_option(computeIntraMode); + } + + options.start(); + + + const seq_parameter_set* sps = &ectx->get_sps(); + enum IntraPredMode candidates[3]; + fillIntraPredModeCandidates(candidates, tb->x,tb->y, + tb->x > 0, tb->y > 0, ectx->ctbs, &ectx->get_sps()); for (int i = 0; i<35; i++) { - if (!mPredMode_enabled[i]) { - tb[i]=NULL; + if (!option[i]) { continue; } - context_model_table ctxIntra = ctxModel.copy(); - //copy_context_model_table(ctxIntra, ctxModel); - enum IntraPredMode intraMode = (IntraPredMode)i; - cb->intra.pred_mode[blkIdx] = intraMode; - if (blkIdx==0) { cb->intra.chroma_mode = intraMode; } - ectx->img->set_IntraPredMode(x0,y0,log2TbSize, intraMode); + option[i].begin(); - tb[intraMode] = mTBSplitAlgo->analyze(ectx,ctxIntra,input,parent, - cb, x0,y0, xBase,yBase, log2TbSize, blkIdx, - TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + enc_tb* tb_option = option[i].get_node(); + *tb_option->downPtr = tb_option; - float sad; - if ((1<<log2TbSize)==8) { - decode_intra_prediction(ectx->img, x0,y0, intraMode, 1<<log2TbSize, 0); - sad = estim_TB_bitrate(ectx,input, x0,y0, log2TbSize, TBBitrateEstim_SAD); - } + tb_option->intra_mode = intraMode; + // set chroma mode to same mode is its luma mode + enum IntraPredMode intraModeC; - float rate = tb[intraMode]->rate; - int enc_bin; - - if (log2TbSize==3) { - // printf("RATE2 %d %f %f\n",log2TbSize,tb[intraMode]->rate,sad); + if (cb->PartMode==PART_2Nx2N || ectx->get_sps().ChromaArrayType==CHROMA_444) { + intraModeC = intraMode; + } + else { + intraModeC = tb_option->parent->children[0]->intra_mode; } - /**/ if (candidates[0]==intraMode) { rate += 1; enc_bin=1; } - else if (candidates[1]==intraMode) { rate += 2; enc_bin=1; } - else if (candidates[2]==intraMode) { rate += 2; enc_bin=1; } - else { rate += 5; enc_bin=0; } - - CABAC_encoder_estim estim; - estim.set_context_models(&ctxIntra); - rate += estim.RDBits_for_CABAC_bin(CONTEXT_MODEL_PREV_INTRA_LUMA_PRED_FLAG, enc_bin); + tb_option->intra_mode_chroma = intraModeC; - float cost = tb[intraMode]->distortion + ectx->lambda * rate; - if (cost<minCost) { - minCost=cost; - minCostIdx=intraMode; - //minCandCost=c; - } - } + descend(tb_option,"%d",intraMode); + tb_option = mTBSplitAlgo->analyze(ectx,option[i].get_context(),input,tb_option, + TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + option[i].set_node(tb_option); + ascend(); - enum IntraPredMode intraMode = (IntraPredMode)minCostIdx; + float intraPredModeBits = get_intra_pred_mode_bits(candidates, + intraMode, + intraModeC, + option[i].get_context(), + tb_option->blkIdx == 0); - cb->intra.pred_mode[blkIdx] = intraMode; - if (blkIdx==0) { cb->intra.chroma_mode = intraMode; } //INTRA_CHROMA_LIKE_LUMA; - ectx->img->set_IntraPredMode(x0,y0,log2TbSize, intraMode); + tb_option->rate_withoutCbfChroma += intraPredModeBits; + tb_option->rate += intraPredModeBits; - tb[minCostIdx]->reconstruct(ectx, ectx->img, - cb, blkIdx); + option[i].end(); + } - //printf("INTRA %d %d %d\n",pre_intraMode,intraMode,minCandCost); + options.compute_rdo_costs(); - for (int i = 0; i<35; i++) { - if (i != minCostIdx) { - delete tb[i]; - } - } + enc_tb* bestTB = options.return_best_rdo_node(); - return tb[minCostIdx]; + return bestTB; } else { - return mTBSplitAlgo->analyze(ectx, ctxModel, input, parent, cb, - x0,y0,xBase,yBase, log2TbSize, - blkIdx, TrafoDepth, MaxTrafoDepth, - IntraSplitFlag); + descend(tb,"NOP"); // TODO: not parent + enc_tb* new_tb = mTBSplitAlgo->analyze(ectx, ctxModel, input, tb, + TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + ascend(); + + return new_tb; } assert(false); @@ -291,65 +279,113 @@ Algo_TB_IntraPredMode_MinResidual::analyze(encoder_context* ectx, context_model_table& ctxModel, const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, - int log2TbSize, int blkIdx, - int TrafoDepth, int MaxTrafoDepth, - int IntraSplitFlag) + enc_tb* tb, + int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag) { + enter(); + + enc_cb* cb = tb->cb; + + int x0 = tb->x; + int y0 = tb->y; + int xBase = cb->x; + int yBase = cb->y; + int log2TbSize = tb->log2Size; bool selectIntraPredMode = false; selectIntraPredMode |= (cb->PredMode==MODE_INTRA && cb->PartMode==PART_2Nx2N && TrafoDepth==0); selectIntraPredMode |= (cb->PredMode==MODE_INTRA && cb->PartMode==PART_NxN && TrafoDepth==1); + //printf("tb-intrapredmode: %d %d %d\n", cb->PredMode, cb->PartMode, TrafoDepth); + if (selectIntraPredMode) { + *tb->downPtr = tb; + enum IntraPredMode intraMode; - float minDistortion; + float minDistortion = std::numeric_limits<float>::max(); + + assert(nPredModesEnabled()>=1); - for (int idx=0;idx<35;idx++) { - enum IntraPredMode mode = (enum IntraPredMode)idx; - decode_intra_prediction(ectx->img, x0,y0, (enum IntraPredMode)mode, 1<<log2TbSize, 0); + if (nPredModesEnabled()==1) { + intraMode = getPredMode(0); + } + else { + tb->intra_prediction[0] = std::make_shared<small_image_buffer>(log2TbSize, sizeof(uint8_t)); - float distortion; - distortion = estim_TB_bitrate(ectx, input, x0,y0, log2TbSize, - mParams.bitrateEstimMethod()); + for (int idx=0;idx<nPredModesEnabled();idx++) { + enum IntraPredMode mode = getPredMode(idx); - if (idx==0 || distortion<minDistortion) { - minDistortion = distortion; - intraMode = mode; + tb->intra_mode = mode; + decode_intra_prediction_from_tree(ectx->img, tb, ectx->ctbs, ectx->get_sps(), 0); + + float distortion; + distortion = estim_TB_bitrate(ectx, input, tb, + mParams.bitrateEstimMethod()); + + if (distortion<minDistortion) { + minDistortion = distortion; + intraMode = mode; + } } } + //cb->intra.pred_mode[blkIdx] = intraMode; + //if (blkIdx==0) { cb->intra.chroma_mode = intraMode; } - cb->intra.pred_mode[blkIdx] = intraMode; - if (blkIdx==0) { cb->intra.chroma_mode = intraMode; } + //intraMode=(IntraPredMode)17; // HACK - ectx->img->set_IntraPredMode(x0,y0,log2TbSize, intraMode); + //printf("INTRA MODE (%d;%d) = %d\n",x0,y0,intraMode); + + tb->intra_mode = intraMode; + + // set chroma mode to same mode is its luma mode + enum IntraPredMode intraModeC; + + if (cb->PartMode==PART_2Nx2N || ectx->get_sps().ChromaArrayType==CHROMA_444) { + intraModeC = intraMode; + } + else { + intraModeC = tb->parent->children[0]->intra_mode; + } + + tb->intra_mode_chroma = intraModeC; - /* - decode_intra_prediction(ectx->img, x0,y0, intraMode, 1<< log2TbSize, 0); - decode_intra_prediction(ectx->img, x0>>1,y0>>1, intraMode, 1<<(log2TbSize-1), 1); - decode_intra_prediction(ectx->img, x0>>1,y0>>1, intraMode, 1<<(log2TbSize-1), 2); - */ // Note: cannot prepare intra prediction pixels here, because this has to // be done at the lowest TB split level. - enc_tb* tb = mTBSplitAlgo->analyze(ectx,ctxModel,input,parent, - cb, x0,y0, xBase,yBase, log2TbSize, blkIdx, - TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + + descend(tb,"%d",intraMode); + tb = mTBSplitAlgo->analyze(ectx,ctxModel,input,tb, + TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + ascend(); debug_show_image(ectx->img, 0); + + enum IntraPredMode candidates[3]; + fillIntraPredModeCandidates(candidates, x0,y0, + x0>0, y0>0, ectx->ctbs, &ectx->get_sps()); + + float intraPredModeBits = get_intra_pred_mode_bits(candidates, + intraMode, + intraModeC, + ctxModel, + tb->blkIdx == 0); + + tb->rate_withoutCbfChroma += intraPredModeBits; + tb->rate += intraPredModeBits; + return tb; } else { - return mTBSplitAlgo->analyze(ectx, ctxModel, input, parent, cb, - x0,y0,xBase,yBase, log2TbSize, - blkIdx, TrafoDepth, MaxTrafoDepth, - IntraSplitFlag); + descend(tb,"NOP"); + enc_tb* nop_tb = mTBSplitAlgo->analyze(ectx, ctxModel, input, tb, + TrafoDepth, MaxTrafoDepth, + IntraSplitFlag); + ascend(); + return nop_tb; } assert(false); @@ -362,24 +398,15 @@ return i.second < j.second; } + enc_tb* Algo_TB_IntraPredMode_FastBrute::analyze(encoder_context* ectx, context_model_table& ctxModel, const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, - int log2TbSize, int blkIdx, - int TrafoDepth, int MaxTrafoDepth, - int IntraSplitFlag) + enc_tb* tb, + int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag) { - //printf("encode_transform_tree_may_split %d %d (%d %d) size %d\n",x0,y0,xBase,yBase,1<<log2TbSize); - - /* - enum IntraPredMode pre_intraMode = find_best_intra_mode(ectx->img,x0,y0, log2TbSize, 0, - input->get_image_plane_at_pos(0,x0,y0), - input->get_image_stride(0)); - */ + enc_cb* cb = tb->cb; bool selectIntraPredMode = false; selectIntraPredMode |= (cb->PredMode==MODE_INTRA && cb->PartMode==PART_2Nx2N && TrafoDepth==0); @@ -390,25 +417,29 @@ int minCostIdx=0; float minCandCost; - const de265_image* img = ectx->img; - const seq_parameter_set* sps = &img->sps; - int candidates[3]; - fillIntraPredModeCandidates(candidates, x0,y0, - sps->getPUIndexRS(x0,y0), - x0>0, y0>0, img); + const seq_parameter_set* sps = &ectx->get_sps(); + enum IntraPredMode candidates[3]; + fillIntraPredModeCandidates(candidates, tb->x,tb->y, + tb->x>0, tb->y>0, ectx->ctbs, &ectx->get_sps()); std::vector< std::pair<enum IntraPredMode,float> > distortions; + int log2TbSize = tb->log2Size; + tb->intra_prediction[0] = std::make_shared<small_image_buffer>(log2TbSize, sizeof(uint8_t)); + for (int idx=0;idx<35;idx++) - if (idx!=candidates[0] && idx!=candidates[1] && idx!=candidates[2] && mPredMode_enabled[idx]) + if (idx!=candidates[0] && idx!=candidates[1] && idx!=candidates[2] && + isPredModeEnabled((enum IntraPredMode)idx)) { enum IntraPredMode mode = (enum IntraPredMode)idx; - decode_intra_prediction(ectx->img, x0,y0, (enum IntraPredMode)mode, 1<<log2TbSize, 0); + + tb->intra_mode = mode; + decode_intra_prediction_from_tree(ectx->img, tb, ectx->ctbs, ectx->get_sps(), 0); float distortion; - distortion = estim_TB_bitrate(ectx, input, x0,y0, log2TbSize, + distortion = estim_TB_bitrate(ectx, input, tb, mParams.bitrateEstimMethod()); distortions.push_back( std::make_pair((enum IntraPredMode)idx, distortion) ); @@ -429,94 +460,70 @@ distortions.push_back(std::make_pair((enum IntraPredMode)candidates[2],0)); - enc_tb* tb[35]; - context_model_table contexts[35]; - - for (int i=0;i<35;i++) tb[i]=NULL; + CodingOptions<enc_tb> options(ectx, tb, ctxModel); + std::vector<CodingOption<enc_tb> > option; for (int i=0;i<distortions.size();i++) { + enum IntraPredMode intraMode = (IntraPredMode)distortions[i].first; + if (!isPredModeEnabled(intraMode)) { continue; } - //copy_context_model_table(ctxIntra, ctxModel); - - enum IntraPredMode intraMode = (IntraPredMode)distortions[i].first; - - if (!mPredMode_enabled[intraMode]) { continue; } - - cb->intra.pred_mode[blkIdx] = intraMode; - if (blkIdx==0) { cb->intra.chroma_mode = intraMode; } - - ectx->img->set_IntraPredMode(x0,y0,log2TbSize, intraMode); + CodingOption<enc_tb> opt = options.new_option(isPredModeEnabled(intraMode)); + opt.get_node()->intra_mode = intraMode; + option.push_back(opt); + } - contexts[intraMode] = ctxModel.copy(); - tb[intraMode] = mTBSplitAlgo->analyze(ectx,contexts[intraMode],input,parent, - cb, x0,y0, xBase,yBase, log2TbSize, blkIdx, - TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + options.start(); - float rate = tb[intraMode]->rate_withoutCbfChroma; - int enc_bin; - /**/ if (candidates[0]==intraMode) { rate += 1; enc_bin=1; } - else if (candidates[1]==intraMode) { rate += 2; enc_bin=1; } - else if (candidates[2]==intraMode) { rate += 2; enc_bin=1; } - else { rate += 5; enc_bin=0; } + for (int i=0;i<option.size();i++) { - CABAC_encoder_estim estim; - estim.set_context_models(&contexts[intraMode]); - //rate += estim.RDBits_for_CABAC_bin(CONTEXT_MODEL_PREV_INTRA_LUMA_PRED_FLAG, enc_bin); - logtrace(LogSymbols,"$1 prev_intra_luma_pred_flag=%d\n",enc_bin); - estim.write_CABAC_bit(CONTEXT_MODEL_PREV_INTRA_LUMA_PRED_FLAG, enc_bin); + enc_tb* opt_tb = option[i].get_node(); - // TODO: currently we make the chroma-pred-mode decision for each part even - // in NxN part mode. Since we always set this to the same value, it does not - // matter. However, we should only add the rate for it once (for blkIdx=0). + *opt_tb->downPtr = opt_tb; - if (blkIdx==0) { - logtrace(LogSymbols,"$1 intra_chroma_pred_mode=%d\n",0); - estim.write_CABAC_bit(CONTEXT_MODEL_INTRA_CHROMA_PRED_MODE,0); + // set chroma mode to same mode is its luma mode + enum IntraPredMode intraModeC; + if (cb->PartMode==PART_2Nx2N || ectx->get_sps().ChromaArrayType==CHROMA_444) { + intraModeC = opt_tb->intra_mode; + } + else { + intraModeC = opt_tb->parent->children[0]->intra_mode; } - rate += estim.getRDBits(); - - float cbfRate = tb[intraMode]->rate - tb[intraMode]->rate_withoutCbfChroma; - tb[intraMode]->rate_withoutCbfChroma = rate; - tb[intraMode]->rate = tb[intraMode]->rate_withoutCbfChroma + cbfRate; - //printf("QQQ %f %f\n", b, estim.getRDBits()); + opt_tb->intra_mode_chroma = intraModeC; - float cost = tb[intraMode]->distortion + ectx->lambda * rate; + option[i].begin(); - //printf("idx:%d mode:%d cost:%f\n",i,intraMode,cost); + descend(opt_tb,"%d",opt_tb->intra_mode); + opt_tb = mTBSplitAlgo->analyze(ectx,option[i].get_context(),input,opt_tb, + TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + option[i].set_node(opt_tb); + ascend(); - if (cost<minCost) { - minCost=cost; - minCostIdx=intraMode; - //minCandCost=c; - } - } + float intraPredModeBits = get_intra_pred_mode_bits(candidates, + opt_tb->intra_mode, + intraModeC, + option[i].get_context(), + tb->blkIdx == 0); - enum IntraPredMode intraMode = (IntraPredMode)minCostIdx; + opt_tb->rate_withoutCbfChroma += intraPredModeBits; + opt_tb->rate += intraPredModeBits; - cb->intra.pred_mode[blkIdx] = intraMode; - if (blkIdx==0) { cb->intra.chroma_mode = intraMode; } //INTRA_CHROMA_LIKE_LUMA; - ectx->img->set_IntraPredMode(x0,y0,log2TbSize, intraMode); + option[i].end(); + } - tb[minCostIdx]->reconstruct(ectx, ectx->img, cb, blkIdx); - ctxModel = contexts[minCostIdx]; - for (int i = 0; i<35; i++) { - if (i != minCostIdx) { - delete tb[i]; - } - } + options.compute_rdo_costs(); - return tb[minCostIdx]; + return options.return_best_rdo_node(); } else { - return mTBSplitAlgo->analyze(ectx, ctxModel, input, parent, cb, - x0,y0,xBase,yBase, log2TbSize, - blkIdx, TrafoDepth, MaxTrafoDepth, - IntraSplitFlag); - + descend(tb,"NOP"); + enc_tb* new_tb = mTBSplitAlgo->analyze(ectx, ctxModel, input, tb, + TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + ascend(); + return new_tb; } assert(false);
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/tb-intrapredmode.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/tb-intrapredmode.h
Changed
@@ -25,7 +25,8 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" +#include "libde265/encoder/encoder-types.h" +#include "libde265/encoder/algo/algo.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -36,20 +37,6 @@ #include "libde265/configparam.h" -/* Encoder search tree, bottom up: - - - Algo_TB_Split - whether TB is split or not - - - Algo_TB_IntraPredMode - choose the intra prediction mode (or NOP, if at the wrong tree level) - - - Algo_CB_IntraPartMode - choose between NxN and 2Nx2N intra parts - - - Algo_CB_Split - whether CB is split or not - - - Algo_CTB_QScale - select QScale on CTB granularity - */ - - // ========== TB intra prediction mode ========== enum ALGO_TB_IntraPredMode { @@ -94,7 +81,7 @@ /** Base class for intra prediction-mode algorithms. Selects one of the 35 prediction modes. */ -class Algo_TB_IntraPredMode +class Algo_TB_IntraPredMode : public Algo { public: Algo_TB_IntraPredMode() : mTBSplitAlgo(NULL) { } @@ -103,14 +90,13 @@ virtual enc_tb* analyze(encoder_context*, context_model_table&, const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, int log2TbSize, - int blkIdx, + enc_tb* tb, int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag) = 0; void setChildAlgo(Algo_TB_Split* algo) { mTBSplitAlgo = algo; } + const char* name() const { return "tb-intrapredmode"; } + protected: Algo_TB_Split* mTBSplitAlgo; }; @@ -141,26 +127,41 @@ { public: Algo_TB_IntraPredMode_ModeSubset() { + enableAllIntraPredModes(); + } + + void enableAllIntraPredModes() { for (int i=0;i<35;i++) { mPredMode_enabled[i] = true; + mPredMode[i] = (enum IntraPredMode)i; } + + mNumPredModesEnabled = 35; } void disableAllIntraPredModes() { for (int i=0;i<35;i++) { mPredMode_enabled[i] = false; } + + mNumPredModesEnabled = 0; } - void enableIntraPredMode(int mode, bool flag=true) { - mPredMode_enabled[mode] = flag; + void enableIntraPredMode(enum IntraPredMode mode) { + if (!mPredMode_enabled[mode]) { + mPredMode[mNumPredModesEnabled] = mode; + mPredMode_enabled[mode] = true; + mNumPredModesEnabled++; + } } + // TODO: method to disable modes + void enableIntraPredModeSubset(enum ALGO_TB_IntraPredMode_Subset subset) { switch (subset) { case ALGO_TB_IntraPredMode_Subset_All: // activate all is the default - for (int i=0;i<35;i++) { enableIntraPredMode(i); } + for (int i=0;i<35;i++) { enableIntraPredMode((enum IntraPredMode)i); } break; case ALGO_TB_IntraPredMode_Subset_DC: disableAllIntraPredModes(); @@ -180,8 +181,24 @@ } } - protected: + + enum IntraPredMode getPredMode(int idx) const { + assert(idx<mNumPredModesEnabled); + return mPredMode[idx]; + } + + int nPredModesEnabled() const { + return mNumPredModesEnabled; + } + + bool isPredModeEnabled(enum IntraPredMode mode) { + return mPredMode_enabled[mode]; + } + + private: + IntraPredMode mPredMode[35]; bool mPredMode_enabled[35]; + int mNumPredModesEnabled; }; @@ -194,11 +211,11 @@ virtual enc_tb* analyze(encoder_context*, context_model_table&, const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, int log2TbSize, - int blkIdx, + enc_tb* tb, int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag); + + + const char* name() const { return "tb-intrapredmode_BruteForce"; } }; @@ -233,12 +250,12 @@ virtual enc_tb* analyze(encoder_context*, context_model_table&, const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, int log2TbSize, - int blkIdx, + enc_tb* tb, int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag); + + const char* name() const { return "tb-intrapredmode_FastBrute"; } + private: params mParams; }; @@ -265,14 +282,13 @@ config.add_option(&mParams.bitrateEstimMethod); } - virtual enc_tb* analyze(encoder_context*, - context_model_table&, - const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, int log2TbSize, - int blkIdx, - int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag); + enc_tb* analyze(encoder_context*, + context_model_table&, + const de265_image* input, + enc_tb* tb, + int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag); + + const char* name() const { return "tb-intrapredmode_MinResidual"; } private: params mParams;
View file
libde265-1.0.3.tar.gz/libde265/encoder/algo/tb-rateestim.cc
Added
@@ -0,0 +1,46 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "libde265/encoder/algo/tb-rateestim.h" +#include "libde265/encoder/encoder-syntax.h" +#include <assert.h> +#include <iostream> + + +float Algo_TB_RateEstimation_Exact::encode_transform_unit(encoder_context* ectx, + context_model_table& ctxModel, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0, int xBase,int yBase, + int log2TrafoSize, int trafoDepth, + int blkIdx) +{ + CABAC_encoder_estim estim; + estim.set_context_models(&ctxModel); + + leaf(cb, NULL); + + ::encode_transform_unit(ectx, &estim, tb,cb, x0,y0, xBase,yBase, + log2TrafoSize, trafoDepth, blkIdx); + + return estim.getRDBits(); +}
View file
libde265-1.0.3.tar.gz/libde265/encoder/algo/tb-rateestim.h
Added
@@ -0,0 +1,101 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TB_RATEESTIM_H +#define TB_RATEESTIM_H + +#include "libde265/nal-parser.h" +#include "libde265/decctx.h" +#include "libde265/encoder/encoder-types.h" +#include "libde265/encoder/algo/algo.h" +#include "libde265/slice.h" +#include "libde265/scan.h" +#include "libde265/intrapred.h" +#include "libde265/transform.h" +#include "libde265/fallback-dct.h" +#include "libde265/quality.h" +#include "libde265/fallback.h" +#include "libde265/configparam.h" + + +enum ALGO_TB_RateEstimation { + ALGO_TB_RateEstimation_None, + ALGO_TB_RateEstimation_Exact +}; + +class option_ALGO_TB_RateEstimation : public choice_option<enum ALGO_TB_RateEstimation> +{ + public: + option_ALGO_TB_RateEstimation() { + add_choice("none" ,ALGO_TB_RateEstimation_None); + add_choice("exact",ALGO_TB_RateEstimation_Exact, true); + } +}; + + + +class Algo_TB_RateEstimation : public Algo +{ + public: + virtual ~Algo_TB_RateEstimation() { } + + virtual float encode_transform_unit(encoder_context* ectx, + context_model_table& ctxModel, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0, int xBase,int yBase, + int log2TrafoSize, int trafoDepth, int blkIdx) = 0; + + virtual const char* name() const { return "tb-rateestimation"; } +}; + + +class Algo_TB_RateEstimation_None : public Algo_TB_RateEstimation +{ + public: + virtual float encode_transform_unit(encoder_context* ectx, + context_model_table& ctxModel, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0, int xBase,int yBase, + int log2TrafoSize, int trafoDepth, int blkIdx) + { + leaf(cb, NULL); + return 0.0f; + } + + virtual const char* name() const { return "tb-rateestimation-none"; } +}; + + +class Algo_TB_RateEstimation_Exact : public Algo_TB_RateEstimation +{ + public: + virtual float encode_transform_unit(encoder_context* ectx, + context_model_table& ctxModel, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0, int xBase,int yBase, + int log2TrafoSize, int trafoDepth, int blkIdx); + + virtual const char* name() const { return "tb-rateestimation-exact"; } +}; + + +#endif
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/tb-split.cc -> libde265-1.0.3.tar.gz/libde265/encoder/algo/tb-split.cc
Changed
@@ -21,329 +21,322 @@ */ -#include "libde265/encoder/analyze.h" +#include "libde265/encoder/encoder-core.h" #include "libde265/encoder/encoder-context.h" +#include "libde265/encoder/encoder-syntax.h" +#include "libde265/encoder/algo/coding-options.h" #include <assert.h> #include <limits> #include <math.h> #include <iostream> -#define ENCODER_DEVELOPMENT 1 - - -void diff_blk(int16_t* out,int out_stride, - const uint8_t* a_ptr, int a_stride, - const uint8_t* b_ptr, int b_stride, - int blkSize) -{ - for (int by=0;by<blkSize;by++) - for (int bx=0;bx<blkSize;bx++) - { - out[by*out_stride+bx] = a_ptr[by*a_stride+bx] - b_ptr[by*b_stride+bx]; - } -} - - -static bool has_nonzero_value(const int16_t* data, int n) +struct Logging_TB_Split : public Logging { - for (int i=0;i<n;i++) - if (data[i]) return true; - - return false; -} - + int skipTBSplit, noskipTBSplit; + int zeroBlockCorrelation[6][2][5]; -void show_debug_image(const de265_image* input, int slot); + const char* name() const { return "tb-split"; } -/* - void encode_transform_unit(encoder_context* ectx, - enc_tb* tb, - const de265_image* input, - //int16_t* residual, int stride, - int x0,int y0, // luma position - int log2TbSize, // chroma adapted - const enc_cb* cb, - int cIdx) + void print(const encoder_context* ectx, const char* filename) { - } -*/ - -void analyze_transform_unit(encoder_context* ectx, - enc_tb* tb, - const de265_image* input, // TODO: probably pass pixels/stride directly - //int16_t* residual, int stride, - int x0,int y0, // luma position - int log2TbSize, // chroma adapted - const enc_cb* cb, - int cIdx) -{ - int xC = x0; - int yC = y0; - int tbSize = 1<<log2TbSize; - if (cIdx>0) { xC>>=1; yC>>=1; } - - enum PredMode predMode = cb->PredMode; - - int16_t blk[32*32]; // residual - - // --- do intra prediction --- + for (int tb=3;tb<=5;tb++) { + for (int z=0;z<=1;z++) { + float total = 0; - if (predMode==MODE_INTRA) { - enum IntraPredMode intraPredMode; + for (int c=0;c<5;c++) + total += zeroBlockCorrelation[tb][z][c]; - if (cIdx==0) { - intraPredMode = ectx->img->get_IntraPredMode(x0,y0); - } - else { - intraPredMode = cb->intra.chroma_mode; + for (int c=0;c<5;c++) { + printf("%d %d %d : %d %5.2f\n", tb,z,c, + zeroBlockCorrelation[tb][z][c], + total==0 ? 0 : zeroBlockCorrelation[tb][z][c]/total*100); + } + } } - decode_intra_prediction(ectx->img, xC, yC, intraPredMode, tbSize , cIdx); - - // --- subtract prediction from prediction --- - - uint8_t* pred = ectx->img->get_image_plane(cIdx); - int stride = ectx->img->get_image_stride(cIdx); - - diff_blk(blk,tbSize, - input->get_image_plane_at_pos(cIdx,xC,yC), input->get_image_stride(cIdx), - &pred[yC*stride+xC],stride, tbSize); - } - else { - // --- subtract prediction from prediction --- - - uint8_t* pred = ectx->prediction->get_image_plane(cIdx); - int stride = ectx->prediction->get_image_stride(cIdx); + for (int z=0;z<2;z++) { + printf("\n"); + for (int tb=3;tb<=5;tb++) { + float total = 0; - //printBlk("input",input->get_image_plane_at_pos(cIdx,xC,yC), tbSize, input->get_image_stride(cIdx)); - //printBlk("prediction", pred,tbSize, stride); + for (int c=0;c<5;c++) + total += zeroBlockCorrelation[tb][z][c]; - diff_blk(blk,tbSize, - input->get_image_plane_at_pos(cIdx,xC,yC), input->get_image_stride(cIdx), - &pred[yC*stride+xC],stride, tbSize); + printf("%dx%d ",1<<tb,1<<tb); - //printBlk("residual", blk,tbSize,tbSize); + for (int c=0;c<5;c++) { + printf("%5.2f ", total==0 ? 0 : zeroBlockCorrelation[tb][z][c]/total*100); + } + printf("\n"); + } + } } +} logging_tb_split; - //show_debug_image(ectx->img, 0); - +template <class pixel_t> +void diff_blk(int16_t* out,int out_stride, + const pixel_t* a_ptr, int a_stride, + const pixel_t* b_ptr, int b_stride, + int blkSize) +{ + for (int by=0;by<blkSize;by++) + for (int bx=0;bx<blkSize;bx++) + { + out[by*out_stride+bx] = a_ptr[by*a_stride+bx] - b_ptr[by*b_stride+bx]; + } +} +template <class pixel_t> +void compute_residual_channel(encoder_context* ectx, enc_tb* tb, const de265_image* input, + int cIdx, int x,int y,int log2Size) +{ + int blkSize = (1<<log2Size); - // --- forward transform --- + enum IntraPredMode mode; - tb->alloc_coeff_memory(cIdx, tbSize); + if (cIdx==0) { + mode = tb->intra_mode; + } + else { + mode = tb->intra_mode_chroma; + } - int trType; - if (cIdx==0 && log2TbSize==2 && predMode==MODE_INTRA) trType=1; // TODO: inter mode - else trType=0; + // decode intra prediction - fwd_transform(&ectx->acceleration, tb->coeff[cIdx], tbSize, log2TbSize, trType, blk, tbSize); + tb->intra_prediction[cIdx] = std::make_shared<small_image_buffer>(log2Size, sizeof(pixel_t)); + decode_intra_prediction_from_tree(ectx->img, tb, ectx->ctbs, ectx->get_sps(), cIdx); - // --- quantization --- + // create residual buffer and compute differences - quant_coefficients(tb->coeff[cIdx], tb->coeff[cIdx], log2TbSize, cb->qp, true); + tb->residual[cIdx] = std::make_shared<small_image_buffer>(log2Size, sizeof(int16_t)); - tb->cbf[cIdx] = has_nonzero_value(tb->coeff[cIdx], 1<<(log2TbSize<<1)); + diff_blk<pixel_t>(tb->residual[cIdx]->get_buffer_s16(), blkSize, + input->get_image_plane_at_pos(cIdx,x,y), + input->get_image_stride(cIdx), + tb->intra_prediction[cIdx]->get_buffer<pixel_t>(), blkSize, + blkSize); } -static void recursive_cbfChroma(CABAC_encoder_estim* cabac, - enc_tb* tb, int log2TrafoSize, int trafoDepth) +template <class pixel_t> +void compute_residual(encoder_context* ectx, enc_tb* tb, const de265_image* input, int blkIdx) { - float bits_pre = cabac->getRDBits(); + int tbSize = 1<<tb->log2Size; - // --- CBF CB/CR --- + /* + tb->writeSurroundingMetadata(ectx, ectx->img, + enc_node::METADATA_RECONSTRUCTION_BORDERS, + tb->get_rectangle_with_width(1<<(tb->log2Size+1))); + */ - // For 4x4 luma, there is no signaling of chroma CBF, because only the - // chroma CBF for 8x8 is relevant. - if (log2TrafoSize>2) { - if (trafoDepth==0 || tb->parent->cbf[1]) { - encode_cbf_chroma(cabac, trafoDepth, tb->cbf[1]); - } - if (trafoDepth==0 || tb->parent->cbf[2]) { - encode_cbf_chroma(cabac, trafoDepth, tb->cbf[2]); - } - } + compute_residual_channel<pixel_t>(ectx,tb,input, 0,tb->x,tb->y,tb->log2Size); - if (tb->split_transform_flag) { - for (int i=0;i<4;i++) { - recursive_cbfChroma(cabac, tb->children[i], log2TrafoSize-1, trafoDepth+1); - } + if (ectx->get_sps().chroma_format_idc == CHROMA_444) { + compute_residual_channel<pixel_t>(ectx,tb,input, 1,tb->x,tb->y,tb->log2Size); + compute_residual_channel<pixel_t>(ectx,tb,input, 2,tb->x,tb->y,tb->log2Size); } + else if (tb->log2Size > 2) { + int x = tb->x / input->SubWidthC; + int y = tb->y / input->SubHeightC; + int log2BlkSize = tb->log2Size -1; // TODO chroma 422/444 - float bits_post = cabac->getRDBits(); + compute_residual_channel<pixel_t>(ectx,tb,input, 1,x,y,log2BlkSize); + compute_residual_channel<pixel_t>(ectx,tb,input, 2,x,y,log2BlkSize); + } + else if (blkIdx==3) { + int x = tb->parent->x / input->SubWidthC; + int y = tb->parent->y / input->SubHeightC; + int log2BlkSize = tb->log2Size; - tb->rate = tb->rate_withoutCbfChroma + (bits_post - bits_pre); + compute_residual_channel<pixel_t>(ectx,tb,input, 1,x,y,log2BlkSize); + compute_residual_channel<pixel_t>(ectx,tb,input, 2,x,y,log2BlkSize); + } } -enc_tb* encode_transform_tree_no_split(encoder_context* ectx, - context_model_table& ctxModel, - const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, int log2TbSize, - int blkIdx, - int trafoDepth, int MaxTrafoDepth, int IntraSplitFlag) +enc_tb* +Algo_TB_Split_BruteForce::analyze(encoder_context* ectx, + context_model_table& ctxModel, + const de265_image* input, + enc_tb* tb, + int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag) { - de265_image* img = ectx->img; + enter(); - int stride = ectx->img->get_image_stride(0); + enc_cb* cb = tb->cb; - uint8_t* luma_plane = ectx->img->get_image_plane(0); - uint8_t* cb_plane = ectx->img->get_image_plane(1); - uint8_t* cr_plane = ectx->img->get_image_plane(2); + int log2TbSize = tb->log2Size; - // --- compute transform coefficients --- + bool test_split = (log2TbSize > 2 && + TrafoDepth < MaxTrafoDepth && + log2TbSize > ectx->get_sps().Log2MinTrafoSize); - enc_tb* tb = new enc_tb(); + bool test_no_split = true; + if (IntraSplitFlag && TrafoDepth==0) test_no_split=false; // we have to split + if (log2TbSize > ectx->get_sps().Log2MaxTrafoSize) test_no_split=false; - tb->parent = parent; - tb->split_transform_flag = false; - tb->log2Size = log2TbSize; - tb->x = x0; - tb->y = y0; - tb->cbf[0] = tb->cbf[1] = tb->cbf[2] = 0; + assert(test_no_split || test_split); + CodingOptions<enc_tb> options(ectx, tb, ctxModel); - // luma block + CodingOption<enc_tb> option_no_split = options.new_option(test_no_split); + CodingOption<enc_tb> option_split = options.new_option(test_split); - analyze_transform_unit(ectx, tb, input, x0,y0, log2TbSize, cb, 0 /* Y */); + //if (test_no_split) test_split = false; + //if (test_split) test_no_split = false; // HACK for debugging + options.start(); - // chroma blocks - if (log2TbSize > 2) { - // if TB is > 4x4, do chroma transform of half size - analyze_transform_unit(ectx, tb, input, x0,y0, log2TbSize-1, cb, 1 /* Cb */); - analyze_transform_unit(ectx, tb, input, x0,y0, log2TbSize-1, cb, 2 /* Cr */); - } - else if (blkIdx==3) { - // if TB size is 4x4, do chroma transform for last sub-block - analyze_transform_unit(ectx, tb, input, xBase,yBase, log2TbSize, cb, 1 /* Cb */); - analyze_transform_unit(ectx, tb, input, xBase,yBase, log2TbSize, cb, 2 /* Cr */); - } + enc_tb* tb_no_split = NULL; + enc_tb* tb_split = NULL; + if (test_no_split) { + descend(tb,"no split"); + option_no_split.begin(); + tb_no_split = option_no_split.get_node(); + //tb_no_split = new enc_tb(*tb); + *tb->downPtr = tb_no_split; - // reconstruction + if (cb->PredMode == MODE_INTRA) { + compute_residual<uint8_t>(ectx, tb_no_split, input, tb->blkIdx); + } - tb->reconstruct(ectx, ectx->img, cb, blkIdx); + tb_no_split = mAlgo_TB_Residual->analyze(ectx, option_no_split.get_context(), + input, tb_no_split, TrafoDepth,MaxTrafoDepth,IntraSplitFlag); + ascend(tb_no_split,"bits:%f/%f",tb_no_split->rate,tb_no_split->rate_withoutCbfChroma); + option_no_split.set_node(tb_no_split); + option_no_split.end(); - // measure rate - CABAC_encoder_estim estim; - estim.set_context_models(&ctxModel); + // --- some statistics --- + if (log2TbSize <= mParams.zeroBlockPrune()) { + bool zeroBlock = tb_no_split->isZeroBlock(); - tb->rate_withoutCbfChroma = 0; + if (zeroBlock) { + test_split = false; + logging_tb_split.skipTBSplit++; + } + else + logging_tb_split.noskipTBSplit++; + } + } - const seq_parameter_set* sps = &ectx->img->sps; + if (test_split) { + option_split.begin(); - if (log2TbSize <= sps->Log2MaxTrafoSize && - log2TbSize > sps->Log2MinTrafoSize && - trafoDepth < MaxTrafoDepth && - !(IntraSplitFlag && trafoDepth==0)) - { - encode_split_transform_flag(ectx, &estim, log2TbSize, 0); - tb->rate_withoutCbfChroma += estim.getRDBits(); - estim.reset(); - } + tb_split = option_split.get_node(); + *tb->downPtr = tb_split; - // --- CBF CB/CR --- + //descend(tb,"split"); + tb_split = encode_transform_tree_split(ectx, option_split.get_context(), input, tb_split, cb, + TrafoDepth, MaxTrafoDepth, IntraSplitFlag); + option_split.set_node(tb_split); + //ascend("bits:%f/%f",tb_split->rate,tb_split->rate_withoutCbfChroma); - if (cb->PredMode == MODE_INTRA || trafoDepth != 0 || - tb->cbf[1] || tb->cbf[2]) { - encode_cbf_luma(&estim, trafoDepth==0, tb->cbf[0]); + option_split.end(); } - encode_transform_unit(ectx,&estim, tb,cb, x0,y0, xBase,yBase, log2TbSize, trafoDepth, blkIdx); - tb->rate_withoutCbfChroma += estim.getRDBits(); + // --- do some statistics that will help us develop a fast algorithm --- + + if (test_split && test_no_split) { + bool zero_block = tb_no_split->isZeroBlock(); - estim.reset(); // TODO: not needed ? + int nChildZero = 0; + for (int i=0;i<4;i++) { + if (tb_split->children[i]->isZeroBlock()) nChildZero++; + } - recursive_cbfChroma(&estim,tb,log2TbSize,trafoDepth); + logging_tb_split.zeroBlockCorrelation[log2TbSize][zero_block ? 0 : 1][nChildZero]++; + } - //float rate_cbfChroma = estim.getRDBits(); - //tb->rate = tb->rate_withoutCbfChroma + rate_cbfChroma; + //bool split = (rd_cost_split < rd_cost_no_split); - // measure distortion + //if (test_split) split=true; /// DEBUGGING HACK - int tbSize = 1<<log2TbSize; - tb->distortion = SSD(input->get_image_plane_at_pos(0, x0,y0), input->get_image_stride(0), - img ->get_image_plane_at_pos(0, x0,y0), img ->get_image_stride(0), - tbSize, tbSize); + options.compute_rdo_costs(); - return tb; + enc_tb* bestTB = options.return_best_rdo_node(); + return bestTB; } + enc_tb* Algo_TB_Split::encode_transform_tree_split(encoder_context* ectx, context_model_table& ctxModel, const de265_image* input, - const enc_tb* parent, + enc_tb* tb, enc_cb* cb, - int x0,int y0, int log2TbSize, int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag) { const de265_image* img = ectx->img; - enc_tb* tb = new enc_tb(); - - tb->parent = parent; - tb->split_transform_flag = true; - tb->log2Size = log2TbSize; - tb->x = x0; - tb->y = y0; - - tb->distortion = 0; - tb->rate = 0; - tb->rate_withoutCbfChroma = 0; - - - // Since we try to code all sub-blocks, we enable all CBF flags. - // Should we see later that the child TBs are zero, we clear those flags later. - - tb->cbf[0]=1; - tb->cbf[1]=1; - tb->cbf[2]=1; - + int log2TbSize = tb->log2Size; + int x0 = tb->x; + int y0 = tb->y; context_model ctxModelCbfChroma[4]; for (int i=0;i<4;i++) { ctxModelCbfChroma[i] = ctxModel[CONTEXT_MODEL_CBF_CHROMA+i]; } + tb->split_transform_flag = true; + tb->rate_withoutCbfChroma = 0; + tb->distortion = 0; // --- encode all child nodes --- for (int i=0;i<4;i++) { + tb->children[i] = NULL; + } + + for (int i=0;i<4;i++) { + + // generate child node and propagate values down + int dx = (i&1) << (log2TbSize-1); int dy = (i>>1) << (log2TbSize-1); + enc_tb* child_tb = new enc_tb(x0+dx,y0+dy, log2TbSize-1,cb); + + child_tb->intra_mode = tb->intra_mode; + child_tb->intra_mode_chroma = tb->intra_mode_chroma; + child_tb->TrafoDepth = tb->TrafoDepth + 1; + child_tb->parent = tb; + child_tb->blkIdx = i; + child_tb->downPtr = &tb->children[i]; + + descend(tb,"split %d/4",i+1); + if (cb->PredMode == MODE_INTRA) { - tb->children[i] = mAlgo_TB_IntraPredMode->analyze(ectx, ctxModel, input, tb, cb, - x0+dx, y0+dy, x0,y0, - log2TbSize-1, i, - TrafoDepth+1, MaxTrafoDepth, IntraSplitFlag); + //descend(tb,"intra"); + tb->children[i] = mAlgo_TB_IntraPredMode->analyze(ectx, ctxModel, input, + child_tb, + TrafoDepth+1, MaxTrafoDepth, + IntraSplitFlag); + //ascend("bits:%f",tb->rate); } else { - tb->children[i] = this->analyze(ectx, ctxModel, input, tb, cb, - x0+dx, y0+dy, x0,y0, - log2TbSize-1, i, - TrafoDepth+1, MaxTrafoDepth, IntraSplitFlag); + //descend(tb,"inter"); + tb->children[i] = this->analyze(ectx, ctxModel, input, + child_tb, TrafoDepth+1, MaxTrafoDepth, IntraSplitFlag); + //ascend(); } + ascend(); + tb->distortion += tb->children[i]->distortion; tb->rate_withoutCbfChroma += tb->children[i]->rate_withoutCbfChroma; } @@ -359,7 +352,7 @@ - const seq_parameter_set* sps = &ectx->img->sps; + const seq_parameter_set* sps = &ectx->img->get_sps(); if (log2TbSize <= sps->Log2MaxTrafoSize && log2TbSize > sps->Log2MinTrafoSize && @@ -377,149 +370,8 @@ ctxModel[CONTEXT_MODEL_CBF_CHROMA+i] = ctxModelCbfChroma[i]; } - recursive_cbfChroma(&estim,tb, log2TbSize, TrafoDepth); - //tb->rate = tb->rate_withoutCbfChroma + estim.getRDBits(); + tb->rate = (tb->rate_withoutCbfChroma + + recursive_cbfChroma_rate(&estim,tb, log2TbSize, TrafoDepth)); return tb; } - - - -struct Logging_TB_Split : public Logging -{ - int skipTBSplit, noskipTBSplit; - int zeroBlockCorrelation[6][2][5]; - - const char* name() const { return "tb-split"; } - - void print(const encoder_context* ectx, const char* filename) - { - printf("%d %d\n\n",skipTBSplit, noskipTBSplit); - - for (int tb=3;tb<=5;tb++) { - for (int z=0;z<=1;z++) { - float total = 0; - - for (int c=0;c<5;c++) - total += zeroBlockCorrelation[tb][z][c]; - - for (int c=0;c<5;c++) { - printf("%d %d %d : %d %5.2f\n", tb,z,c, - zeroBlockCorrelation[tb][z][c], - total==0 ? 0 : zeroBlockCorrelation[tb][z][c]/total*100); - } - } - } - - - for (int z=0;z<2;z++) { - printf("\n"); - for (int tb=3;tb<=5;tb++) { - float total = 0; - - for (int c=0;c<5;c++) - total += zeroBlockCorrelation[tb][z][c]; - - printf("%dx%d ",1<<tb,1<<tb); - - for (int c=0;c<5;c++) { - printf("%5.2f ", total==0 ? 0 : zeroBlockCorrelation[tb][z][c]/total*100); - } - printf("\n"); - } - } - } -} logging_tb_split; - - - -enc_tb* -Algo_TB_Split_BruteForce::analyze(encoder_context* ectx, - context_model_table& ctxModel, - const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, int log2TbSize, - int blkIdx, - int TrafoDepth, int MaxTrafoDepth, - int IntraSplitFlag) -{ - bool test_split = (log2TbSize > 2 && - TrafoDepth < MaxTrafoDepth && - log2TbSize > ectx->sps.Log2MinTrafoSize); - - bool test_no_split = true; - if (IntraSplitFlag && TrafoDepth==0) test_no_split=false; // we have to split - if (log2TbSize > ectx->sps.Log2MaxTrafoSize) test_no_split=false; - - context_model_table ctxSplit; - if (test_split) { - ctxSplit = ctxModel.copy(); - } - - - enc_tb* tb_no_split = NULL; - enc_tb* tb_split = NULL; - float rd_cost_no_split = std::numeric_limits<float>::max(); - float rd_cost_split = std::numeric_limits<float>::max(); - - if (test_no_split) { - tb_no_split = encode_transform_tree_no_split(ectx, ctxModel, input, parent, - cb, x0,y0, xBase,yBase, log2TbSize, - blkIdx, - TrafoDepth,MaxTrafoDepth,IntraSplitFlag); - - rd_cost_no_split = tb_no_split->distortion + ectx->lambda * tb_no_split->rate; - - if (log2TbSize <= mParams.zeroBlockPrune()) { - bool zeroBlock = tb_no_split->isZeroBlock(); - - if (zeroBlock) { - test_split = false; - logging_tb_split.skipTBSplit++; - } - else - logging_tb_split.noskipTBSplit++; - } - } - - - if (test_split) { - tb_split = encode_transform_tree_split(ectx, ctxSplit, input, parent, cb, - x0,y0, log2TbSize, - TrafoDepth, MaxTrafoDepth, IntraSplitFlag); - - rd_cost_split = tb_split->distortion + ectx->lambda * tb_split->rate; - } - - - if (test_split && test_no_split) { - bool zero_block = tb_no_split->isZeroBlock(); - - int nChildZero = 0; - for (int i=0;i<4;i++) { - if (tb_split->children[i]->isZeroBlock()) nChildZero++; - } - - logging_tb_split.zeroBlockCorrelation[log2TbSize][zero_block ? 0 : 1][nChildZero]++; - } - - - bool split = (rd_cost_split < rd_cost_no_split); - - if (split) { - ctxModel = ctxSplit; - - delete tb_no_split; - assert(tb_split); - return tb_split; - } - else { - delete tb_split; - assert(tb_no_split); - tb_no_split->reconstruct(ectx, ectx->img, - cb, blkIdx); - - return tb_no_split; - } -}
View file
libde265-1.0.2.tar.gz/libde265/encoder/algo/tb-split.h -> libde265-1.0.3.tar.gz/libde265/encoder/algo/tb-split.h
Changed
@@ -25,7 +25,8 @@ #include "libde265/nal-parser.h" #include "libde265/decctx.h" -#include "libde265/encoder/encode.h" +#include "libde265/encoder/encoder-types.h" +#include "libde265/encoder/algo/algo.h" #include "libde265/slice.h" #include "libde265/scan.h" #include "libde265/intrapred.h" @@ -36,64 +37,37 @@ #include "libde265/configparam.h" #include "libde265/encoder/algo/tb-intrapredmode.h" - - -/* Encoder search tree, bottom up: - - - Algo_TB_Split - whether TB is split or not - - - Algo_TB_IntraPredMode - choose the intra prediction mode (or NOP, if at the wrong tree level) - - - Algo_CB_IntraPartMode - choose between NxN and 2Nx2N intra parts - - - Algo_CB_Split - whether CB is split or not - - - Algo_CTB_QScale - select QScale on CTB granularity - */ - -/* -struct ResidualBlock -{ - const int16_t* data[4]; - int stride[4]; -}; -*/ - -void diff_blk(int16_t* out,int out_stride, - const uint8_t* a_ptr, int a_stride, - const uint8_t* b_ptr, int b_stride, - int blkSize); +#include "libde265/encoder/algo/tb-rateestim.h" +#include "libde265/encoder/algo/tb-transform.h" // ========== TB split decision ========== -class Algo_TB_Split +class Algo_TB_Split : public Algo { public: - Algo_TB_Split() : mAlgo_TB_IntraPredMode(NULL) { } + Algo_TB_Split() : mAlgo_TB_IntraPredMode(NULL) { } virtual ~Algo_TB_Split() { } virtual enc_tb* analyze(encoder_context*, context_model_table&, const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, int log2TbSize, - int blkIdx, + enc_tb* tb, int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag) = 0; void setAlgo_TB_IntraPredMode(Algo_TB_IntraPredMode* algo) { mAlgo_TB_IntraPredMode=algo; } + void setAlgo_TB_Residual(Algo_TB_Residual* algo) { mAlgo_TB_Residual=algo; } protected: enc_tb* encode_transform_tree_split(encoder_context* ectx, context_model_table& ctxModel, const de265_image* input, - const enc_tb* parent, + enc_tb* tb, enc_cb* cb, - int x0,int y0, int log2TbSize, int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag); Algo_TB_IntraPredMode* mAlgo_TB_IntraPredMode; + Algo_TB_Residual* mAlgo_TB_Residual; }; @@ -118,6 +92,7 @@ } }; + class Algo_TB_Split_BruteForce : public Algo_TB_Split { public: @@ -139,12 +114,11 @@ virtual enc_tb* analyze(encoder_context*, context_model_table&, const de265_image* input, - const enc_tb* parent, - enc_cb* cb, - int x0,int y0, int xBase,int yBase, int log2TbSize, - int blkIdx, + enc_tb* tb, int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag); + const char* name() const { return "tb-split-bruteforce"; } + private: params mParams; };
View file
libde265-1.0.3.tar.gz/libde265/encoder/algo/tb-transform.cc
Added
@@ -0,0 +1,254 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "libde265/encoder/algo/tb-transform.h" +#include "libde265/encoder/encoder-core.h" +#include "libde265/encoder/encoder-context.h" +#include "libde265/encoder/encoder-syntax.h" +#include <assert.h> +#include <limits> +#include <math.h> +#include <iostream> + + +// DEPRECATED IN THIS FILE +void diff_blk(int16_t* out,int out_stride, + const uint8_t* a_ptr, int a_stride, + const uint8_t* b_ptr, int b_stride, + int blkSize) +{ + for (int by=0;by<blkSize;by++) + for (int bx=0;bx<blkSize;bx++) + { + out[by*out_stride+bx] = a_ptr[by*a_stride+bx] - b_ptr[by*b_stride+bx]; + } +} + + +static bool has_nonzero_value(const int16_t* data, int n) +{ + for (int i=0;i<n;i++) + if (data[i]) return true; + + return false; +} + + +void compute_transform_coeffs(encoder_context* ectx, + enc_tb* tb, + const de265_image* input, // TODO: probably pass pixels/stride directly + //int16_t* residual, int stride, + int x0,int y0, // luma position + int log2TbSize, // chroma adapted + const enc_cb* cb, + int cIdx) +{ + int xC = x0; + int yC = y0; + int tbSize = 1<<log2TbSize; + if (cIdx>0) { xC>>=1; yC>>=1; } + + enum PredMode predMode = cb->PredMode; + + int16_t blk[32*32]; // residual + int16_t* residual; + + + //printf("transform-coeffs %d;%d size:%d cIdx:%d\n", tb->x,tb->y,1<<tb->log2Size,cIdx); + + // --- do intra prediction --- + + if (predMode==MODE_INTRA) { + residual = tb->residual[cIdx]->get_buffer_s16(); + + //printf("intra residual: %p stride: %d\n",residual, tb->residual[cIdx]->get_stride()); + } + else { + // --- subtract prediction from input image --- + + /* TMP REMOVE: ectx->prediction does not exist anymore + + uint8_t* pred = ectx->prediction->get_image_plane(cIdx); + int stride = ectx->prediction->get_image_stride(cIdx); + + //printBlk("input",input->get_image_plane_at_pos(cIdx,xC,yC), tbSize, input->get_image_stride(cIdx)); + //printBlk("prediction", pred,tbSize, stride); + + diff_blk(blk,tbSize, + input->get_image_plane_at_pos(cIdx,xC,yC), input->get_image_stride(cIdx), + &pred[yC*stride+xC],stride, tbSize); + + residual=blk; + */ + + //printBlk("residual", blk,tbSize,tbSize); + } + + + + + + // --- forward transform --- + + tb->alloc_coeff_memory(cIdx, tbSize); + + + // transformation mode (DST or DCT) + + int trType; + if (cIdx==0 && log2TbSize==2 && predMode==MODE_INTRA) trType=1; // TODO: inter mode + else trType=0; + + + // do forward transform + + fwd_transform(&ectx->acceleration, tb->coeff[cIdx], tbSize, log2TbSize, trType, residual, tbSize); + + + // --- quantization --- + + quant_coefficients(tb->coeff[cIdx], tb->coeff[cIdx], log2TbSize, cb->qp, true); + + + // set CBF to 0 if there are no non-zero coefficients + + tb->cbf[cIdx] = has_nonzero_value(tb->coeff[cIdx], 1<<(log2TbSize<<1)); +} + + +enc_tb* Algo_TB_Transform::analyze(encoder_context* ectx, + context_model_table& ctxModel, + const de265_image* input, + enc_tb* tb, + int trafoDepth, int MaxTrafoDepth, + int IntraSplitFlag) +{ + enter(); + + const enc_cb* cb = tb->cb; + *tb->downPtr = tb; // TODO: should be obsolet + + de265_image* img = ectx->img; + + int stride = ectx->img->get_image_stride(0); + + uint8_t* luma_plane = ectx->img->get_image_plane(0); + uint8_t* cb_plane = ectx->img->get_image_plane(1); + uint8_t* cr_plane = ectx->img->get_image_plane(2); + + // --- compute transform coefficients --- + + int x0 = tb->x; + int y0 = tb->y; + int xBase = cb->x; + int yBase = cb->y; + int log2TbSize = tb->log2Size; + + // luma block + + compute_transform_coeffs(ectx, tb, input, x0,y0, log2TbSize, cb, 0 /* Y */); + + + // chroma blocks + + if (ectx->get_sps().chroma_format_idc == CHROMA_444) { + compute_transform_coeffs(ectx, tb, input, x0,y0, log2TbSize, cb, 1 /* Cb */); + compute_transform_coeffs(ectx, tb, input, x0,y0, log2TbSize, cb, 2 /* Cr */); + } + else if (log2TbSize > 2) { + // if TB is > 4x4, do chroma transform of half size + compute_transform_coeffs(ectx, tb, input, x0,y0, log2TbSize-1, cb, 1 /* Cb */); + compute_transform_coeffs(ectx, tb, input, x0,y0, log2TbSize-1, cb, 2 /* Cr */); + } + else if (tb->blkIdx==3) { + // if TB size is 4x4, do chroma transform for last sub-block + compute_transform_coeffs(ectx, tb, input, xBase,yBase, log2TbSize, cb, 1 /* Cb */); + compute_transform_coeffs(ectx, tb, input, xBase,yBase, log2TbSize, cb, 2 /* Cr */); + } + + + // --- reconstruction --- + + /* We could compute the reconstruction lazy on first access. However, we currently + use it right away for computing the distortion. + */ + tb->reconstruct(ectx, ectx->img); + + + // measure rate + + CABAC_encoder_estim estim; + estim.set_context_models(&ctxModel); + + + tb->rate_withoutCbfChroma = 0; + + const seq_parameter_set* sps = &ectx->img->get_sps(); + + + if (log2TbSize <= sps->Log2MaxTrafoSize && + log2TbSize > sps->Log2MinTrafoSize && + trafoDepth < MaxTrafoDepth && + !(IntraSplitFlag && trafoDepth==0)) + { + encode_split_transform_flag(ectx, &estim, log2TbSize, 0); + tb->rate_withoutCbfChroma += estim.getRDBits(); + estim.reset(); + } + + // --- CBF CB/CR --- + + float luma_cbf_bits = 0; + if (cb->PredMode == MODE_INTRA || trafoDepth != 0 || + tb->cbf[1] || tb->cbf[2]) { + encode_cbf_luma(&estim, trafoDepth==0, tb->cbf[0]); + luma_cbf_bits = estim.getRDBits(); + } + + descend(tb,"DCT"); + float bits = mAlgo_TB_RateEstimation->encode_transform_unit(ectx,ctxModel, + tb,cb, x0,y0, xBase,yBase, + log2TbSize, trafoDepth, tb->blkIdx); + ascend(); + + tb->rate_withoutCbfChroma += bits + luma_cbf_bits; + + estim.reset(); // TODO: not needed ? + + tb->rate = (tb->rate_withoutCbfChroma + + recursive_cbfChroma_rate(&estim,tb,log2TbSize,trafoDepth)); + + //float rate_cbfChroma = estim.getRDBits(); + //tb->rate = tb->rate_withoutCbfChroma + rate_cbfChroma; + + + // measure distortion + + int tbSize = 1<<log2TbSize; + tb->distortion = SSD(input->get_image_plane_at_pos(0, x0,y0), input->get_image_stride(0), + tb->reconstruction[0]->get_buffer_u8(), + tb->reconstruction[0]->getStride(), + tbSize, tbSize); + + return tb; +}
View file
libde265-1.0.3.tar.gz/libde265/encoder/algo/tb-transform.h
Added
@@ -0,0 +1,86 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TB_TRANSFORM_H +#define TB_TRANSFORM_H + +#include "libde265/nal-parser.h" +#include "libde265/decctx.h" +#include "libde265/encoder/encoder-types.h" +#include "libde265/encoder/algo/algo.h" +#include "libde265/slice.h" +#include "libde265/scan.h" +#include "libde265/intrapred.h" +#include "libde265/transform.h" +#include "libde265/fallback-dct.h" +#include "libde265/quality.h" +#include "libde265/fallback.h" +#include "libde265/configparam.h" + +#include "libde265/encoder/algo/tb-intrapredmode.h" +#include "libde265/encoder/algo/tb-rateestim.h" + + +void diff_blk(int16_t* out,int out_stride, + const uint8_t* a_ptr, int a_stride, + const uint8_t* b_ptr, int b_stride, + int blkSize); + + +// ========== TB split decision ========== + +class Algo_TB_Residual : public Algo +{ +public: + Algo_TB_Residual() { } + + virtual enc_tb* analyze(encoder_context*, + context_model_table&, + const de265_image* input, + enc_tb* tb, + int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag) = 0; + + const char* name() const { return "residual-unknown"; } +}; + + +class Algo_TB_Transform : public Algo_TB_Residual +{ +public: + Algo_TB_Transform() : mAlgo_TB_RateEstimation(NULL) { } + + virtual enc_tb* analyze(encoder_context*, + context_model_table&, + const de265_image* input, + enc_tb* parent, + int TrafoDepth, int MaxTrafoDepth, int IntraSplitFlag); + + void setAlgo_TB_RateEstimation(Algo_TB_RateEstimation* algo) { mAlgo_TB_RateEstimation=algo; } + + const char* name() const { return "residual-FDCT"; } + + protected: + Algo_TB_RateEstimation* mAlgo_TB_RateEstimation; +}; + + +#endif
View file
libde265-1.0.2.tar.gz/libde265/encoder/encoder-context.cc -> libde265-1.0.3.tar.gz/libde265/encoder/encoder-context.cc
Changed
@@ -21,7 +21,6 @@ */ #include "encoder/encoder-context.h" -#include "encoder/analyze.h" #include "libde265/util.h" #include <math.h> @@ -31,6 +30,10 @@ { encoder_started=false; + vps = std::make_shared<video_parameter_set>(); + sps = std::make_shared<seq_parameter_set>(); + pps = std::make_shared<pic_parameter_set>(); + //img_source = NULL; //reconstruction_sink = NULL; //packet_sink = NULL; @@ -126,33 +129,43 @@ // VPS - vps.set_defaults(Profile_Main, 6,2); + vps->set_defaults(Profile_Main, 6,2); // SPS - sps.set_defaults(); - sps.set_CB_log2size_range( Log2(params.min_cb_size), Log2(params.max_cb_size)); - sps.set_TB_log2size_range( Log2(params.min_tb_size), Log2(params.max_tb_size)); - sps.max_transform_hierarchy_depth_intra = params.max_transform_hierarchy_depth_intra; + sps->set_defaults(); + sps->set_CB_log2size_range( Log2(params.min_cb_size), Log2(params.max_cb_size)); + sps->set_TB_log2size_range( Log2(params.min_tb_size), Log2(params.max_tb_size)); + sps->max_transform_hierarchy_depth_intra = params.max_transform_hierarchy_depth_intra; + sps->max_transform_hierarchy_depth_inter = params.max_transform_hierarchy_depth_inter; + + if (imgdata->input->get_chroma_format() == de265_chroma_444) { + sps->chroma_format_idc = CHROMA_444; + } - sps.set_resolution(image_width, image_height); + sps->set_resolution(image_width, image_height); sop->set_SPS_header_values(); - sps.compute_derived_values(); + de265_error err = sps->compute_derived_values(true); + if (err != DE265_OK) { + fprintf(stderr,"invalid SPS parameters\n"); + exit(10); + } // PPS - pps.set_defaults(); - pps.pic_init_qp = algo.getPPS_QP(); + pps->set_defaults(); + pps->sps = sps.get(); + pps->pic_init_qp = algo.getPPS_QP(); // turn off deblocking filter - pps.deblocking_filter_control_present_flag = true; - pps.deblocking_filter_override_enabled_flag = false; - pps.pic_disable_deblocking_filter_flag = true; - pps.pps_loop_filter_across_slices_enabled_flag = false; + pps->deblocking_filter_control_present_flag = true; + pps->deblocking_filter_override_enabled_flag = false; + pps->pic_disable_deblocking_filter_flag = true; + pps->pps_loop_filter_across_slices_enabled_flag = false; - pps.set_derived_values(&sps); + pps->set_derived_values(sps.get()); @@ -162,7 +175,7 @@ nal.set(NAL_UNIT_VPS_NUT); nal.write(cabac_encoder); - vps.write(this, cabac_encoder); + vps->write(this, cabac_encoder); cabac_encoder.add_trailing_bits(); cabac_encoder.flush_VLC(); pck = create_packet(EN265_PACKET_VPS); @@ -171,7 +184,7 @@ nal.set(NAL_UNIT_SPS_NUT); nal.write(cabac_encoder); - sps.write(this, cabac_encoder); + sps->write(this, cabac_encoder); cabac_encoder.add_trailing_bits(); cabac_encoder.flush_VLC(); pck = create_packet(EN265_PACKET_SPS); @@ -180,7 +193,7 @@ nal.set(NAL_UNIT_PPS_NUT); nal.write(cabac_encoder); - pps.write(this, cabac_encoder, &sps); + pps->write(this, cabac_encoder, sps.get()); cabac_encoder.add_trailing_bits(); cabac_encoder.flush_VLC(); pck = create_packet(EN265_PACKET_PPS); @@ -207,6 +220,8 @@ image_width = id->input->get_width(); image_height = id->input->get_height(); image_spec_is_defined = true; + + ctbs.alloc(image_width, image_height, Log2(params.max_cb_size)); } @@ -224,11 +239,6 @@ } - if (!headers_have_been_sent) { - encode_headers(); - } - - @@ -242,18 +252,27 @@ loginfo(LogEncoder,"encoding frame %d\n",imgdata->frame_number); + // write headers if not written yet + + if (!headers_have_been_sent) { + encode_headers(); + } + + // write slice header // slice imgdata->shdr.slice_deblocking_filter_disabled_flag = true; imgdata->shdr.slice_loop_filter_across_slices_enabled_flag = false; - imgdata->shdr.compute_derived_values(&pps); + imgdata->shdr.compute_derived_values(pps.get()); + + imgdata->shdr.pps = &get_pps(); //shdr.slice_pic_order_cnt_lsb = poc & 0xFF; imgdata->nal.write(cabac_encoder); - imgdata->shdr.write(this, cabac_encoder, &sps, &pps, imgdata->nal.nal_unit_type); + imgdata->shdr.write(this, cabac_encoder, sps.get(), pps.get(), imgdata->nal.nal_unit_type); cabac_encoder.add_trailing_bits(); cabac_encoder.flush_VLC();
View file
libde265-1.0.2.tar.gz/libde265/encoder/encoder-context.h -> libde265-1.0.3.tar.gz/libde265/encoder/encoder-context.h
Changed
@@ -54,7 +54,7 @@ encoder_params params; config_parameters params_config; - EncodingAlgorithm_Custom algo; + EncoderCore_Custom algo; int image_width, image_height; bool image_spec_is_defined; // whether we know the input image size @@ -69,10 +69,12 @@ // quick links de265_image* img; // reconstruction - de265_image* prediction; + //de265_image* prediction; image_data* imgdata; // input image slice_segment_header* shdr; + CTBTreeMatrix ctbs; + // temporary memory for motion compensated pixels (when CB-algo passes this down to TB-algo) //uint8_t prediction[3][64*64]; // stride: 1<<(cb->log2Size) //int prediction_x0,prediction_y0; @@ -82,11 +84,23 @@ /*int target_qp;*/ /* QP we want to code at. (Not actually the real QP. Check image.get_QPY() for that.) */ - video_parameter_set vps; - seq_parameter_set sps; - pic_parameter_set pps; + const seq_parameter_set& get_sps() const { return *sps; } + const pic_parameter_set& get_pps() const { return *pps; } + + seq_parameter_set& get_sps() { return *sps; } + pic_parameter_set& get_pps() { return *pps; } + + std::shared_ptr<video_parameter_set>& get_shared_vps() { return vps; } + std::shared_ptr<seq_parameter_set>& get_shared_sps() { return sps; } + std::shared_ptr<pic_parameter_set>& get_shared_pps() { return pps; } + + private: + std::shared_ptr<video_parameter_set> vps; + std::shared_ptr<seq_parameter_set> sps; + std::shared_ptr<pic_parameter_set> pps; //slice_segment_header shdr; + public: bool parameters_have_been_set; bool headers_have_been_sent;
View file
libde265-1.0.3.tar.gz/libde265/encoder/encoder-core.cc
Added
@@ -0,0 +1,428 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "libde265/encoder/encoder-core.h" +#include "libde265/encoder/encoder-context.h" +#include "libde265/encoder/encoder-syntax.h" +#include <assert.h> +#include <limits> +#include <math.h> +#include <iostream> +#include <fstream> + + +#define ENCODER_DEVELOPMENT 0 +#define COMPARE_ESTIMATED_RATE_TO_REAL_RATE 0 + + +static int IntraPredModeCnt[7][35]; +static int MPM_used[7][35]; + +static int IntraPredModeCnt_total[35]; +static int MPM_used_total[35]; + +/* +void statistics_IntraPredMode(const encoder_context* ectx, int x,int y, const enc_cb* cb) +{ + if (cb->split_cu_flag) { + for (int i=0;i<4;i++) + if (cb->children[i]) { + statistics_IntraPredMode(ectx, childX(x,i,cb->log2Size), childY(y,i,cb->log2Size), cb->children[i]); + } + } + else { + int cnt; + int size = cb->log2Size; + + if (cb->PartMode == PART_NxN) { cnt=4; size--; } else cnt=1; + + for (int i=0;i<cnt;i++) { + IntraPredModeCnt[size][ cb->intra.pred_mode[i] ]++; + IntraPredModeCnt_total[ cb->intra.pred_mode[i] ]++; + + int xi = childX(x,i,cb->log2Size); + int yi = childY(y,i,cb->log2Size); + + enum IntraPredMode candModeList[3]; + fillIntraPredModeCandidates(candModeList,xi,yi, xi>0, yi>0, ectx->img); + + int predmode = cb->intra.pred_mode[i]; + if (candModeList[0]==predmode || + candModeList[1]==predmode || + candModeList[2]==predmode) { + MPM_used[size][predmode]++; + MPM_used_total[predmode]++; + } + } + } +} +*/ + +void statistics_print() +{ + for (int i=0;i<35;i++) { + printf("%d",i); + printf(" %d %d",IntraPredModeCnt_total[i], MPM_used_total[i]); + + for (int k=2;k<=6;k++) { + printf(" %d %d",IntraPredModeCnt[k][i], MPM_used[k][i]); + } + + printf("\n"); + } +} + + +void print_tb_tree_rates(const enc_tb* tb, int level) +{ + for (int i=0;i<level;i++) + std::cout << " "; + + std::cout << "TB rate=" << tb->rate << " (" << tb->rate_withoutCbfChroma << ")\n"; + if (tb->split_transform_flag) { + for (int i=0;i<4;i++) + print_tb_tree_rates(tb->children[i], level+1); + } +} + + +void print_cb_tree_rates(const enc_cb* cb, int level) +{ + for (int i=0;i<level;i++) + std::cout << " "; + + std::cout << "CB rate=" << cb->rate << "\n"; + if (cb->split_cu_flag) { + for (int i=0;i<4;i++) + print_cb_tree_rates(cb->children[i], level+1); + } + else { + print_tb_tree_rates(cb->transform_tree, level+1); + } +} + + +// /*LIBDE265_API*/ ImageSink_YUV reconstruction_sink; + +double encode_image(encoder_context* ectx, + const de265_image* input, + EncoderCore& algo) +{ + int stride=input->get_image_stride(0); + + int w = ectx->get_sps().pic_width_in_luma_samples; + int h = ectx->get_sps().pic_height_in_luma_samples; + + // --- create reconstruction image --- + ectx->img = new de265_image; + ectx->img->set_headers(ectx->get_shared_vps(), ectx->get_shared_sps(), ectx->get_shared_pps()); + ectx->img->PicOrderCntVal = input->PicOrderCntVal; + + ectx->img->alloc_image(w,h, input->get_chroma_format(), ectx->get_shared_sps(), true, + NULL /* no decctx */, ectx, 0,NULL,false); + //ectx->img->alloc_encoder_data(&ectx->sps); + ectx->img->clear_metadata(); + +#if 0 + if (1) { + ectx->prediction = new de265_image; + ectx->prediction->alloc_image(w,h, input->get_chroma_format(), &ectx->sps, false /* no metadata */, + NULL /* no decctx */, NULL /* no encctx */, 0,NULL,false); + ectx->prediction->vps = ectx->vps; + ectx->prediction->sps = ectx->sps; + ectx->prediction->pps = ectx->pps; + } +#endif + + ectx->active_qp = ectx->get_pps().pic_init_qp; // TODO take current qp from slice + + + ectx->cabac_ctx_models.init(ectx->shdr->initType, ectx->shdr->SliceQPY); + ectx->cabac_encoder.set_context_models(&ectx->cabac_ctx_models); + + + context_model_table modelEstim; + CABAC_encoder_estim cabacEstim; + + modelEstim.init(ectx->shdr->initType, ectx->shdr->SliceQPY); + cabacEstim.set_context_models(&modelEstim); + + + int Log2CtbSize = ectx->get_sps().Log2CtbSizeY; + + uint8_t* luma_plane = ectx->img->get_image_plane(0); + uint8_t* cb_plane = ectx->img->get_image_plane(1); + uint8_t* cr_plane = ectx->img->get_image_plane(2); + + double mse=0; + + + // encode CTB by CTB + + ectx->ctbs.clear(); + + for (int y=0;y<ectx->get_sps().PicHeightInCtbsY;y++) + for (int x=0;x<ectx->get_sps().PicWidthInCtbsY;x++) + { + ectx->img->set_SliceAddrRS(x, y, ectx->shdr->SliceAddrRS); + + int x0 = x<<Log2CtbSize; + int y0 = y<<Log2CtbSize; + + logtrace(LogSlice,"encode CTB at %d %d\n",x0,y0); + + // make a copy of the context model that we can modify for testing alternatives + + context_model_table ctxModel; + //copy_context_model_table(ctxModel, ectx->ctx_model_bitstream); + ctxModel = ectx->cabac_ctx_models.copy(); + ctxModel = modelEstim.copy(); // TODO TMP + + disable_logging(LogSymbols); + enable_logging(LogSymbols); // TODO TMP + + //printf("================================================== ANALYZE\n"); + +#if 1 + /* + enc_cb* cb = encode_cb_may_split(ectx, ctxModel, + input, x0,y0, Log2CtbSize, 0, qp); + */ + + enc_cb* cb = algo.getAlgoCTBQScale()->analyze(ectx,ctxModel, x0,y0); +#else + float minCost = std::numeric_limits<float>::max(); + int bestQ = 0; + int qp = ectx->params.constant_QP; + + enc_cb* cb; + for (int q=1;q<51;q++) { + copy_context_model_table(ctxModel, ectx->ctx_model_bitstream); + + enc_cb* cbq = encode_cb_may_split(ectx, ctxModel, + input, x0,y0, Log2CtbSize, 0, q); + + float cost = cbq->distortion + ectx->lambda * cbq->rate; + if (cost<minCost) { minCost=cost; bestQ=q; } + + if (q==qp) { cb=cbq; } + } + + printf("Q %d\n",bestQ); + fflush(stdout); +#endif + + //print_cb_tree_rates(cb,0); + + //statistics_IntraPredMode(ectx, x0,y0, cb); + + + // --- write bitstream --- + + //ectx->switch_CABAC_to_bitstream(); + + enable_logging(LogSymbols); + + logdebug(LogEncoder,"write CTB %d;%d\n",x,y); + + if (logdebug_enabled(LogEncoder)) { + cb->debug_dumpTree(enc_tb::DUMPTREE_ALL); + } + + /* + cb->debug_assertTreeConsistency(ectx->img); + + //cb->invalidateMetadataInSubTree(ectx->img); + cb->writeMetadata(ectx, ectx->img, + enc_node::METADATA_INTRA_MODES | + enc_node::METADATA_RECONSTRUCTION | + enc_node::METADATA_CT_DEPTH); + + cb->debug_assertTreeConsistency(ectx->img); + */ + + encode_ctb(ectx, &ectx->cabac_encoder, cb, x,y); + + //printf("================================================== WRITE\n"); + + + if (COMPARE_ESTIMATED_RATE_TO_REAL_RATE) { + float realPre = cabacEstim.getRDBits(); + encode_ctb(ectx, &cabacEstim, cb, x,y); + float realPost = cabacEstim.getRDBits(); + + printf("estim: %f real: %f diff: %f\n", + cb->rate, + realPost-realPre, + cb->rate - (realPost-realPre)); + } + + + int last = (y==ectx->get_sps().PicHeightInCtbsY-1 && + x==ectx->get_sps().PicWidthInCtbsY-1); + ectx->cabac_encoder.write_CABAC_term_bit(last); + + //delete cb; + + //ectx->free_all_pools(); + + mse += cb->distortion; + } + + mse /= ectx->img->get_width() * ectx->img->get_height(); + + + //reconstruction_sink.send_image(ectx->img); + + + //statistics_print(); + + + //delete ectx->prediction; + + + // frame PSNR + + ectx->ctbs.writeReconstructionToImage(ectx->img, &ectx->get_sps()); + +#if 0 + std::ofstream ostr("out.pgm"); + ostr << "P5\n" << ectx->img->get_width() << " " << ectx->img->get_height() << "\n255\n"; + for (int y=0;y<ectx->img->get_height();y++) { + ostr.write( (char*)ectx->img->get_image_plane_at_pos(0,0,y), ectx->img->get_width() ); + } +#endif + + double psnr = 10*log10(255.0*255.0 / mse); + +#if 0 + double psnr2 = PSNR(MSE(input->get_image_plane(0), input->get_image_stride(0), + luma_plane, ectx->img->get_image_stride(0), + input->get_width(), input->get_height())); + + printf("rate-estim PSNR: %f vs %f\n",psnr,psnr2); +#endif + + return psnr; +} + + + +void EncoderCore_Custom::setParams(encoder_params& params) +{ + // build algorithm tree + + mAlgo_CTB_QScale_Constant.setChildAlgo(&mAlgo_CB_Split_BruteForce); + mAlgo_CB_Split_BruteForce.setChildAlgo(&mAlgo_CB_Skip_BruteForce); + + mAlgo_CB_Skip_BruteForce.setSkipAlgo(&mAlgo_CB_MergeIndex_Fixed); + mAlgo_CB_Skip_BruteForce.setNonSkipAlgo(&mAlgo_CB_IntraInter_BruteForce); + //&mAlgo_CB_InterPartMode_Fixed); + + Algo_CB_IntraPartMode* algo_CB_IntraPartMode = NULL; + switch (params.mAlgo_CB_IntraPartMode()) { + case ALGO_CB_IntraPartMode_BruteForce: + algo_CB_IntraPartMode = &mAlgo_CB_IntraPartMode_BruteForce; + break; + case ALGO_CB_IntraPartMode_Fixed: + algo_CB_IntraPartMode = &mAlgo_CB_IntraPartMode_Fixed; + break; + } + + mAlgo_CB_IntraInter_BruteForce.setIntraChildAlgo(algo_CB_IntraPartMode); + mAlgo_CB_IntraInter_BruteForce.setInterChildAlgo(&mAlgo_CB_InterPartMode_Fixed); + + mAlgo_CB_MergeIndex_Fixed.setChildAlgo(&mAlgo_TB_Split_BruteForce); + + Algo_PB_MV* pbAlgo = NULL; + switch (params.mAlgo_MEMode()) { + case MEMode_Test: + pbAlgo = &mAlgo_PB_MV_Test; + break; + case MEMode_Search: + pbAlgo = &mAlgo_PB_MV_Search; + break; + } + + mAlgo_CB_InterPartMode_Fixed.setChildAlgo(pbAlgo); + pbAlgo->setChildAlgo(&mAlgo_TB_Split_BruteForce); + + + Algo_TB_IntraPredMode_ModeSubset* algo_TB_IntraPredMode = NULL; + switch (params.mAlgo_TB_IntraPredMode()) { + case ALGO_TB_IntraPredMode_BruteForce: + algo_TB_IntraPredMode = &mAlgo_TB_IntraPredMode_BruteForce; + break; + case ALGO_TB_IntraPredMode_FastBrute: + algo_TB_IntraPredMode = &mAlgo_TB_IntraPredMode_FastBrute; + break; + case ALGO_TB_IntraPredMode_MinResidual: + algo_TB_IntraPredMode = &mAlgo_TB_IntraPredMode_MinResidual; + break; + } + + algo_CB_IntraPartMode->setChildAlgo(algo_TB_IntraPredMode); + + mAlgo_TB_Split_BruteForce.setAlgo_TB_IntraPredMode(algo_TB_IntraPredMode); + mAlgo_TB_Split_BruteForce.setAlgo_TB_Residual(&mAlgo_TB_Transform); + + Algo_TB_RateEstimation* algo_TB_RateEstimation = NULL; + switch (params.mAlgo_TB_RateEstimation()) { + case ALGO_TB_RateEstimation_None: algo_TB_RateEstimation = &mAlgo_TB_RateEstimation_None; break; + case ALGO_TB_RateEstimation_Exact: algo_TB_RateEstimation = &mAlgo_TB_RateEstimation_Exact; break; + } + mAlgo_TB_Transform.setAlgo_TB_RateEstimation(algo_TB_RateEstimation); + //mAlgo_TB_Split_BruteForce.setParams(params.TB_Split_BruteForce); + + algo_TB_IntraPredMode->setChildAlgo(&mAlgo_TB_Split_BruteForce); + + + // ===== set algorithm parameters ====== + + //mAlgo_CB_IntraPartMode_Fixed.setParams(params.CB_IntraPartMode_Fixed); + + //mAlgo_TB_IntraPredMode_FastBrute.setParams(params.TB_IntraPredMode_FastBrute); + //mAlgo_TB_IntraPredMode_MinResidual.setParams(params.TB_IntraPredMode_MinResidual); + + + //mAlgo_CTB_QScale_Constant.setParams(params.CTB_QScale_Constant); + + + algo_TB_IntraPredMode->enableIntraPredModeSubset( params.mAlgo_TB_IntraPredMode_Subset() ); +} + + +void Logging::print_logging(const encoder_context* ectx, const char* id, const char* filename) +{ +#if 000 + if (strcmp(id,logging_tb_split.name())==0) { + logging_tb_split.print(ectx,filename); + } +#endif +} + + +void en265_print_logging(const encoder_context* ectx, const char* id, const char* filename) +{ + Logging::print_logging(ectx,id,filename); +}
View file
libde265-1.0.3.tar.gz/libde265/encoder/encoder-core.h
Added
@@ -0,0 +1,151 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ANALYZE_H +#define ANALYZE_H + +#include "libde265/nal-parser.h" +#include "libde265/decctx.h" +#include "libde265/encoder/encoder-types.h" +#include "libde265/slice.h" +#include "libde265/scan.h" +#include "libde265/intrapred.h" +#include "libde265/transform.h" +#include "libde265/fallback-dct.h" +#include "libde265/quality.h" +#include "libde265/fallback.h" +#include "libde265/configparam.h" + +#include "libde265/encoder/algo/tb-intrapredmode.h" +#include "libde265/encoder/algo/tb-transform.h" +#include "libde265/encoder/algo/tb-split.h" +#include "libde265/encoder/algo/cb-intrapartmode.h" +#include "libde265/encoder/algo/cb-interpartmode.h" +#include "libde265/encoder/algo/cb-split.h" +#include "libde265/encoder/algo/ctb-qscale.h" +#include "libde265/encoder/algo/cb-mergeindex.h" +//#include "libde265/encoder/algo/cb-skip-or-inter.h" +#include "libde265/encoder/algo/pb-mv.h" +#include "libde265/encoder/algo/cb-skip.h" +#include "libde265/encoder/algo/cb-intra-inter.h" + + +/* Encoder search tree, bottom up: + + - Algo_TB_Split - whether TB is split or not + + - Algo_TB_IntraPredMode - choose the intra prediction mode (or NOP, if at the wrong tree level) + + - Algo_CB_IntraPartMode - choose between NxN and 2Nx2N intra parts + + - Algo_CB_PredMode - intra / inter + + - Algo_CB_Split - whether CB is split or not + + - Algo_CTB_QScale - select QScale on CTB granularity + */ + + +// ========== an encoding algorithm combines a set of algorithm modules ========== + +class EncoderCore +{ + public: + virtual ~EncoderCore() { } + + virtual Algo_CTB_QScale* getAlgoCTBQScale() = 0; + + virtual int getPPS_QP() const = 0; + virtual int getSlice_QPDelta() const { return 0; } +}; + + +class EncoderCore_Custom : public EncoderCore +{ + public: + + void setParams(struct encoder_params& params); + + void registerParams(config_parameters& config) { + mAlgo_CTB_QScale_Constant.registerParams(config); + mAlgo_CB_IntraPartMode_Fixed.registerParams(config); + mAlgo_CB_InterPartMode_Fixed.registerParams(config); + mAlgo_PB_MV_Test.registerParams(config); + mAlgo_PB_MV_Search.registerParams(config); + mAlgo_TB_IntraPredMode_FastBrute.registerParams(config); + mAlgo_TB_IntraPredMode_MinResidual.registerParams(config); + mAlgo_TB_Split_BruteForce.registerParams(config); + } + + virtual Algo_CTB_QScale* getAlgoCTBQScale() { return &mAlgo_CTB_QScale_Constant; } + + virtual int getPPS_QP() const { return mAlgo_CTB_QScale_Constant.getQP(); } + + private: + Algo_CTB_QScale_Constant mAlgo_CTB_QScale_Constant; + + Algo_CB_Split_BruteForce mAlgo_CB_Split_BruteForce; + Algo_CB_Skip_BruteForce mAlgo_CB_Skip_BruteForce; + Algo_CB_IntraInter_BruteForce mAlgo_CB_IntraInter_BruteForce; + + Algo_CB_IntraPartMode_BruteForce mAlgo_CB_IntraPartMode_BruteForce; + Algo_CB_IntraPartMode_Fixed mAlgo_CB_IntraPartMode_Fixed; + + Algo_CB_InterPartMode_Fixed mAlgo_CB_InterPartMode_Fixed; + Algo_CB_MergeIndex_Fixed mAlgo_CB_MergeIndex_Fixed; + + Algo_PB_MV_Test mAlgo_PB_MV_Test; + Algo_PB_MV_Search mAlgo_PB_MV_Search; + + Algo_TB_Split_BruteForce mAlgo_TB_Split_BruteForce; + + Algo_TB_IntraPredMode_BruteForce mAlgo_TB_IntraPredMode_BruteForce; + Algo_TB_IntraPredMode_FastBrute mAlgo_TB_IntraPredMode_FastBrute; + Algo_TB_IntraPredMode_MinResidual mAlgo_TB_IntraPredMode_MinResidual; + + Algo_TB_Transform mAlgo_TB_Transform; + Algo_TB_RateEstimation_None mAlgo_TB_RateEstimation_None; + Algo_TB_RateEstimation_Exact mAlgo_TB_RateEstimation_Exact; +}; + + + +double encode_image(encoder_context*, const de265_image* input, EncoderCore&); + +void encode_sequence(encoder_context*); + + +class Logging +{ +public: + virtual ~Logging() { } + + static void print_logging(const encoder_context* ectx, const char* id, const char* filename); + + virtual const char* name() const = 0; + virtual void print(const encoder_context* ectx, const char* filename) = 0; +}; + + +LIBDE265_API void en265_print_logging(const encoder_context* ectx, const char* id, const char* filename); + +#endif
View file
libde265-1.0.2.tar.gz/libde265/encoder/encoder-params.cc -> libde265-1.0.3.tar.gz/libde265/encoder/encoder-params.cc
Changed
@@ -45,12 +45,18 @@ max_transform_hierarchy_depth_intra.set_range(0,4); max_transform_hierarchy_depth_intra.set_default(3); + max_transform_hierarchy_depth_inter.set_ID("max-transform-hierarchy-depth-inter"); + max_transform_hierarchy_depth_inter.set_range(0,4); + max_transform_hierarchy_depth_inter.set_default(3); + sop_structure.set_ID("sop-structure"); mAlgo_TB_IntraPredMode.set_ID("TB-IntraPredMode"); mAlgo_TB_IntraPredMode_Subset.set_ID("TB-IntraPredMode-subset"); mAlgo_CB_IntraPartMode.set_ID("CB-IntraPartMode"); + mAlgo_TB_RateEstimation.set_ID("TB-RateEstimation"); + mAlgo_MEMode.set_ID("MEMode"); } @@ -62,6 +68,7 @@ config.add_option(&min_tb_size); config.add_option(&max_tb_size); config.add_option(&max_transform_hierarchy_depth_intra); + config.add_option(&max_transform_hierarchy_depth_inter); config.add_option(&sop_structure); @@ -70,6 +77,7 @@ config.add_option(&mAlgo_CB_IntraPartMode); config.add_option(&mAlgo_MEMode); + config.add_option(&mAlgo_TB_RateEstimation); mSOP_LowDelay.registerParams(config); }
View file
libde265-1.0.2.tar.gz/libde265/encoder/encoder-params.h -> libde265-1.0.3.tar.gz/libde265/encoder/encoder-params.h
Changed
@@ -23,8 +23,8 @@ #ifndef ENCODER_PARAMS_H #define ENCODER_PARAMS_H -#include "libde265/encoder/encode.h" -#include "libde265/encoder/analyze.h" +#include "libde265/encoder/encoder-types.h" +#include "libde265/encoder/encoder-core.h" #include "libde265/encoder/sop.h" @@ -88,6 +88,7 @@ option_int max_tb_size; option_int max_transform_hierarchy_depth_intra; + option_int max_transform_hierarchy_depth_inter; option_SOP_Structure sop_structure; @@ -132,6 +133,7 @@ // rate-control enum RateControlMethod rateControlMethod; + option_ALGO_TB_RateEstimation mAlgo_TB_RateEstimation; //int constant_QP; //int lambda;
View file
libde265-1.0.3.tar.gz/libde265/encoder/encoder-syntax.cc
Added
@@ -0,0 +1,1729 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "encoder-syntax.h" +#include "encoder-context.h" +#include "slice.h" +#include "scan.h" +#include "intrapred.h" +#include "libde265/transform.h" +#include "libde265/fallback-dct.h" +#include <iostream> + + +#ifdef DE265_LOG_DEBUG +#define ESTIM_BITS_BEGIN \ + CABAC_encoder_estim* log_estim; \ + float log_bits_pre = 0; \ + if (logdebug_enabled(LogEncoder)) { \ + log_estim = dynamic_cast<CABAC_encoder_estim*>(cabac); \ + if (log_estim) { \ + log_bits_pre = log_estim->getRDBits(); \ + } \ + } + +#define ESTIM_BITS_END(name) \ + if (logdebug_enabled(LogEncoder)) { \ + if (log_estim) { \ + float bits_post = log_estim->getRDBits(); \ + printf("%s=%f\n",name,bits_post - log_bits_pre); \ + } \ + } +#else +#define ESTIM_BITS_BEGIN +#define ESTIM_BITS_END(name) +#endif + + + +static void internal_recursive_cbfChroma_rate(CABAC_encoder_estim* cabac, + enc_tb* tb, int log2TrafoSize, int trafoDepth) +{ + // --- CBF CB/CR --- + + // For 4x4 luma, there is no signaling of chroma CBF, because only the + // chroma CBF for 8x8 is relevant. + if (log2TrafoSize>2) { + if (trafoDepth==0 || tb->parent->cbf[1]) { + encode_cbf_chroma(cabac, trafoDepth, tb->cbf[1]); + } + if (trafoDepth==0 || tb->parent->cbf[2]) { + encode_cbf_chroma(cabac, trafoDepth, tb->cbf[2]); + } + } + + if (tb->split_transform_flag) { + for (int i=0;i<4;i++) { + internal_recursive_cbfChroma_rate(cabac, tb->children[i], log2TrafoSize-1, trafoDepth+1); + } + } +} + + +float recursive_cbfChroma_rate(CABAC_encoder_estim* cabac, + enc_tb* tb, int log2TrafoSize, int trafoDepth) +{ + float bits_pre = cabac->getRDBits(); + + internal_recursive_cbfChroma_rate(cabac, tb, log2TrafoSize, trafoDepth); + + float bits_post = cabac->getRDBits(); + + return bits_post - bits_pre; +} + + + +void encode_split_cu_flag(encoder_context* ectx, + CABAC_encoder* cabac, + int x0, int y0, int ctDepth, int split_flag) +{ + logtrace(LogSymbols,"$1 split_cu_flag=%d\n",split_flag); + + // check if neighbors are available + + int availableL = check_CTB_available(ectx->img, x0,y0, x0-1,y0); + int availableA = check_CTB_available(ectx->img, x0,y0, x0,y0-1); + + int condL = 0; + int condA = 0; + + if (availableL && ectx->ctbs.getCB(x0-1,y0)->ctDepth > ctDepth) condL=1; + if (availableA && ectx->ctbs.getCB(x0,y0-1)->ctDepth > ctDepth) condA=1; + + int contextOffset = condL + condA; + int context = contextOffset; + + // decode bit + + logtrace(LogSlice,"> split_cu_flag = %d (context=%d)\n",split_flag,context); + + cabac->write_CABAC_bit(CONTEXT_MODEL_SPLIT_CU_FLAG + context, split_flag); +} + + +void encode_part_mode(encoder_context* ectx, + CABAC_encoder* cabac, + enum PredMode PredMode, enum PartMode PartMode, int cLog2CbSize) +{ + logtrace(LogSymbols,"$1 part_mode=%d\n",PartMode); + logtrace(LogSlice,"> part_mode = %d\n",PartMode); + + if (PredMode == MODE_INTRA) { + int bin = (PartMode==PART_2Nx2N); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+0, bin); + } + else { + if (PartMode==PART_2Nx2N) { + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+0, 1); + return; + } + else { + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+0, 0); + } + + if (cLog2CbSize > ectx->get_sps().Log2MinCbSizeY) { + if (ectx->get_sps().amp_enabled_flag) { + switch (PartMode) { + case PART_2NxN: + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 1); + break; + case PART_Nx2N: + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 1); + break; + case PART_2NxnU: + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); + cabac->write_CABAC_bypass(0); + break; + case PART_2NxnD: + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); + cabac->write_CABAC_bypass(1); + break; + case PART_nLx2N: + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); + cabac->write_CABAC_bypass(0); + break; + case PART_nRx2N: + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); + cabac->write_CABAC_bypass(1); + break; + case PART_NxN: + case PART_2Nx2N: + assert(false); + break; + } + } + else { + if (PartMode==PART_2NxN) { + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); + } + else { + assert(PartMode==PART_Nx2N); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); + } + } + } + else { + if (PartMode==PART_2NxN) { + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 1); + } + else { + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+1, 0); + + if (cLog2CbSize==3) { + assert(PartMode==PART_Nx2N); + } + else { + if (PartMode==PART_Nx2N) { + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 1); + } + else { + assert(PartMode==PART_NxN); + cabac->write_CABAC_bit(CONTEXT_MODEL_PART_MODE+3, 0); + } + } + } + } + } +} + + +static void encode_pred_mode_flag(encoder_context* ectx, + CABAC_encoder* cabac, + enum PredMode PredMode) +{ + logtrace(LogSlice,"> pred_mode = %d\n",PredMode); + + int flag = (PredMode == MODE_INTRA) ? 1 : 0; + + logtrace(LogSymbols,"$1 pred_mode=%d\n",flag); + + cabac->write_CABAC_bit(CONTEXT_MODEL_PRED_MODE_FLAG, flag); +} + + +static void encode_prev_intra_luma_pred_flag(encoder_context* ectx, + CABAC_encoder* cabac, + int intraPred) +{ + logtrace(LogSymbols,"$1 prev_intra_luma_pred_flag=%d\n",intraPred>=0); + int bin = (intraPred>=0); + + logtrace(LogSlice,"> prev_intra_luma_pred_flag = %d\n",bin); + + cabac->write_CABAC_bit(CONTEXT_MODEL_PREV_INTRA_LUMA_PRED_FLAG, bin); +} + +static void encode_intra_mpm_or_rem(encoder_context* ectx, + CABAC_encoder* cabac, + int intraPred) +{ + if (intraPred>=0) { + logtrace(LogSymbols,"$1 mpm_idx=%d\n",intraPred); + logtrace(LogSlice,"> mpm_idx = %d\n",intraPred); + assert(intraPred<=2); + cabac->write_CABAC_TU_bypass(intraPred, 2); + } + else { + logtrace(LogSymbols,"$1 rem_intra_luma_pred_mode=%d\n",-intraPred-1); + logtrace(LogSlice,"> rem_intra_luma_pred_mode = %d\n",-intraPred-1); + cabac->write_CABAC_FL_bypass(-intraPred-1, 5); + } +} + + +static void encode_intra_chroma_pred_mode(encoder_context* ectx, + CABAC_encoder* cabac, + int mode) +{ + logtrace(LogSymbols,"$1 intra_chroma_pred_mode=%d\n",mode); + logtrace(LogSlice,"> intra_chroma_pred_mode = %d\n",mode); + + if (mode==4) { + cabac->write_CABAC_bit(CONTEXT_MODEL_INTRA_CHROMA_PRED_MODE,0); + } + else { + assert(mode<4); + + cabac->write_CABAC_bit(CONTEXT_MODEL_INTRA_CHROMA_PRED_MODE,1); + cabac->write_CABAC_FL_bypass(mode, 2); + } +} + + +/* Optimized variant that tests most likely branch first. + */ +enum IntraChromaPredMode find_chroma_pred_mode(enum IntraPredMode chroma_mode, + enum IntraPredMode luma_mode) +{ + // most likely mode: chroma mode = luma mode + + if (luma_mode==chroma_mode) { + return INTRA_CHROMA_LIKE_LUMA; + } + + + // check remaining candidates + + IntraPredMode mode = chroma_mode; + + // angular-34 is coded by setting the coded mode equal to the luma_mode + if (chroma_mode == INTRA_ANGULAR_34) { + mode = luma_mode; + } + + switch (mode) { + case INTRA_PLANAR: return INTRA_CHROMA_PLANAR_OR_34; + case INTRA_ANGULAR_26: return INTRA_CHROMA_ANGULAR_26_OR_34; + case INTRA_ANGULAR_10: return INTRA_CHROMA_ANGULAR_10_OR_34; + case INTRA_DC: return INTRA_CHROMA_DC_OR_34; + default: + assert(false); + return INTRA_CHROMA_DC_OR_34; + } +} + + + +void encode_split_transform_flag(encoder_context* ectx, + CABAC_encoder* cabac, + int log2TrafoSize, int split_flag) +{ + logtrace(LogSymbols,"$1 split_transform_flag=%d\n",split_flag); + logtrace(LogSlice,"> split_transform_flag = %d\n",split_flag); + + int context = 5-log2TrafoSize; + assert(context >= 0 && context <= 2); + + cabac->write_CABAC_bit(CONTEXT_MODEL_SPLIT_TRANSFORM_FLAG + context, split_flag); +} + + +void encode_cbf_luma(CABAC_encoder* cabac, + bool zeroTrafoDepth, int cbf_luma) +{ + logtrace(LogSymbols,"$1 cbf_luma=%d\n",cbf_luma); + logtrace(LogSlice,"> cbf_luma = %d\n",cbf_luma); + + int context = (zeroTrafoDepth ? 1 : 0); + + cabac->write_CABAC_bit(CONTEXT_MODEL_CBF_LUMA + context, cbf_luma); +} + + +void encode_cbf_chroma(CABAC_encoder* cabac, + int trafoDepth, int cbf_chroma) +{ + logtrace(LogSymbols,"$1 cbf_chroma=%d\n",cbf_chroma); + logtrace(LogSlice,"> cbf_chroma = %d\n",cbf_chroma); + + int context = trafoDepth; + assert(context >= 0 && context <= 3); + + cabac->write_CABAC_bit(CONTEXT_MODEL_CBF_CHROMA + context, cbf_chroma); +} + +static inline void encode_coded_sub_block_flag(encoder_context* ectx, + CABAC_encoder* cabac, + int cIdx, + uint8_t coded_sub_block_neighbors, + int flag) +{ + logtrace(LogSymbols,"$1 coded_sub_block_flag=%d\n",flag); + logtrace(LogSlice,"# coded_sub_block_flag = %d\n",flag); + + // tricky computation of csbfCtx + int csbfCtx = ((coded_sub_block_neighbors & 1) | // right neighbor set or + (coded_sub_block_neighbors >> 1)); // bottom neighbor set -> csbfCtx=1 + + int ctxIdxInc = csbfCtx; + if (cIdx!=0) { + ctxIdxInc += 2; + } + + cabac->write_CABAC_bit(CONTEXT_MODEL_CODED_SUB_BLOCK_FLAG + ctxIdxInc, flag); +} + +static inline void encode_significant_coeff_flag_lookup(encoder_context* ectx, + CABAC_encoder* cabac, + uint8_t ctxIdxInc, + int significantFlag) +{ + logtrace(LogSymbols,"$1 significant_coeff_flag=%d\n",significantFlag); + logtrace(LogSlice,"# significant_coeff_flag = significantFlag\n"); + logtrace(LogSlice,"context: %d\n",ctxIdxInc); + + cabac->write_CABAC_bit(CONTEXT_MODEL_SIGNIFICANT_COEFF_FLAG + ctxIdxInc, significantFlag); +} + +static inline void encode_coeff_abs_level_greater1(encoder_context* ectx, + CABAC_encoder* cabac, + int cIdx, int i, + bool firstCoeffInSubblock, + bool firstSubblock, + int lastSubblock_greater1Ctx, + int* lastInvocation_greater1Ctx, + int* lastInvocation_coeff_abs_level_greater1_flag, + int* lastInvocation_ctxSet, int c1, + int value) +{ + logtrace(LogSymbols,"$1 coeff_abs_level_greater1=%d\n",value); + logtrace(LogSlice,"# coeff_abs_level_greater1 = %d\n",value); + + logtrace(LogSlice," cIdx:%d i:%d firstCoeffInSB:%d firstSB:%d lastSB>1:%d last>1Ctx:%d lastLev>1:%d lastCtxSet:%d\n", cIdx,i,firstCoeffInSubblock,firstSubblock,lastSubblock_greater1Ctx, + *lastInvocation_greater1Ctx, + *lastInvocation_coeff_abs_level_greater1_flag, + *lastInvocation_ctxSet); + + int lastGreater1Ctx; + int greater1Ctx; + int ctxSet; + + logtrace(LogSlice,"c1: %d\n",c1); + + if (firstCoeffInSubblock) { + // block with real DC -> ctx 0 + if (i==0 || cIdx>0) { ctxSet=0; } + else { ctxSet=2; } + + if (firstSubblock) { lastGreater1Ctx=1; } + else { lastGreater1Ctx = lastSubblock_greater1Ctx; } + + if (lastGreater1Ctx==0) { ctxSet++; } + + logtrace(LogSlice,"ctxSet: %d\n",ctxSet); + + greater1Ctx=1; + } + else { // !firstCoeffInSubblock + ctxSet = *lastInvocation_ctxSet; + logtrace(LogSlice,"ctxSet (old): %d\n",ctxSet); + + greater1Ctx = *lastInvocation_greater1Ctx; + if (greater1Ctx>0) { + int lastGreater1Flag=*lastInvocation_coeff_abs_level_greater1_flag; + if (lastGreater1Flag==1) greater1Ctx=0; + else { /*if (greater1Ctx>0)*/ greater1Ctx++; } + } + } + + ctxSet = c1; // use HM algo + + int ctxIdxInc = (ctxSet*4) + (greater1Ctx>=3 ? 3 : greater1Ctx); + + if (cIdx>0) { ctxIdxInc+=16; } + + cabac->write_CABAC_bit(CONTEXT_MODEL_COEFF_ABS_LEVEL_GREATER1_FLAG + ctxIdxInc, value); + + *lastInvocation_greater1Ctx = greater1Ctx; + *lastInvocation_coeff_abs_level_greater1_flag = value; + *lastInvocation_ctxSet = ctxSet; +} + +static void encode_coeff_abs_level_greater2(encoder_context* ectx, + CABAC_encoder* cabac, + int cIdx, // int i,int n, + int ctxSet, + int value) +{ + logtrace(LogSymbols,"$1 coeff_abs_level_greater2=%d\n",value); + logtrace(LogSlice,"# coeff_abs_level_greater2 = %d\n",value); + + int ctxIdxInc = ctxSet; + + if (cIdx>0) ctxIdxInc+=4; + + cabac->write_CABAC_bit(CONTEXT_MODEL_COEFF_ABS_LEVEL_GREATER2_FLAG + ctxIdxInc, value); +} + + +bool TU(int val, int maxi) +{ + for (int i=0;i<val;i++) { + printf("1"); + } + if (val<maxi) { printf("0"); return false; } + else return true; +} + +void bin(int val, int bits) +{ + for (int i=0;i<bits;i++) { + int bit = (1<<(bits-1-i)); + if (val&bit) printf("1"); else printf("0"); + } +} + +void ExpG(int level, int riceParam) +{ + int prefix = level >> riceParam; + int suffix = level - (prefix<<riceParam); + + //printf("%d %d ",prefix,suffix); + + int base=0; + int range=1; + int nBits=0; + while (prefix >= base+range) { + printf("1"); + base+=range; + range*=2; + nBits++; + } + + printf("0."); + bin(prefix-base, nBits); + printf(":"); + bin(suffix,riceParam); +} + +int blamain() +{ + int riceParam=2; + int TRMax = 4<<riceParam; + + for (int level=0;level<128;level++) + { + printf("%d: ",level); + + int prefixPart = std::min(TRMax, level); + + // code TR prefix + + bool isMaxi = TU(prefixPart>>riceParam, TRMax>>riceParam); + printf(":"); + if (TRMax>prefixPart) { + int remain = prefixPart & ((1<<riceParam)-1); + bin(remain, riceParam); + } + printf("|"); + + if (isMaxi) { + ExpG(level-TRMax, riceParam+1); + } + + printf("\n"); + } + + return 0; +} + + +static void encode_coeff_abs_level_remaining(encoder_context* ectx, + CABAC_encoder* cabac, + int cRiceParam, + int level) +{ + logtrace(LogSymbols,"$1 coeff_abs_level_remaining=%d\n",level); + logtrace(LogSlice,"# encode_coeff_abs_level_remaining = %d\n",level); + + int cTRMax = 4<<cRiceParam; + int prefixPart = std::min(level, cTRMax); + + // --- code prefix with TR --- + + // TU part, length 4 (cTRMax>>riceParam) + + int nOnes = (prefixPart>>cRiceParam); + cabac->write_CABAC_TU_bypass(nOnes, 4); + + // TR suffix + + if (cTRMax > prefixPart) { + int remain = prefixPart & ((1<<cRiceParam)-1); + cabac->write_CABAC_FL_bypass(remain, cRiceParam); + } + + + // --- remainder suffix --- + + if (nOnes==4) { + int remain = level-cTRMax; + int ExpGRiceParam = cRiceParam+1; + + int prefix = remain >> ExpGRiceParam; + int suffix = remain - (prefix<<ExpGRiceParam); + + int base=0; + int range=1; + int nBits=0; + while (prefix >= base+range) { + cabac->write_CABAC_bypass(1); + base+=range; + range*=2; + nBits++; + } + + cabac->write_CABAC_bypass(0); + cabac->write_CABAC_FL_bypass(prefix-base, nBits); + cabac->write_CABAC_FL_bypass(suffix, ExpGRiceParam); + } +} + +// --------------------------------------------------------------------------- + +void findLastSignificantCoeff(const position* sbScan, const position* cScan, + const int16_t* coeff, int log2TrafoSize, + int* lastSignificantX, int* lastSignificantY, + int* lastSb, int* lastPos) +{ + int nSb = 1<<((log2TrafoSize-2)<<1); // number of sub-blocks + + // find last significant coefficient + + for (int i=nSb ; i-->0 ;) { + int x0 = sbScan[i].x << 2; + int y0 = sbScan[i].y << 2; + for (int c=16 ; c-->0 ;) { + int x = x0 + cScan[c].x; + int y = y0 + cScan[c].y; + + if (coeff[x+(y<<log2TrafoSize)]) { + *lastSignificantX = x; + *lastSignificantY = y; + *lastSb = i; + *lastPos= c; + + logtrace(LogSlice,"last significant coeff at: %d;%d, Sb:%d Pos:%d\n", x,y,i,c); + + return; + } + } + } + + // all coefficients == 0 ? cannot be since cbf should be false in this case + assert(false); +} + + +bool subblock_has_nonzero_coefficient(const int16_t* coeff, int coeffStride, + const position& sbPos) +{ + int x0 = sbPos.x << 2; + int y0 = sbPos.y << 2; + + coeff += x0 + y0*coeffStride; + + for (int y=0;y<4;y++) { + if (coeff[0] || coeff[1] || coeff[2] || coeff[3]) { return true; } + coeff += coeffStride; + } + + return false; +} + +/* + Example 16x16: prefix in [0;7] + + prefix | last pos + =============|============= + 0 | 0 + 1 | 1 + 2 | 2 + 3 | 3 + -------------+------------- + lsb nBits | + 4 0 1 | 4, 5 + 5 1 1 | 6, 7 + 6 0 2 | 8, 9,10,11 + 7 1 2 | 12,13,14,15 +*/ +void encode_last_signficiant_coeff_prefix(encoder_context* ectx, + CABAC_encoder* cabac, + int log2TrafoSize, + int cIdx, int lastSignificant, + int context_model_index) +{ + logtrace(LogSlice,"> last_significant_coeff_prefix=%d log2TrafoSize:%d cIdx:%d\n", + lastSignificant,log2TrafoSize,cIdx); + + int cMax = (log2TrafoSize<<1)-1; + + int ctxOffset, ctxShift; + if (cIdx==0) { + ctxOffset = 3*(log2TrafoSize-2) + ((log2TrafoSize-1)>>2); + ctxShift = (log2TrafoSize+1)>>2; + } + else { + ctxOffset = 15; + ctxShift = log2TrafoSize-2; + } + + for (int binIdx=0;binIdx<lastSignificant;binIdx++) + { + int ctxIdxInc = (binIdx >> ctxShift); + cabac->write_CABAC_bit(context_model_index + ctxOffset + ctxIdxInc, 1); + } + + if (lastSignificant != cMax) { + int binIdx = lastSignificant; + int ctxIdxInc = (binIdx >> ctxShift); + cabac->write_CABAC_bit(context_model_index + ctxOffset + ctxIdxInc, 0); + } +} + + +void split_last_significant_position(int pos, int* prefix, int* suffix, int* nSuffixBits) +{ + logtrace(LogSlice,"split position %d : ",pos); + + // most frequent case + + if (pos<=3) { + *prefix=pos; + *suffix=-1; // just to have some defined value + *nSuffixBits=0; + logtrace(LogSlice,"prefix=%d suffix=%d (%d bits)\n",*prefix,*suffix,*nSuffixBits); + return; + } + + pos -= 4; + int nBits=1; + int range=4; + while (pos>=range) { + nBits++; + pos-=range; + range<<=1; + } + + *prefix = (1+nBits)<<1; + if (pos >= (range>>1)) { + *prefix |= 1; + pos -= (range>>1); + } + *suffix = pos; + *nSuffixBits = nBits; + + logtrace(LogSlice,"prefix=%d suffix=%d (%d bits)\n",*prefix,*suffix,*nSuffixBits); +} + + +extern uint8_t* ctxIdxLookup[4 /* 4-log2-32 */][2 /* !!cIdx */][2 /* !!scanIdx */][4 /* prevCsbf */]; + +/* These values are read from the image metadata: + - intra prediction mode (x0;y0) + */ +void encode_residual(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0,int log2TrafoSize,int cIdx) +{ + logdebug(LogEncoder,"encode_residual %s\n",typeid(*cabac).name()); + + const de265_image* img = ectx->img; + const seq_parameter_set& sps = img->get_sps(); + const pic_parameter_set& pps = img->get_pps(); + + int16_t* coeff = tb->coeff[cIdx]; + + if (pps.transform_skip_enabled_flag && true /* TODO */) { + } + + +#if 1 + logdebug(LogEncoder,"write coefficients\n"); + for (int y=0;y<(1<<log2TrafoSize);y++) + { + for (int x=0;x<(1<<log2TrafoSize);x++) + { + logdebug(LogEncoder,"*%4d ",coeff[x+y*(1<<log2TrafoSize)]); + } + logdebug(LogEncoder,"*\n"); + } +#endif + + + // --- get scan orders --- + + enum PredMode PredMode = cb->PredMode; + int scanIdx; + + if (PredMode == MODE_INTRA) { + if (cIdx==0) { + scanIdx = get_intra_scan_idx(log2TrafoSize, tb->intra_mode, cIdx, &sps); + //printf("luma scan idx=%d <- intra mode=%d\n",scanIdx, tb->intra_mode); + } + else { + scanIdx = get_intra_scan_idx(log2TrafoSize, tb->intra_mode_chroma, cIdx, &sps); + //printf("chroma scan idx=%d <- intra mode=%d chroma:%d trsize:%d\n",scanIdx, + // tb->intra_mode_chroma, sps.chroma_format_idc, 1<<log2TrafoSize); + } + } + else { + scanIdx=0; + } + + + const position* ScanOrderSub = get_scan_order(log2TrafoSize-2, scanIdx); + const position* ScanOrderPos = get_scan_order(2, scanIdx); + + int lastSignificantX, lastSignificantY; + int lastScanPos; + int lastSubBlock; + findLastSignificantCoeff(ScanOrderSub, ScanOrderPos, + coeff, log2TrafoSize, + &lastSignificantX, &lastSignificantY, + &lastSubBlock, &lastScanPos); + + int codedSignificantX = lastSignificantX; + int codedSignificantY = lastSignificantY; + + if (scanIdx==2) { + std::swap(codedSignificantX, codedSignificantY); + } + + + + int prefixX, suffixX, suffixBitsX; + int prefixY, suffixY, suffixBitsY; + + split_last_significant_position(codedSignificantX, &prefixX,&suffixX,&suffixBitsX); + split_last_significant_position(codedSignificantY, &prefixY,&suffixY,&suffixBitsY); + + encode_last_signficiant_coeff_prefix(ectx, cabac, log2TrafoSize, cIdx, prefixX, + CONTEXT_MODEL_LAST_SIGNIFICANT_COEFFICIENT_X_PREFIX); + + encode_last_signficiant_coeff_prefix(ectx, cabac, log2TrafoSize, cIdx, prefixY, + CONTEXT_MODEL_LAST_SIGNIFICANT_COEFFICIENT_Y_PREFIX); + + + if (codedSignificantX > 3) { + cabac->write_CABAC_FL_bypass(suffixX, suffixBitsX); + } + if (codedSignificantY > 3) { + cabac->write_CABAC_FL_bypass(suffixY, suffixBitsY); + } + + + + int sbWidth = 1<<(log2TrafoSize-2); + int CoeffStride = 1<<log2TrafoSize; + + uint8_t coded_sub_block_neighbors[32/4*32/4]; // 64*2 flags + memset(coded_sub_block_neighbors,0,sbWidth*sbWidth); + + int c1 = 1; + bool firstSubblock = true; // for coeff_abs_level_greater1_flag context model + int lastSubblock_greater1Ctx=false; /* for coeff_abs_level_greater1_flag context model + (initialization not strictly needed) + */ + + int lastInvocation_greater1Ctx=0; + int lastInvocation_coeff_abs_level_greater1_flag=0; + int lastInvocation_ctxSet=0; + + + + // ----- encode coefficients ----- + + //tctx->nCoeff[cIdx] = 0; + + + // i - subblock index + // n - coefficient index in subblock + + for (int i=lastSubBlock;i>=0;i--) { + position S = ScanOrderSub[i]; + int inferSbDcSigCoeffFlag=0; + + logtrace(LogSlice,"sub block scan idx: %d\n",i); + + + // --- check whether this sub-block has to be coded --- + + int sub_block_is_coded = 0; + + if ((i<lastSubBlock) && (i>0)) { + sub_block_is_coded = subblock_has_nonzero_coefficient(coeff, CoeffStride, S); + encode_coded_sub_block_flag(ectx, cabac, cIdx, + coded_sub_block_neighbors[S.x+S.y*sbWidth], + sub_block_is_coded); + inferSbDcSigCoeffFlag=1; + } + else if (i==0 || i==lastSubBlock) { + // first (DC) and last sub-block are always coded + // - the first will most probably contain coefficients + // - the last obviously contains the last coded coefficient + + sub_block_is_coded = 1; + } + + if (sub_block_is_coded) { + if (S.x > 0) coded_sub_block_neighbors[S.x-1 + S.y *sbWidth] |= 1; + if (S.y > 0) coded_sub_block_neighbors[S.x + (S.y-1)*sbWidth] |= 2; + } + + logtrace(LogSlice,"subblock is coded: %s\n", sub_block_is_coded ? "yes":"no"); + + + // --- write significant coefficient flags --- + + int16_t coeff_value[16]; + int16_t coeff_baseLevel[16]; + int8_t coeff_scan_pos[16]; + int8_t coeff_sign[16]; + int8_t coeff_has_max_base_level[16]; + int nCoefficients=0; + + + if (sub_block_is_coded) { + int x0 = S.x<<2; + int y0 = S.y<<2; + + int log2w = log2TrafoSize-2; + int prevCsbf = coded_sub_block_neighbors[S.x+S.y*sbWidth]; + uint8_t* ctxIdxMap = ctxIdxLookup[log2w][!!cIdx][!!scanIdx][prevCsbf]; + + logdebug(LogSlice,"log2w:%d cIdx:%d scanIdx:%d prevCsbf:%d\n", + log2w,cIdx,scanIdx,prevCsbf); + + + // set the last coded coefficient in the last subblock + + if (i==lastSubBlock) { + coeff_value[nCoefficients] = coeff[lastSignificantX+(lastSignificantY<<log2TrafoSize)]; + coeff_has_max_base_level[nCoefficients] = 1; // TODO + coeff_scan_pos[nCoefficients] = lastScanPos; + nCoefficients++; + } + + + // --- encode all coefficients' significant_coeff flags except for the DC coefficient --- + + int last_coeff = (i==lastSubBlock) ? lastScanPos-1 : 15; + + for (int n= last_coeff ; n>0 ; n--) { + int subX = ScanOrderPos[n].x; + int subY = ScanOrderPos[n].y; + int xC = x0 + subX; + int yC = y0 + subY; + + + // for all AC coefficients in sub-block, a significant_coeff flag is coded + + int isSignificant = !!tb->coeff[cIdx][xC + (yC<<log2TrafoSize)]; + + logtrace(LogSlice,"coeff %d is significant: %d\n", n, isSignificant); + + logtrace(LogSlice,"trafoSize: %d\n",1<<log2TrafoSize); + logtrace(LogSlice,"context idx: %d;%d\n",xC,yC); + + encode_significant_coeff_flag_lookup(ectx, cabac, + ctxIdxMap[xC+(yC<<log2TrafoSize)], + isSignificant); + //ctxIdxMap[(i<<4)+n]); + + if (isSignificant) { + coeff_value[nCoefficients] = coeff[xC+(yC<<log2TrafoSize)]; + coeff_has_max_base_level[nCoefficients] = 1; + coeff_scan_pos[nCoefficients] = n; + nCoefficients++; + + // since we have a coefficient in the sub-block, + // we cannot infer the DC coefficient anymore + inferSbDcSigCoeffFlag = 0; + } + } + + + // --- decode DC coefficient significance --- + + if (last_coeff>=0) // last coded coefficient (always set to 1) is not the DC coefficient + { + if (inferSbDcSigCoeffFlag==0) { + // if we cannot infert the DC coefficient, it is coded + int isSignificant = !!tb->coeff[cIdx][x0 + (y0<<log2TrafoSize)]; + + logtrace(LogSlice,"DC coeff is significant: %d\n", isSignificant); + + encode_significant_coeff_flag_lookup(ectx, cabac, + ctxIdxMap[x0+(y0<<log2TrafoSize)], + isSignificant); + + if (isSignificant) { + coeff_value[nCoefficients] = coeff[x0+(y0<<log2TrafoSize)]; + coeff_has_max_base_level[nCoefficients] = 1; + coeff_scan_pos[nCoefficients] = 0; + nCoefficients++; + } + } + else { + // we can infer that the DC coefficient must be present + coeff_value[nCoefficients] = coeff[x0+(y0<<log2TrafoSize)]; + coeff_has_max_base_level[nCoefficients] = 1; + coeff_scan_pos[nCoefficients] = 0; + nCoefficients++; + } + } + } + + + + // --- encode coefficient values --- + + if (nCoefficients) { + + // separate absolute coefficient value and sign + + logtrace(LogSlice,"coefficients to code: "); + + for (int l=0;l<nCoefficients;l++) { + logtrace(LogSlice,"%d ",coeff_value[l]); + + if (coeff_value[l]<0) { + coeff_value[l] = -coeff_value[l]; + coeff_sign[l] = 1; + } + else { + coeff_sign[l] = 0; + } + + coeff_baseLevel[l] = 1; + + logtrace(LogSlice,"(%d) ",coeff_scan_pos[l]); + } + + logtrace(LogSlice,"\n"); + + + int ctxSet; + if (i==0 || cIdx>0) { ctxSet=0; } + else { ctxSet=2; } + + if (c1==0) { ctxSet++; } + c1=1; + + + // --- encode greater-1 flags --- + + int newLastGreater1ScanPos=-1; + + int lastGreater1Coefficient = libde265_min(8,nCoefficients); + for (int c=0;c<lastGreater1Coefficient;c++) { + int greater1_flag = (coeff_value[c]>1); + + encode_coeff_abs_level_greater1(ectx, cabac, cIdx,i, + c==0, + firstSubblock, + lastSubblock_greater1Ctx, + &lastInvocation_greater1Ctx, + &lastInvocation_coeff_abs_level_greater1_flag, + &lastInvocation_ctxSet, ctxSet, + greater1_flag); + + if (greater1_flag) { + coeff_baseLevel[c]++; + + c1=0; + + if (newLastGreater1ScanPos == -1) { + newLastGreater1ScanPos=c; + } + } + else { + coeff_has_max_base_level[c] = 0; + + if (c1<3 && c1>0) { + c1++; + } + } + } + + firstSubblock = false; + lastSubblock_greater1Ctx = lastInvocation_greater1Ctx; + + + // --- decode greater-2 flag --- + + if (newLastGreater1ScanPos != -1) { + int greater2_flag = (coeff_value[newLastGreater1ScanPos]>2); + encode_coeff_abs_level_greater2(ectx,cabac, cIdx, lastInvocation_ctxSet, greater2_flag); + coeff_baseLevel[newLastGreater1ScanPos] += greater2_flag; + coeff_has_max_base_level[newLastGreater1ScanPos] = greater2_flag; + } + + + // --- encode coefficient signs --- + + int signHidden = (coeff_scan_pos[0]-coeff_scan_pos[nCoefficients-1] > 3 && + !cb->cu_transquant_bypass_flag); + + for (int n=0;n<nCoefficients-1;n++) { + cabac->write_CABAC_bypass(coeff_sign[n]); + //logtrace(LogSlice,"a) sign[%d] = %d\n", n, coeff_sign[n]); + } + + // n==nCoefficients-1 + if (!pps.sign_data_hiding_flag || !signHidden) { + cabac->write_CABAC_bypass(coeff_sign[nCoefficients-1]); + //logtrace(LogSlice,"b) sign[%d] = %d\n", nCoefficients-1, coeff_sign[nCoefficients-1]); + } + else { + assert(coeff_sign[nCoefficients-1] == 0); + } + + // --- decode coefficient value --- + + int sumAbsLevel=0; + int uiGoRiceParam=0; + + for (int n=0;n<nCoefficients;n++) { + int baseLevel = coeff_baseLevel[n]; + + int coeff_abs_level_remaining; + + if (coeff_has_max_base_level[n]) { + logtrace(LogSlice,"value[%d]=%d, base level: %d\n",n,coeff_value[n],coeff_baseLevel[n]); + + coeff_abs_level_remaining = coeff_value[n] - coeff_baseLevel[n]; + + encode_coeff_abs_level_remaining(ectx, cabac, uiGoRiceParam, + coeff_abs_level_remaining); + + // (9-462) + if (baseLevel + coeff_abs_level_remaining > 3*(1<<uiGoRiceParam)) { + uiGoRiceParam++; + if (uiGoRiceParam>4) uiGoRiceParam=4; + } + } + else { + coeff_abs_level_remaining = 0; + } + + + // --- DEBUG: check coefficient --- + +#if 0 + int16_t currCoeff = baseLevel + coeff_abs_level_remaining; + if (coeff_sign[n]) { + currCoeff = -currCoeff; + } + + if (pps.sign_data_hiding_flag && signHidden) { + sumAbsLevel += baseLevel + coeff_abs_level_remaining; + + if (n==nCoefficients-1 && (sumAbsLevel & 1)) { + currCoeff = -currCoeff; + } + } + + assert(currCoeff == coeff_value[n]); +#endif + } // iterate through coefficients in sub-block + } // if nonZero + + } +} + + +void encode_transform_unit(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0, int xBase,int yBase, + int log2TrafoSize, int trafoDepth, int blkIdx) +{ + ESTIM_BITS_BEGIN; + + if (tb->cbf[0] || tb->cbf[1] || tb->cbf[2]) { + if (ectx->img->get_pps().cu_qp_delta_enabled_flag && + true /*!ectx->IsCuQpDeltaCoded*/) { + assert(0); + } + + if (tb->cbf[0]) { + encode_residual(ectx,cabac, tb,cb,x0,y0,log2TrafoSize,0); + } + + if (ectx->get_sps().chroma_format_idc == CHROMA_444) { + if (tb->cbf[1]) { + encode_residual(ectx,cabac, tb,cb,x0,y0,log2TrafoSize,1); + } + if (tb->cbf[2]) { + encode_residual(ectx,cabac, tb,cb,x0,y0,log2TrafoSize,2); + } + } + else if (log2TrafoSize>2) { + // larger than 4x4 + + if (tb->cbf[1]) { + encode_residual(ectx,cabac,tb,cb,x0,y0,log2TrafoSize-1,1); + } + if (tb->cbf[2]) { + encode_residual(ectx,cabac,tb,cb,x0,y0,log2TrafoSize-1,2); + } + } + else if (blkIdx==3) { + // cannot check for tb->parent->cbf[], because this may not yet be set + if (tb->cbf[1]) { + encode_residual(ectx,cabac,tb,cb,xBase,yBase,log2TrafoSize,1); + } + if (tb->cbf[2]) { + encode_residual(ectx,cabac,tb,cb,xBase,yBase,log2TrafoSize,2); + } + } + } + + ESTIM_BITS_END("encode_transform_unit"); +} + + +void encode_transform_tree(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0, int xBase,int yBase, + int log2TrafoSize, int trafoDepth, int blkIdx, + int MaxTrafoDepth, int IntraSplitFlag, bool recurse) +{ + ESTIM_BITS_BEGIN; + + //de265_image* img = ectx->img; + const seq_parameter_set& sps = ectx->img->get_sps(); + + if (log2TrafoSize <= sps.Log2MaxTrafoSize && + log2TrafoSize > sps.Log2MinTrafoSize && + trafoDepth < MaxTrafoDepth && + !(IntraSplitFlag && trafoDepth==0)) + { + int split_transform_flag = tb->split_transform_flag; + encode_split_transform_flag(ectx, cabac, log2TrafoSize, split_transform_flag); + } + else + { + int interSplitFlag=0; // TODO + + bool split_transform_flag = (log2TrafoSize > sps.Log2MaxTrafoSize || + (IntraSplitFlag==1 && trafoDepth==0) || + interSplitFlag==1) ? 1:0; + + /* + printf("split_transform_flag log2TrafoSize:%d Log2MaxTrafoSize:%d " + "IntraSplitFlag:%d trafoDepth:%d -> %d\n", + log2TrafoSize,sps->Log2MaxTrafoSize, + IntraSplitFlag, trafoDepth, + split_transform_flag); + */ + + assert(tb->split_transform_flag == split_transform_flag); + } + + // --- CBF CB/CR --- + + // For 4x4 luma, there is no signaling of chroma CBF, because only the + // chroma CBF for 8x8 is relevant. + if (log2TrafoSize>2 || sps.ChromaArrayType == CHROMA_444) { + if (trafoDepth==0 || tb->parent->cbf[1]) { + encode_cbf_chroma(cabac, trafoDepth, tb->cbf[1]); + } + if (trafoDepth==0 || tb->parent->cbf[2]) { + encode_cbf_chroma(cabac, trafoDepth, tb->cbf[2]); + } + } + + if (tb->split_transform_flag) { + if (recurse) { + int x1 = x0 + (1<<(log2TrafoSize-1)); + int y1 = y0 + (1<<(log2TrafoSize-1)); + + encode_transform_tree(ectx, cabac, tb->children[0], cb, x0,y0,x0,y0,log2TrafoSize-1, + trafoDepth+1, 0, MaxTrafoDepth, IntraSplitFlag, true); + encode_transform_tree(ectx, cabac, tb->children[1], cb, x1,y0,x0,y0,log2TrafoSize-1, + trafoDepth+1, 1, MaxTrafoDepth, IntraSplitFlag, true); + encode_transform_tree(ectx, cabac, tb->children[2], cb, x0,y1,x0,y0,log2TrafoSize-1, + trafoDepth+1, 2, MaxTrafoDepth, IntraSplitFlag, true); + encode_transform_tree(ectx, cabac, tb->children[3], cb, x1,y1,x0,y0,log2TrafoSize-1, + trafoDepth+1, 3, MaxTrafoDepth, IntraSplitFlag, true); + } + } + else { + if (cb->PredMode == MODE_INTRA || trafoDepth != 0 || + tb->cbf[1] || tb->cbf[2]) { + encode_cbf_luma(cabac, trafoDepth==0, tb->cbf[0]); + } + else { + /* Note: usually, cbf[0] should be TRUE, but while estimating the bitrate, this + function can also be called with all CBFs FALSE. Usually, this is handled by + the rqt_root_cbf flag, but during analysis, this is set after the bitrate is estimated. + */ + // assert(tb->cbf[0]==true); + } + + encode_transform_unit(ectx,cabac, tb,cb, x0,y0, xBase,yBase, log2TrafoSize, trafoDepth, blkIdx); + } + + ESTIM_BITS_END("encode_transform_tree"); +} + + +void encode_cu_skip_flag(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_cb* cb, + bool skip) +{ + logtrace(LogSymbols,"$1 cu_skip_flag=%d\n",skip); + + const de265_image* img = ectx->img; + + int x0 = cb->x; + int y0 = cb->y; + + // check if neighbors are available + + int availableL = check_CTB_available(img, x0,y0, x0-1,y0); + int availableA = check_CTB_available(img, x0,y0, x0,y0-1); + + int condL = 0; + int condA = 0; + + if (availableL && ectx->ctbs.getCB(x0-1,y0)->PredMode == MODE_SKIP) condL=1; + if (availableA && ectx->ctbs.getCB(x0,y0-1)->PredMode == MODE_SKIP) condA=1; + + int contextOffset = condL + condA; + int context = contextOffset; + + // decode bit + + int bit = skip; + + logtrace(LogSlice,"> cu_skip_flag ctx=%d, bit=%d\n", context,bit); + + cabac->write_CABAC_bit(CONTEXT_MODEL_CU_SKIP_FLAG + context, bit); +} + + +void encode_merge_idx(encoder_context* ectx, + CABAC_encoder* cabac, + int mergeIdx) +{ + logtrace(LogSymbols,"$1 merge_idx=%d\n",mergeIdx); + logtrace(LogSlice,"# merge_idx %d\n", mergeIdx); + + if (ectx->shdr->MaxNumMergeCand <= 1) { + return; // code nothing, we use only a single merge candidate + } + + // TU coding, first bin is CABAC, remaining are bypass. + // cMax = MaxNumMergeCand-1 + + cabac->write_CABAC_bit(CONTEXT_MODEL_MERGE_IDX, mergeIdx ? 1 : 0); + + if (mergeIdx>0) { + int idx=1; + + while (idx<ectx->shdr->MaxNumMergeCand-1) { + int increase = (idx < mergeIdx); + + cabac->write_CABAC_bypass(increase); + if (increase) { + idx++; + } + else { + break; + } + } + } +} + + +static inline void encode_rqt_root_cbf(encoder_context* ectx, + CABAC_encoder* cabac, + int rqt_root_cbf) +{ + logtrace(LogSymbols,"$1 rqt_root_cbf=%d\n",rqt_root_cbf); + cabac->write_CABAC_bit(CONTEXT_MODEL_RQT_ROOT_CBF, rqt_root_cbf); +} + + +void encode_mvd(encoder_context* ectx, + CABAC_encoder* cabac, + const int16_t mvd[2]) +{ + int mvd0abs = abs_value(mvd[0]); + int mvd1abs = abs_value(mvd[1]); + + int mvd0_greater_0 = !!(mvd0abs); + int mvd1_greater_0 = !!(mvd1abs); + + cabac->write_CABAC_bit(CONTEXT_MODEL_ABS_MVD_GREATER01_FLAG+0, mvd0_greater_0); + cabac->write_CABAC_bit(CONTEXT_MODEL_ABS_MVD_GREATER01_FLAG+0, mvd1_greater_0); + + if (mvd0_greater_0) { + cabac->write_CABAC_bit(CONTEXT_MODEL_ABS_MVD_GREATER01_FLAG+1, mvd0abs>1); + } + if (mvd1_greater_0) { + cabac->write_CABAC_bit(CONTEXT_MODEL_ABS_MVD_GREATER01_FLAG+1, mvd1abs>1); + } + + if (mvd0abs) { + if (mvd0abs>1) { + cabac->write_CABAC_EGk(mvd0abs-2,1); + } + cabac->write_CABAC_bypass(mvd[0]<0); + } + + if (mvd1abs) { + if (mvd1abs>1) { + cabac->write_CABAC_EGk(mvd1abs-2,1); + } + cabac->write_CABAC_bypass(mvd[1]<0); + } +} + + +void encode_prediction_unit(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_cb* cb, int pbIdx, + int x0,int y0, int w, int h) +{ + const enc_pb_inter& pb = cb->inter.pb[pbIdx]; + + logtrace(LogSymbols,"$1 merge_flag=%d\n",pb.spec.merge_flag); + cabac->write_CABAC_bit(CONTEXT_MODEL_MERGE_FLAG, pb.spec.merge_flag); + + if (pb.spec.merge_flag) { + assert(false); // TODO + } + else { + if (ectx->shdr->slice_type == SLICE_TYPE_B) { + assert(false); // TODO + } + + if (pb.spec.inter_pred_idc != PRED_L1) { + if (ectx->shdr->num_ref_idx_l0_active > 1) { + assert(false); // TODO + //cabac->write_CABAC_bit(CONTEXT_MODEL_REF_IDX_LX, pb.spec.mvp_l0_flag); + } + + encode_mvd(ectx,cabac, pb.spec.mvd[0]); + + logtrace(LogSymbols,"$1 mvp_lx_flag=%d\n",pb.spec.mvp_l0_flag); + cabac->write_CABAC_bit(CONTEXT_MODEL_MVP_LX_FLAG, pb.spec.mvp_l0_flag); + } + + if (pb.spec.inter_pred_idc != PRED_L0) { + assert(false); // TODO + } + + /* +enum InterPredIdc + PRED_L0=0, + PRED_L1=1, + PRED_BI=2 + */ + } +} + + +void encode_coding_unit(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_cb* cb, int x0,int y0, int log2CbSize, bool recurse) +{ + logtrace(LogSlice,"--- encode CU (%d;%d) ---\n",x0,y0); + + de265_image* img = ectx->img; + const slice_segment_header* shdr = &ectx->imgdata->shdr; + const seq_parameter_set& sps = ectx->img->get_sps(); + + + int nCbS = 1<<log2CbSize; + + + // write skip_flag + + if (shdr->slice_type != SLICE_TYPE_I) { + encode_cu_skip_flag(ectx,cabac, cb, cb->PredMode==MODE_SKIP); + } + + if (cb->PredMode==MODE_SKIP) { + assert(cb->inter.pb[0].spec.merge_flag); + encode_merge_idx(ectx,cabac, cb->inter.pb[0].spec.merge_idx); + } + else { + + enum PredMode PredMode = cb->PredMode; + enum PartMode PartMode = PART_2Nx2N; + int IntraSplitFlag=0; + + if (shdr->slice_type != SLICE_TYPE_I) { + encode_pred_mode_flag(ectx,cabac, PredMode); + } + + if (PredMode != MODE_INTRA || + log2CbSize == sps.Log2MinCbSizeY) { + PartMode = cb->PartMode; + encode_part_mode(ectx,cabac, PredMode, PartMode, log2CbSize); + } + + if (PredMode == MODE_INTRA) { + + assert(cb->split_cu_flag == 0); + + int availableA0 = check_CTB_available(img, x0,y0, x0-1,y0); + int availableB0 = check_CTB_available(img, x0,y0, x0,y0-1); + + if (PartMode==PART_2Nx2N) { + logtrace(LogSlice,"x0,y0: %d,%d\n",x0,y0); + int PUidx = (x0>>sps.Log2MinPUSize) + (y0>>sps.Log2MinPUSize)*sps.PicWidthInMinPUs; + + enum IntraPredMode candModeList[3]; + fillIntraPredModeCandidates(candModeList,x0,y0, + availableA0,availableB0, ectx->ctbs, &sps); + + for (int i=0;i<3;i++) + logtrace(LogSlice,"candModeList[%d] = %d\n", i, candModeList[i]); + + enum IntraPredMode mode = cb->transform_tree->intra_mode; + + int intraPred = find_intra_pred_mode(mode, candModeList); + encode_prev_intra_luma_pred_flag(ectx,cabac, intraPred); + encode_intra_mpm_or_rem(ectx,cabac, intraPred); + + logtrace(LogSlice,"IntraPredMode: %d (candidates: %d %d %d)\n", mode, + candModeList[0], candModeList[1], candModeList[2]); + logtrace(LogSlice," MPM/REM = %d\n",intraPred); + + + IntraChromaPredMode chromaPredMode; + chromaPredMode = find_chroma_pred_mode(cb->transform_tree->intra_mode_chroma, + cb->transform_tree->intra_mode); + encode_intra_chroma_pred_mode(ectx,cabac, chromaPredMode); + } + else { + IntraSplitFlag=1; + + int pbOffset = nCbS/2; + int PUidx; + + int intraPred[4]; + int childIdx=0; + + for (int j=0;j<nCbS;j+=pbOffset) + for (int i=0;i<nCbS;i+=pbOffset, childIdx++) + { + int x=x0+i, y=y0+j; + + int availableA = availableA0 || (i>0); // left candidate always available for right blk + int availableB = availableB0 || (j>0); // top candidate always available for bottom blk + + PUidx = (x>>sps.Log2MinPUSize) + (y>>sps.Log2MinPUSize)*sps.PicWidthInMinPUs; + + enum IntraPredMode candModeList[3]; + fillIntraPredModeCandidates(candModeList,x,y, + availableA,availableB, ectx->ctbs, &sps); + + for (int i=0;i<3;i++) + logtrace(LogSlice,"candModeList[%d] = %d\n", i, candModeList[i]); + + enum IntraPredMode mode = cb->transform_tree->children[childIdx]->intra_mode; + + intraPred[childIdx] = find_intra_pred_mode(mode, candModeList); + + logtrace(LogSlice,"IntraPredMode: %d (candidates: %d %d %d)\n", mode, + candModeList[0], candModeList[1], candModeList[2]); + logtrace(LogSlice," MPM/REM = %d\n",intraPred[childIdx]); + } + + for (int i=0;i<4;i++) + encode_prev_intra_luma_pred_flag(ectx,cabac, intraPred[i]); + + for (int i=0;i<4;i++) { + encode_intra_mpm_or_rem(ectx,cabac, intraPred[i]); + } + + + // send chroma mode + + if (sps.ChromaArrayType == CHROMA_444) { + for (int i=0;i<4;i++) { + IntraChromaPredMode chromaPredMode; + chromaPredMode = find_chroma_pred_mode(cb->transform_tree->children[i]->intra_mode_chroma, + cb->transform_tree->children[i]->intra_mode); + encode_intra_chroma_pred_mode(ectx,cabac, chromaPredMode); + } + } + else { + IntraChromaPredMode chromaPredMode; + chromaPredMode = find_chroma_pred_mode(cb->transform_tree->children[0]->intra_mode_chroma, + cb->transform_tree->children[0]->intra_mode); + encode_intra_chroma_pred_mode(ectx,cabac, chromaPredMode); + } + } + + /* + printf("write intra modes. Luma=%d Chroma=%d\n", + cb->intra.pred_mode[0], + cb->intra.chroma_mode); + */ + } + else { + switch (cb->PartMode) { + case PART_2Nx2N: + encode_prediction_unit(ectx,cabac,cb, 0, cb->x,cb->y,1<<cb->log2Size,1<<cb->log2Size); + break; + case PART_2NxN: + case PART_Nx2N: + case PART_NxN: + case PART_2NxnU: + case PART_2NxnD: + case PART_nLx2N: + case PART_nRx2N: + assert(false); // TODO + } + } + + + if (true) { // !pcm + + if (cb->PredMode != MODE_INTRA && + !(cb->PartMode == PART_2Nx2N && cb->inter.pb[0].spec.merge_flag)) { + + //printf("%d %d %d\n",cb->PredMode,cb->PartMode,cb->inter.pb[0].merge_flag); + + encode_rqt_root_cbf(ectx,cabac, cb->inter.rqt_root_cbf); + } + + //printf("%d;%d encode rqt_root_cbf=%d\n",x0,y0,cb->inter.rqt_root_cbf); + + if (cb->PredMode == MODE_INTRA || cb->inter.rqt_root_cbf) { + int MaxTrafoDepth; + if (PredMode == MODE_INTRA) + { MaxTrafoDepth = sps.max_transform_hierarchy_depth_intra + IntraSplitFlag; } + else + { MaxTrafoDepth = sps.max_transform_hierarchy_depth_inter; } + + + if (recurse) { + //printf("%d;%d store transform tree\n",x0,y0); + + encode_transform_tree(ectx,cabac, cb->transform_tree, cb, + x0,y0, x0,y0, log2CbSize, 0, 0, MaxTrafoDepth, IntraSplitFlag, true); + } + } + } + } +} + + +SplitType get_split_type(const seq_parameter_set* sps, + int x0,int y0, int log2CbSize) +{ + /* + CU split flag: + + | overlaps | minimum || + case | border | size || split + -----+----------+---------++---------- + A | 0 | 0 || optional + B | 0 | 1 || 0 + C | 1 | 0 || 1 + D | 1 | 1 || 0 + */ + if (x0+(1<<log2CbSize) <= sps->pic_width_in_luma_samples && + y0+(1<<log2CbSize) <= sps->pic_height_in_luma_samples && + log2CbSize > sps->Log2MinCbSizeY) { + + // case A + + return OptionalSplit; + } else { + // case B/C/D + + if (log2CbSize > sps->Log2MinCbSizeY) { return ForcedSplit; } + else { return ForcedNonSplit; } + } +} + + +void encode_quadtree(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_cb* cb, int x0,int y0, int log2CbSize, int ctDepth, + bool recurse) +{ + //de265_image* img = ectx->img; + const seq_parameter_set& sps = ectx->img->get_sps(); + + int split_flag = get_split_type(&sps,x0,y0,log2CbSize); + + // if it is an optional split, take the decision from the CU flag + if (split_flag == OptionalSplit) { + split_flag = cb->split_cu_flag; + + encode_split_cu_flag(ectx,cabac, x0,y0, ctDepth, split_flag); + } + + + if (split_flag) { + if (recurse) { + int x1 = x0 + (1<<(log2CbSize-1)); + int y1 = y0 + (1<<(log2CbSize-1)); + + encode_quadtree(ectx,cabac, cb->children[0], x0,y0, log2CbSize-1, ctDepth+1, true); + + if (x1<sps.pic_width_in_luma_samples) + encode_quadtree(ectx,cabac, cb->children[1], x1,y0, log2CbSize-1, ctDepth+1, true); + + if (y1<sps.pic_height_in_luma_samples) + encode_quadtree(ectx,cabac, cb->children[2], x0,y1, log2CbSize-1, ctDepth+1, true); + + if (x1<sps.pic_width_in_luma_samples && + y1<sps.pic_height_in_luma_samples) + encode_quadtree(ectx,cabac, cb->children[3], x1,y1, log2CbSize-1, ctDepth+1, true); + } + } + else { + encode_coding_unit(ectx,cabac, cb,x0,y0, log2CbSize, true); + } +} + + +void encode_ctb(encoder_context* ectx, + CABAC_encoder* cabac, + enc_cb* cb, int ctbX,int ctbY) +{ + logtrace(LogSlice,"----- encode CTB (%d;%d) -----\n",ctbX,ctbY); + +#if 0 + printf("MODEL:\n"); + for (int i=0;i<CONTEXT_MODEL_TABLE_LENGTH;i++) + { + printf("%d;%d ", + ectx->ctx_model[i].state, + ectx->ctx_model[i].MPSbit); + + if ((i%16)==15) printf("\n"); + } + printf("\n"); +#endif + + de265_image* img = ectx->img; + int log2ctbSize = img->get_sps().Log2CtbSizeY; + + encode_quadtree(ectx,cabac, cb, ctbX<<log2ctbSize, ctbY<<log2ctbSize, log2ctbSize, 0, true); +} + + +// ---------------------------------------------------------------------------
View file
libde265-1.0.3.tar.gz/libde265/encoder/encoder-syntax.h
Added
@@ -0,0 +1,102 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ENCODER_SYNTAX_H +#define ENCODER_SYNTAX_H + +#include "libde265/image.h" +#include "libde265/encoder/encoder-types.h" + + +void encode_split_cu_flag(encoder_context* ectx, + CABAC_encoder* cabac, + int x0, int y0, int ctDepth, int split_flag); + +void encode_transform_tree(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0, int xBase,int yBase, + int log2TrafoSize, int trafoDepth, int blkIdx, + int MaxTrafoDepth, int IntraSplitFlag, bool recurse); + +void encode_coding_unit(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_cb* cb, int x0,int y0, int log2CbSize, bool recurse); + +/* returns + 1 - forced split + 0 - forced non-split + -1 - optional split +*/ +enum SplitType { + ForcedNonSplit = 0, + ForcedSplit = 1, + OptionalSplit = 2 +}; + +SplitType get_split_type(const seq_parameter_set* sps, + int x0,int y0, int log2CbSize); + + +/* Compute how much rate is required for sending the chroma CBF flags + in the whole TB tree. + */ +float recursive_cbfChroma_rate(CABAC_encoder_estim* cabac, + enc_tb* tb, int log2TrafoSize, int trafoDepth); + + +void encode_split_transform_flag(encoder_context* ectx, + CABAC_encoder* cabac, + int log2TrafoSize, int split_flag); + +void encode_merge_idx(encoder_context* ectx, + CABAC_encoder* cabac, + int mergeIdx); + +void encode_cu_skip_flag(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_cb* cb, + bool skip); + +void encode_cbf_luma(CABAC_encoder* cabac, + bool zeroTrafoDepth, int cbf_luma); + +void encode_cbf_chroma(CABAC_encoder* cabac, + int trafoDepth, int cbf_chroma); + +void encode_transform_unit(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_tb* tb, const enc_cb* cb, + int x0,int y0, int xBase,int yBase, + int log2TrafoSize, int trafoDepth, int blkIdx); + + +void encode_quadtree(encoder_context* ectx, + CABAC_encoder* cabac, + const enc_cb* cb, int x0,int y0, int log2CbSize, int ctDepth, + bool recurse); + +void encode_ctb(encoder_context* ectx, + CABAC_encoder* cabac, + enc_cb* cb, int ctbX,int ctbY); + +#endif
View file
libde265-1.0.3.tar.gz/libde265/encoder/encoder-types.cc
Added
@@ -0,0 +1,766 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: struktur AG, Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "encoder-types.h" +#include "encoder-context.h" +#include "slice.h" +#include "scan.h" +#include "intrapred.h" +#include "libde265/transform.h" +#include "libde265/fallback-dct.h" +#include <iostream> + + +int allocTB = 0; +int allocCB = 0; + +#define DEBUG_ALLOCS 0 + + +small_image_buffer::small_image_buffer(int log2Size,int bytes_per_pixel) +{ + mWidth = 1<<log2Size; + mHeight = 1<<log2Size; + mStride = 1<<log2Size; + mBytesPerRow = bytes_per_pixel * (1<<log2Size); + + int nBytes = mWidth*mHeight*bytes_per_pixel; + mBuf = new uint8_t[nBytes]; +} + + +small_image_buffer::~small_image_buffer() +{ + delete[] mBuf; +} + + +void enc_cb::set_rqt_root_bf_from_children_cbf() +{ + assert(transform_tree); + inter.rqt_root_cbf = (transform_tree->cbf[0] | + transform_tree->cbf[1] | + transform_tree->cbf[2]); +} + + + + +alloc_pool enc_tb::mMemPool(sizeof(enc_tb)); + +enc_tb::enc_tb(int x,int y,int log2TbSize, enc_cb* _cb) + : enc_node(x,y,log2TbSize) +{ + parent = NULL; + cb = _cb; + downPtr = NULL; + blkIdx = 0; + + split_transform_flag = false; + coeff[0]=coeff[1]=coeff[2]=NULL; + + TrafoDepth = 0; + cbf[0] = cbf[1] = cbf[2] = 0; + + distortion = 0; + rate = 0; + rate_withoutCbfChroma = 0; + + intra_mode = INTRA_PLANAR; + intra_mode_chroma = INTRA_PLANAR; + + if (DEBUG_ALLOCS) { allocTB++; printf("TB : %d\n",allocTB); } +} + + +enc_tb::~enc_tb() +{ + if (split_transform_flag) { + for (int i=0;i<4;i++) { + delete children[i]; + } + } + else { + for (int i=0;i<3;i++) { + delete[] coeff[i]; + } + } + + if (DEBUG_ALLOCS) { allocTB--; printf("TB ~: %d\n",allocTB); } +} + + +void enc_tb::alloc_coeff_memory(int cIdx, int tbSize) +{ + assert(coeff[cIdx]==NULL); + coeff[cIdx] = new int16_t[tbSize*tbSize]; +} + + +void enc_tb::reconstruct_tb(encoder_context* ectx, + de265_image* img, + int x0,int y0, // luma + int log2TbSize, // chroma adapted + int cIdx) const +{ + // chroma adapted position + int xC=x0; + int yC=y0; + + if (cIdx>0 && ectx->get_sps().chroma_format_idc == CHROMA_420) { + xC>>=1; + yC>>=1; + } + + + if (!reconstruction[cIdx]) { + + reconstruction[cIdx] = std::make_shared<small_image_buffer>(log2TbSize, sizeof(uint8_t)); + + if (cb->PredMode == MODE_SKIP) { + PixelAccessor dstPixels(*reconstruction[cIdx], xC,yC); + dstPixels.copyFromImage(img, cIdx); + } + else { // not SKIP mode + if (cb->PredMode == MODE_INTRA) { + + //enum IntraPredMode intraPredMode = img->get_IntraPredMode(x0,y0); + enum IntraPredMode intraPredMode = intra_mode; + + if (cIdx>0) { + intraPredMode = intra_mode_chroma; + } + + //printf("reconstruct TB (%d;%d): intra mode (cIdx=%d) = %d\n",xC,yC,cIdx,intraPredMode); + + //decode_intra_prediction(img, xC,yC, intraPredMode, 1<< log2TbSize , cIdx); + + //printf("access intra-prediction of TB %p\n",this); + + intra_prediction[cIdx]->copy_to(*reconstruction[cIdx]); + /* + copy_subimage(img->get_image_plane_at_pos(cIdx,xC,yC), + img->get_image_stride(cIdx), + intra_prediction[cIdx]->get_buffer<uint8_t>(), 1<<log2TbSize, + 1<<log2TbSize, 1<<log2TbSize); + */ + } + else { + assert(0); // -> TODO: now only store in tb_enc + + int size = 1<<log2TbSize; + + uint8_t* dst_ptr = img->get_image_plane_at_pos(cIdx, xC, yC ); + int dst_stride = img->get_image_stride(cIdx); + + /* TODO TMP HACK: prediction does not exist anymore + uint8_t* src_ptr = ectx->prediction->get_image_plane_at_pos(cIdx, xC, yC ); + int src_stride = ectx->prediction->get_image_stride(cIdx); + + for (int y=0;y<size;y++) { + for (int x=0;x<size;x++) { + dst_ptr[y*dst_stride+x] = src_ptr[y*src_stride+x]; + } + } + */ + } + + ALIGNED_16(int16_t) dequant_coeff[32*32]; + + if (cbf[cIdx]) dequant_coefficients(dequant_coeff, coeff[cIdx], log2TbSize, cb->qp); + + if (0 && cbf[cIdx]) { + printf("--- quantized coeffs ---\n"); + printBlk("qcoeffs",coeff[0],1<<log2TbSize,1<<log2TbSize); + + printf("--- dequantized coeffs ---\n"); + printBlk("dequant",dequant_coeff,1<<log2TbSize,1<<log2TbSize); + } + +#if 0 + uint8_t* ptr = img->get_image_plane_at_pos(cIdx, xC, yC ); + int stride = img->get_image_stride(cIdx); +#endif + + int trType = (cIdx==0 && log2TbSize==2); // TODO: inter + + //printf("--- prediction %d %d / %d ---\n",x0,y0,cIdx); + //printBlk("prediction",ptr,1<<log2TbSize,stride); + + if (cbf[cIdx]) inv_transform(&ectx->acceleration, + reconstruction[cIdx]->get_buffer<uint8_t>(), 1<<log2TbSize, + dequant_coeff, log2TbSize, trType); + + //printBlk("RECO",reconstruction[cIdx]->get_buffer_u8(),1<<log2TbSize, + // reconstruction[cIdx]->getStride()); + } + } + + + // copy reconstruction into image + +#if 0 + copy_subimage(img->get_image_plane_at_pos(cIdx,xC,yC), + img->get_image_stride(cIdx), + reconstruction[cIdx]->get_buffer<uint8_t>(), 1<<log2TbSize, + 1<<log2TbSize, 1<<log2TbSize); +#endif + + //printf("--- RECO intra prediction %d %d ---\n",x0,y0); + //printBlk("RECO",ptr,1<<log2TbSize,stride); +} + + +void enc_tb::debug_writeBlack(encoder_context* ectx, de265_image* img) const +{ + if (split_transform_flag) { + for (int i=0;i<4;i++) { + children[i]->debug_writeBlack(ectx,img); + } + } + else { + //reconstruct_tb(ectx, img, x,y, log2Size, 0); + + int size = 1<<(log2Size<<1); + std::vector<uint8_t> buf(size); + memset(&buf[0],0x12,size); + + int cIdx=0; + int xC=x,yC=y; + + copy_subimage(img->get_image_plane_at_pos(cIdx,xC,yC), + img->get_image_stride(cIdx), + &buf[0], 1<<log2Size, + 1<<log2Size, 1<<log2Size); + } +} + + +void enc_tb::reconstruct(encoder_context* ectx, de265_image* img) const +{ + if (split_transform_flag) { + for (int i=0;i<4;i++) { + children[i]->reconstruct(ectx,img); + } + } + else { + reconstruct_tb(ectx, img, x,y, log2Size, 0); + + if (ectx->get_sps().chroma_format_idc == CHROMA_444) { + reconstruct_tb(ectx, img, x,y, log2Size, 1); + reconstruct_tb(ectx, img, x,y, log2Size, 2); + } + else if (log2Size>2) { + reconstruct_tb(ectx, img, x,y, log2Size-1, 1); + reconstruct_tb(ectx, img, x,y, log2Size-1, 2); + } + else if (blkIdx==3) { + int xBase = x - (1<<log2Size); + int yBase = y - (1<<log2Size); + + reconstruct_tb(ectx, img, xBase,yBase, log2Size, 1); + reconstruct_tb(ectx, img, xBase,yBase, log2Size, 2); + } + } +} + + +void enc_tb::set_cbf_flags_from_children() +{ + assert(split_transform_flag); + + cbf[0] = 0; + cbf[1] = 0; + cbf[2] = 0; + + for (int i=0;i<4;i++) { + cbf[0] |= children[i]->cbf[0]; + cbf[1] |= children[i]->cbf[1]; + cbf[2] |= children[i]->cbf[2]; + } +} + + + +alloc_pool enc_cb::mMemPool(sizeof(enc_cb), 200); + + +enc_cb::enc_cb() + : split_cu_flag(false), + cu_transquant_bypass_flag(false), + pcm_flag(false), + transform_tree(NULL), + distortion(0), + rate(0) +{ + parent = NULL; + downPtr = NULL; + + if (DEBUG_ALLOCS) { allocCB++; printf("CB : %d\n",allocCB); } +} + +enc_cb::~enc_cb() +{ + if (split_cu_flag) { + for (int i=0;i<4;i++) { + delete children[i]; + } + } + else { + delete transform_tree; + } + + if (DEBUG_ALLOCS) { allocCB--; printf("CB ~: %d\n",allocCB); } +} + + +/* +void enc_cb::write_to_image(de265_image* img) const +{ + //printf("write_to_image %d %d size:%d\n",x,y,1<<log2Size); + + + if (!split_cu_flag) { + img->set_log2CbSize(x,y,log2Size, true); + img->set_ctDepth(x,y,log2Size, ctDepth); + assert(pcm_flag==0); + img->set_pcm_flag(x,y,log2Size, pcm_flag); + img->set_cu_transquant_bypass(x,y,log2Size, cu_transquant_bypass_flag); + img->set_QPY(x,y,log2Size, qp); + img->set_pred_mode(x,y, log2Size, PredMode); + img->set_PartMode(x,y, PartMode); + + if (PredMode == MODE_INTRA) { + + if (PartMode == PART_NxN) { + int h = 1<<(log2Size-1); + img->set_IntraPredMode(x ,y ,log2Size-1, transform_tree->children[0]->intra_mode); + img->set_IntraPredMode(x+h,y ,log2Size-1, transform_tree->children[1]->intra_mode); + img->set_IntraPredMode(x ,y+h,log2Size-1, transform_tree->children[2]->intra_mode); + img->set_IntraPredMode(x+h,y+h,log2Size-1, transform_tree->children[3]->intra_mode); + } + else { + img->set_IntraPredMode(x,y,log2Size, transform_tree->intra_mode); + } + } + else { + int nC = 1<<log2Size; + int nC2 = nC>>1; + int nC4 = nC>>2; + int nC3 = nC-nC4; + switch (PartMode) { + case PART_2Nx2N: + img->set_mv_info(x,y,nC,nC, inter.pb[0].motion); + break; + case PART_NxN: + img->set_mv_info(x ,y ,nC2,nC2, inter.pb[0].motion); + img->set_mv_info(x+nC2,y ,nC2,nC2, inter.pb[1].motion); + img->set_mv_info(x ,y+nC2,nC2,nC2, inter.pb[2].motion); + img->set_mv_info(x+nC2,y+nC2,nC2,nC2, inter.pb[3].motion); + break; + case PART_2NxN: + img->set_mv_info(x,y ,nC,nC2, inter.pb[0].motion); + img->set_mv_info(x,y+nC2,nC,nC2, inter.pb[1].motion); + break; + case PART_Nx2N: + img->set_mv_info(x ,y,nC2,nC, inter.pb[0].motion); + img->set_mv_info(x+nC2,y,nC2,nC, inter.pb[1].motion); + break; + case PART_2NxnU: + img->set_mv_info(x,y ,nC,nC4, inter.pb[0].motion); + img->set_mv_info(x,y+nC4,nC,nC3, inter.pb[1].motion); + break; + case PART_2NxnD: + img->set_mv_info(x,y ,nC,nC3, inter.pb[0].motion); + img->set_mv_info(x,y+nC3,nC,nC4, inter.pb[1].motion); + break; + case PART_nLx2N: + img->set_mv_info(x ,y,nC4,nC, inter.pb[0].motion); + img->set_mv_info(x+nC4,y,nC3,nC, inter.pb[1].motion); + break; + case PART_nRx2N: + img->set_mv_info(x ,y,nC3,nC, inter.pb[0].motion); + img->set_mv_info(x+nC3,y,nC4,nC, inter.pb[1].motion); + break; + } + } + } + else { + for (int i=0;i<4;i++) { + if (children[i]) { + children[i]->write_to_image(img); + } + } + } +} +*/ + +void enc_cb::reconstruct(encoder_context* ectx, de265_image* img) const +{ + assert(0); + if (split_cu_flag) { + for (int i=0;i<4;i++) { + children[i]->reconstruct(ectx, img); + } + } + else { + //write_to_image(img); + transform_tree->reconstruct(ectx,img); + } +} + + +void enc_cb::debug_dumpTree(int flags, int indent) const +{ + std::string indentStr; + indentStr.insert(0,indent,' '); + + std::cout << indentStr << "CB " << x << ";" << y << " " + << (1<<log2Size) << "x" << (1<<log2Size) << " [" << this << "]\n"; + + std::cout << indentStr << "| split_cu_flag: " << int(split_cu_flag) << "\n"; + std::cout << indentStr << "| ctDepth: " << int(ctDepth) << "\n"; + + if (split_cu_flag) { + for (int i=0;i<4;i++) + if (children[i]) { + std::cout << indentStr << "| child CB " << i << ":\n"; + children[i]->debug_dumpTree(flags, indent+2); + } + } + else { + std::cout << indentStr << "| qp: " << int(qp) << "\n"; + std::cout << indentStr << "| PredMode: " << PredMode << "\n"; + std::cout << indentStr << "| PartMode: " << part_mode_name(PartMode) << "\n"; + std::cout << indentStr << "| transform_tree:\n"; + + transform_tree->debug_dumpTree(flags, indent+2); + } +} + + +void enc_tb::debug_dumpTree(int flags, int indent) const +{ + std::string indentStr; + indentStr.insert(0,indent,' '); + + std::cout << indentStr << "TB " << x << ";" << y << " " + << (1<<log2Size) << "x" << (1<<log2Size) << " [" << this << "]\n"; + + std::cout << indentStr << "| split_transform_flag: " << int(split_transform_flag) << "\n"; + std::cout << indentStr << "| TrafoDepth: " << int(TrafoDepth) << "\n"; + std::cout << indentStr << "| blkIdx: " << int(blkIdx) << "\n"; + + std::cout << indentStr << "| intra_mode: " << int(intra_mode) << "\n"; + std::cout << indentStr << "| intra_mode_chroma: " << int(intra_mode_chroma) << "\n"; + + std::cout << indentStr << "| cbf: " + << int(cbf[0]) << ":" + << int(cbf[1]) << ":" + << int(cbf[2]) << "\n"; + + + if (flags & DUMPTREE_RECONSTRUCTION) { + for (int i=0;i<3;i++) + if (reconstruction[i]) { + std::cout << indentStr << "| Reconstruction, channel " << i << ":\n"; + printBlk(NULL, + reconstruction[i]->get_buffer_u8(), + reconstruction[i]->getWidth(), + reconstruction[i]->getStride(), + indentStr + "| "); + } + } + + if (flags & DUMPTREE_INTRA_PREDICTION) { + for (int i=0;i<3;i++) + if (intra_prediction[i]) { + //if (i==0) print_border(debug_intra_border+64, NULL, 1<<log2Size); + + std::cout << indentStr << "| Intra prediction, channel " << i << ":\n"; + printBlk(NULL, + intra_prediction[i]->get_buffer_u8(), + intra_prediction[i]->getWidth(), + intra_prediction[i]->getStride(), + indentStr + "| "); + } + } + + if (split_transform_flag) { + for (int i=0;i<4;i++) + if (children[i]) { + std::cout << indentStr << "| child TB " << i << ":\n"; + children[i]->debug_dumpTree(flags, indent+2); + } + } +} + + + +const enc_tb* enc_cb::getTB(int x,int y) const +{ + assert(!split_cu_flag); + assert(transform_tree); + + return transform_tree->getTB(x,y); +} + + +const enc_tb* enc_tb::getTB(int px,int py) const +{ + if (split_transform_flag) { + int xHalf = x + (1<<(log2Size-1)); + int yHalf = y + (1<<(log2Size-1)); + + enc_tb* child; + + if (px<xHalf) { + if (py<yHalf) { + child = children[0]; + } + else { + child = children[2]; + } + } + else { + if (py<yHalf) { + child = children[1]; + } + else { + child = children[3]; + } + } + + if (!child) { return NULL; } + + return child->getTB(px,py); + } + + return this; +} + + + +void CTBTreeMatrix::alloc(int w,int h, int log2CtbSize) +{ + free(); + + int ctbSize = 1<<log2CtbSize; + + mWidthCtbs = (w+ctbSize-1) >> log2CtbSize; + mHeightCtbs = (h+ctbSize-1) >> log2CtbSize; + mLog2CtbSize = log2CtbSize; + + mCTBs.resize(mWidthCtbs * mHeightCtbs, NULL); +} + + +const enc_cb* CTBTreeMatrix::getCB(int px,int py) const +{ + int xCTB = px>>mLog2CtbSize; + int yCTB = py>>mLog2CtbSize; + + int idx = xCTB + yCTB*mWidthCtbs; + assert(idx < mCTBs.size()); + + enc_cb* cb = mCTBs[idx]; + if (!cb) { return NULL; } + + while (cb->split_cu_flag) { + int xHalf = cb->x + (1<<(cb->log2Size-1)); + int yHalf = cb->y + (1<<(cb->log2Size-1)); + + if (px<xHalf) { + if (py<yHalf) { + cb = cb->children[0]; + } + else { + cb = cb->children[2]; + } + } + else { + if (py<yHalf) { + cb = cb->children[1]; + } + else { + cb = cb->children[3]; + } + } + + if (!cb) { return NULL; } + } + + return cb; +} + + +const enc_tb* CTBTreeMatrix::getTB(int x,int y) const +{ + const enc_cb* cb = getCB(x,y); + if (!cb) { return NULL; } + + const enc_tb* tb = cb->transform_tree; + if (!tb) { return NULL; } + + return tb->getTB(x,y); +} + + +const enc_pb_inter* CTBTreeMatrix::getPB(int x,int y) const +{ + const enc_cb* cb = getCB(x,y); + + // TODO: get PB block based on partitioning + + return &cb->inter.pb[0]; +} + + +void CTBTreeMatrix::writeReconstructionToImage(de265_image* img, + const seq_parameter_set* sps) const +{ + for (int i=0;i<mCTBs.size();i++) { + const enc_cb* cb = mCTBs[i]; + cb->writeReconstructionToImage(img, sps); + } +} + +void enc_cb::writeReconstructionToImage(de265_image* img, + const seq_parameter_set* sps) const +{ + if (split_cu_flag) { + for (int i=0;i<4;i++) { + if (children[i]) { + children[i]->writeReconstructionToImage(img,sps); + } + } + } + else { + transform_tree->writeReconstructionToImage(img,sps); + } +} + +void enc_tb::writeReconstructionToImage(de265_image* img, + const seq_parameter_set* sps) const +{ + if (split_transform_flag) { + for (int i=0;i<4;i++) { + if (children[i]) { + children[i]->writeReconstructionToImage(img,sps); + } + } + } + else { + // luma pixels + + PixelAccessor lumaPixels(*reconstruction[0], x,y); + lumaPixels.copyToImage(img, 0); + + // chroma pixels + + if (sps->chroma_format_idc == CHROMA_444) { + PixelAccessor chroma1Pixels(*reconstruction[1], x,y); + chroma1Pixels.copyToImage(img, 1); + PixelAccessor chroma2Pixels(*reconstruction[2], x,y); + chroma2Pixels.copyToImage(img, 2); + } + else if (log2Size>2) { + PixelAccessor chroma1Pixels(*reconstruction[1], x>>1,y>>1); + chroma1Pixels.copyToImage(img, 1); + PixelAccessor chroma2Pixels(*reconstruction[2], x>>1,y>>1); + chroma2Pixels.copyToImage(img, 2); + + //reconstruct_tb(ectx, img, x,y, log2Size-1, 1); + //reconstruct_tb(ectx, img, x,y, log2Size-1, 2); + } + else if (blkIdx==3) { + int xBase = x - (1<<log2Size); + int yBase = y - (1<<log2Size); + + PixelAccessor chroma1Pixels(*reconstruction[1], xBase>>1,yBase>>1); + chroma1Pixels.copyToImage(img, 1); + PixelAccessor chroma2Pixels(*reconstruction[2], xBase>>1,yBase>>1); + chroma2Pixels.copyToImage(img, 2); + + //reconstruct_tb(ectx, img, xBase,yBase, log2Size, 1); + //reconstruct_tb(ectx, img, xBase,yBase, log2Size, 2); + } + } +} + + +PixelAccessor enc_tb::getPixels(int x,int y, int cIdx, const seq_parameter_set& sps) +{ + int xL = x << sps.get_chroma_shift_W(cIdx); + int yL = y << sps.get_chroma_shift_H(cIdx); + + const enc_tb* tb = getTB(xL,yL); + + if (cIdx==0 || sps.chroma_format_idc == CHROMA_444) { + return PixelAccessor(*tb->reconstruction[cIdx], tb->x, tb->y); + } + else if (sps.chroma_format_idc == CHROMA_420) { + if (tb->log2Size > 2) { + return PixelAccessor(*tb->reconstruction[cIdx], + tb->x >> 1, + tb->y >> 1); + } + else { + enc_tb* parent = tb->parent; + tb = parent->children[3]; + + return PixelAccessor(*tb->reconstruction[cIdx], + parent->x >> 1, + parent->y >> 1); + } + } + else { + assert(sps.chroma_format_idc == CHROMA_422); + + assert(false); // not supported yet + + return PixelAccessor::invalid(); + } +} + + +void PixelAccessor::copyToImage(de265_image* img, int cIdx) const +{ + uint8_t* p = img->get_image_plane_at_pos(cIdx, mXMin, mYMin); + int stride = img->get_image_stride(cIdx); + + for (int y=0;y<mHeight;y++) { + memcpy(p, mBase+mXMin+(y+mYMin)*mStride, mWidth); + p += stride; + } +} + +void PixelAccessor::copyFromImage(const de265_image* img, int cIdx) +{ + const uint8_t* p = img->get_image_plane_at_pos(cIdx, mXMin, mYMin); + int stride = img->get_image_stride(cIdx); + + for (int y=0;y<mHeight;y++) { + memcpy(mBase+mXMin+(y+mYMin)*mStride, p, mWidth); + p += stride; + } +}
View file
libde265-1.0.3.tar.gz/libde265/encoder/encoder-types.h
Added
@@ -0,0 +1,409 @@ +/* + * H.265 video codec. + * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> + * + * Authors: Dirk Farin <farin@struktur.de> + * + * This file is part of libde265. + * + * libde265 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libde265 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libde265. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ENCODE_H +#define ENCODE_H + +#include "libde265/image.h" +#include "libde265/decctx.h" +#include "libde265/image-io.h" +#include "libde265/alloc_pool.h" + +#include <memory> + +class encoder_context; +class enc_cb; + + +class small_image_buffer +{ + public: + explicit small_image_buffer(int log2Size,int bytes_per_pixel=1); + ~small_image_buffer(); + + uint8_t* get_buffer_u8() const { return mBuf; } + int16_t* get_buffer_s16() const { return (int16_t*)mBuf; } + uint16_t* get_buffer_u16() const { return (uint16_t*)mBuf; } + template <class pixel_t> pixel_t* get_buffer() const { return (pixel_t*)mBuf; } + + void copy_to(small_image_buffer& b) const { + assert(b.mHeight==mHeight); + assert(b.mBytesPerRow==mBytesPerRow); + memcpy(b.mBuf, mBuf, mBytesPerRow*mHeight); + } + + int getWidth() const { return mWidth; } + int getHeight() const { return mHeight; } + + int getStride() const { return mStride; } // pixels per row + + private: + uint8_t* mBuf; + uint16_t mStride; + uint16_t mBytesPerRow; + + uint8_t mWidth, mHeight; + + // small_image_buffer cannot be copied + + small_image_buffer(const small_image_buffer&) { assert(false); } // = delete; + small_image_buffer& operator=(const small_image_buffer&) { assert(false); return *this; } // = delete; +}; + + +class enc_node +{ +public: + enc_node() { } + enc_node(int _x,int _y, int _log2Size) : x(_x), y(_y), log2Size(_log2Size) { } + virtual ~enc_node() { } + + uint16_t x,y; + uint8_t log2Size : 3; + + + static const int DUMPTREE_INTRA_PREDICTION = (1<<0); + static const int DUMPTREE_RESIDUAL = (1<<1); + static const int DUMPTREE_RECONSTRUCTION = (1<<2); + static const int DUMPTREE_ALL = 0xFFFF; + + virtual void debug_dumpTree(int flags, int indent=0) const = 0; +}; + + +class PixelAccessor +{ + public: + PixelAccessor(small_image_buffer& buf, int x0,int y0) { + mBase = buf.get_buffer_u8(); + mStride = buf.getStride(); + mXMin = x0; + mYMin = y0; + mWidth = buf.getWidth(); + mHeight= buf.getHeight(); + + mBase -= x0 + y0*mStride; + } + + const uint8_t* operator[](int y) const { return mBase+y*mStride; } + + int getLeft() const { return mXMin; } + int getWidth() const { return mWidth; } + int getTop() const { return mYMin; } + int getHeight() const { return mHeight; } + + void copyToImage(de265_image* img, int cIdx) const; + void copyFromImage(const de265_image* img, int cIdx); + + static PixelAccessor invalid() { + return PixelAccessor(); + } + + private: + uint8_t* mBase; + short mStride; + short mXMin, mYMin; + uint8_t mWidth, mHeight; + + PixelAccessor() { + mBase = NULL; + mStride = mXMin = mYMin = mWidth = mHeight = 0; + } +}; + + +class enc_tb : public enc_node +{ + public: + enc_tb(int x,int y,int log2TbSize, enc_cb* _cb); + ~enc_tb(); + + enc_tb* parent; + enc_cb* cb; + enc_tb** downPtr; + + uint8_t split_transform_flag : 1; + uint8_t TrafoDepth : 2; // 2 bits enough ? (TODO) + uint8_t blkIdx : 2; + + enum IntraPredMode intra_mode; + + // Note: in NxN partition mode, the chroma mode is always derived from + // the top-left child's intra mode (for chroma 4:2:0). + enum IntraPredMode intra_mode_chroma; + + uint8_t cbf[3]; + + + /* intra_prediction and residual is filled in tb-split, because this is where we decide + on the final block-size the TB is coded with. + */ + //mutable uint8_t debug_intra_border[2*64+1]; + std::shared_ptr<small_image_buffer> intra_prediction[3]; + std::shared_ptr<small_image_buffer> residual[3]; + + /* Reconstruction is computed on-demand in writeMetadata(). + */ + mutable std::shared_ptr<small_image_buffer> reconstruction[3]; + + union { + // split + struct { + enc_tb* children[4]; + }; + + // leaf node + struct { + int16_t* coeff[3]; + + bool skip_transform[3][2]; + uint8_t explicit_rdpcm[3][2]; + }; + }; + + float distortion; // total distortion for this level of the TB tree (including all children) + float rate; // total rate for coding this TB level and all children + float rate_withoutCbfChroma; + + void set_cbf_flags_from_children(); + + void reconstruct(encoder_context* ectx, de265_image* img) const; + void debug_writeBlack(encoder_context* ectx, de265_image* img) const; + + bool isZeroBlock() const { return cbf[0]==false && cbf[1]==false && cbf[2]==false; } + + void alloc_coeff_memory(int cIdx, int tbSize); + + const enc_tb* getTB(int x,int y) const; + + PixelAccessor getPixels(int x,int y, int cIdx, const seq_parameter_set& sps); + + void writeReconstructionToImage(de265_image* img, + const seq_parameter_set* sps) const; + + /* + static void* operator new(const size_t size) { return mMemPool.new_obj(size); } + static void operator delete(void* obj) { mMemPool.delete_obj(obj); } + */ + + + virtual void debug_dumpTree(int flags, int indent=0) const; + +private: + static alloc_pool mMemPool; + + void reconstruct_tb(encoder_context* ectx, + de265_image* img, int x0,int y0, int log2TbSize, + int cIdx) const; +}; + + +struct enc_pb_inter +{ + /* absolute motion information (for MV-prediction candidates) + */ + PBMotion motion; + + /* specification how to code the motion vector in the bitstream + */ + PBMotionCoding spec; + + + // NOT TRUE: refIdx in 'spec' is not used. It is taken from 'motion' + // Currently, information is duplicated. Same as with inter_pred_idc/predFlag[]. + + /* SPEC: + int8_t refIdx[2]; // not used + int16_t mvd[2][2]; + + uint8_t inter_pred_idc : 2; // enum InterPredIdc + uint8_t mvp_l0_flag : 1; + uint8_t mvp_l1_flag : 1; + uint8_t merge_flag : 1; + uint8_t merge_idx : 3; + */ +}; + + +class enc_cb : public enc_node +{ +public: + enc_cb(); + ~enc_cb(); + + enc_cb* parent; + enc_cb** downPtr; + + uint8_t split_cu_flag : 1; + uint8_t ctDepth : 2; + + + union { + // split + struct { + enc_cb* children[4]; // undefined when split_cu_flag==false + }; + + // non-split + struct { + uint8_t qp : 6; + uint8_t cu_transquant_bypass_flag : 1; // currently unused + uint8_t pcm_flag : 1; + + enum PredMode PredMode; // : 6; + enum PartMode PartMode; // : 3; + + union { + struct { + //enum IntraPredMode pred_mode[4]; + //enum IntraPredMode chroma_mode; + } intra; + + struct { + enc_pb_inter pb[4]; + + uint8_t rqt_root_cbf : 1; + } inter; + }; + + enc_tb* transform_tree; + }; + }; + + + float distortion; + float rate; + + + void set_rqt_root_bf_from_children_cbf(); + + /* Save CB reconstruction in the node and restore it again to the image. + Pixel data and metadata. + */ + //virtual void save(const de265_image*); + //virtual void restore(de265_image*); + + + /* Decode this CB: pixel data and write metadata to image. + */ + void reconstruct(encoder_context* ectx,de265_image* img) const; + + // can only be called on the lowest-level CB (with TB-tree as its direct child) + const enc_tb* getTB(int x,int y) const; + + void writeReconstructionToImage(de265_image* img, + const seq_parameter_set* sps) const; + + + virtual void debug_dumpTree(int flags, int indent=0) const; + + + // memory management + + static void* operator new(const size_t size) { + void* p = mMemPool.new_obj(size); + //printf("ALLOC %p\n",p); + return p; + } + static void operator delete(void* obj) { + //printf("DELETE %p\n",obj); + mMemPool.delete_obj(obj); + } + + private: + //void write_to_image(de265_image*) const; + + static alloc_pool mMemPool; +}; + + + +class CTBTreeMatrix +{ + public: + CTBTreeMatrix() : mWidthCtbs(0), mHeightCtbs(0), mLog2CtbSize(0) { } + ~CTBTreeMatrix() { free(); } + + void alloc(int w,int h, int log2CtbSize); + void clear() { free(); } + + void setCTB(int xCTB, int yCTB, enc_cb* ctb) { + int idx = xCTB + yCTB*mWidthCtbs; + assert(idx < mCTBs.size()); + if (mCTBs[idx]) { delete mCTBs[idx]; } + mCTBs[idx] = ctb; + } + + const enc_cb* getCTB(int xCTB, int yCTB) const { + int idx = xCTB + yCTB*mWidthCtbs; + assert(idx < mCTBs.size()); + return mCTBs[idx]; + } + + enc_cb** getCTBRootPointer(int x, int y) { + x >>= mLog2CtbSize; + y >>= mLog2CtbSize; + + int idx = x + y*mWidthCtbs; + assert(idx < mCTBs.size()); + return &mCTBs[idx]; + } + + const enc_cb* getCB(int x,int y) const; + const enc_tb* getTB(int x,int y) const; + const enc_pb_inter* getPB(int x,int y) const; + + void writeReconstructionToImage(de265_image* img, + const seq_parameter_set*) const; + + private: + std::vector<enc_cb*> mCTBs; + int mWidthCtbs; + int mHeightCtbs; + int mLog2CtbSize; + + void free() { + for (int i=0 ; i<mWidthCtbs*mHeightCtbs ; i++) { + if (mCTBs[i]) { + delete mCTBs[i]; + mCTBs[i]=NULL; + } + } + } +}; + + + + +inline int childX(int x0, int idx, int log2CbSize) +{ + return x0 + ((idx&1) << (log2CbSize-1)); +} + +inline int childY(int y0, int idx, int log2CbSize) +{ + return y0 + ((idx>>1) << (log2CbSize-1)); +} + + + +#endif
View file
libde265-1.0.2.tar.gz/libde265/encoder/sop.cc -> libde265-1.0.3.tar.gz/libde265/encoder/sop.cc
Changed
@@ -29,7 +29,7 @@ void sop_creator_intra_only::set_SPS_header_values() { - mEncCtx->sps.log2_max_pic_order_cnt_lsb = get_num_poc_lsb_bits(); + mEncCtx->get_sps().log2_max_pic_order_cnt_lsb = get_num_poc_lsb_bits(); } @@ -70,8 +70,8 @@ rps.NumNegativePics = 1; rps.NumPositivePics = 0; rps.compute_derived_values(); - mEncCtx->sps.ref_pic_sets.push_back(rps); - mEncCtx->sps.log2_max_pic_order_cnt_lsb = get_num_poc_lsb_bits(); + mEncCtx->get_sps().ref_pic_sets.push_back(rps); + mEncCtx->get_sps().log2_max_pic_order_cnt_lsb = get_num_poc_lsb_bits(); }
View file
libde265-1.0.2.tar.gz/libde265/fallback-dct.cc -> libde265-1.0.3.tar.gz/libde265/fallback-dct.cc
Changed
@@ -22,7 +22,7 @@ #if defined(_MSC_VER) || defined(__MINGW32__) # include <malloc.h> -#else +#elif defined(HAVE_ALLOCA_H) # include <alloca.h> #endif @@ -959,8 +959,6 @@ sum += mat_dct[fact*i][j] * input[c+j*stride]; } - //assert((sum+rnd1)>>shift1 <= 32767); - //assert((sum+rnd1)>>shift1 >= -32768); g[c+i*nT] = (sum+rnd1)>>shift1; // clipping to -32768;32767 unnecessary } }
View file
libde265-1.0.2.tar.gz/libde265/fallback-motion.cc -> libde265-1.0.3.tar.gz/libde265/fallback-motion.cc
Changed
@@ -23,7 +23,7 @@ #if defined(_MSC_VER) || defined(__MINGW32__) # include <malloc.h> -#else +#elif defined(HAVE_ALLOCA_H) # include <alloca.h> #endif
View file
libde265-1.0.2.tar.gz/libde265/image-io.cc -> libde265-1.0.3.tar.gz/libde265/image-io.cc
Changed
@@ -24,6 +24,18 @@ #include <assert.h> + +ImageSource::ImageSource() +{ +} + + +ImageSource_YUV::ImageSource_YUV() + : mFH(NULL) +{ +} + + ImageSource_YUV::~ImageSource_YUV() { if (mFH) { @@ -165,6 +177,12 @@ +PacketSink_File::PacketSink_File() + : mFH(NULL) +{ +} + + LIBDE265_API PacketSink_File::~PacketSink_File() { if (mFH) {
View file
libde265-1.0.2.tar.gz/libde265/image-io.h -> libde265-1.0.3.tar.gz/libde265/image-io.h
Changed
@@ -30,7 +30,7 @@ class ImageSource { public: - LIBDE265_API ImageSource() { } + LIBDE265_API ImageSource(); virtual LIBDE265_API ~ImageSource() { } //enum ImageStatus { Available, Waiting, EndOfVideo }; @@ -48,7 +48,7 @@ class ImageSource_YUV : public ImageSource { public: - LIBDE265_API ImageSource_YUV() : mFH(NULL) { } + LIBDE265_API ImageSource_YUV(); virtual LIBDE265_API ~ImageSource_YUV(); bool LIBDE265_API set_input_file(const char* filename, int w,int h); @@ -71,7 +71,6 @@ - class ImageSink { public: @@ -108,7 +107,7 @@ class PacketSink_File : public PacketSink { public: - LIBDE265_API PacketSink_File() : mFH(NULL) { } + LIBDE265_API PacketSink_File(); virtual LIBDE265_API ~PacketSink_File(); LIBDE265_API void set_filename(const char* filename);
View file
libde265-1.0.2.tar.gz/libde265/image.cc -> libde265-1.0.3.tar.gz/libde265/image.cc
Changed
@@ -47,7 +47,7 @@ #elif _WIN32 #define ALLOC_ALIGNED(alignment, size) _aligned_malloc((size), (alignment)) #define FREE_ALIGNED(mem) _aligned_free((mem)) -#elif __APPLE__ +#elif defined(HAVE_POSIX_MEMALIGN) static inline void *ALLOC_ALIGNED(size_t alignment, size_t size) { void *mem = NULL; if (posix_memalign(&mem, alignment, size) != 0) { @@ -106,17 +106,17 @@ static int de265_image_get_buffer(de265_decoder_context* ctx, de265_image_spec* spec, de265_image* img, void* userdata) { - const int rawChromaWidth = spec->width / img->sps.SubWidthC; - const int rawChromaHeight = spec->height / img->sps.SubHeightC; + const int rawChromaWidth = spec->width / img->SubWidthC; + const int rawChromaHeight = spec->height / img->SubHeightC; int luma_stride = (spec->width + spec->alignment-1) / spec->alignment * spec->alignment; int chroma_stride = (rawChromaWidth + spec->alignment-1) / spec->alignment * spec->alignment; - assert(img->sps.BitDepth_Y >= 8 && img->sps.BitDepth_Y <= 16); - assert(img->sps.BitDepth_C >= 8 && img->sps.BitDepth_C <= 16); + assert(img->BitDepth_Y >= 8 && img->BitDepth_Y <= 16); + assert(img->BitDepth_C >= 8 && img->BitDepth_C <= 16); - int luma_bpl = luma_stride * ((img->sps.BitDepth_Y+7)/8); - int chroma_bpl = chroma_stride * ((img->sps.BitDepth_C+7)/8); + int luma_bpl = luma_stride * ((img->BitDepth_Y+7)/8); + int chroma_bpl = chroma_stride * ((img->BitDepth_C+7)/8); int luma_height = spec->height; int chroma_height = rawChromaHeight; @@ -230,16 +230,16 @@ de265_error de265_image::alloc_image(int w,int h, enum de265_chroma c, - const seq_parameter_set* sps, bool allocMetadata, + std::shared_ptr<const seq_parameter_set> sps, bool allocMetadata, decoder_context* dctx, encoder_context* ectx, de265_PTS pts, void* user_data, bool useCustomAllocFunc) { //if (allocMetadata) { assert(sps); } - assert(sps); + if (allocMetadata) { assert(sps); } - this->sps = *sps; + if (sps) { this->sps = sps; } release(); /* TODO: review code for efficient allocation when arrays are already allocated to the requested size. Without the release, the old image-data @@ -281,21 +281,29 @@ spec.format = de265_image_format_YUV420P8; chroma_width = (chroma_width +1)/2; chroma_height = (chroma_height+1)/2; + SubWidthC = 2; + SubHeightC = 2; break; case de265_chroma_422: spec.format = de265_image_format_YUV422P8; chroma_width = (chroma_width+1)/2; + SubWidthC = 2; + SubHeightC = 1; break; case de265_chroma_444: spec.format = de265_image_format_YUV444P8; + SubWidthC = 1; + SubHeightC = 1; break; case de265_chroma_mono: spec.format = de265_image_format_mono8; chroma_width = 0; chroma_height= 0; + SubWidthC = 1; + SubHeightC = 1; break; default: @@ -303,6 +311,11 @@ break; } + if (sps) { + assert(sps->SubWidthC == SubWidthC); + assert(sps->SubHeightC == SubHeightC); + } + spec.width = w; spec.height = h; spec.alignment = STANDARD_ALIGNMENT; @@ -329,8 +342,11 @@ spec.visible_height= height_confwin; - bpp_shift[0] = (sps->BitDepth_Y > 8) ? 1 : 0; - bpp_shift[1] = (sps->BitDepth_C > 8) ? 1 : 0; + BitDepth_Y = (sps==NULL) ? 8 : sps->BitDepth_Y; + BitDepth_C = (sps==NULL) ? 8 : sps->BitDepth_C; + + bpp_shift[0] = (BitDepth_Y <= 8) ? 0 : 1; + bpp_shift[1] = (BitDepth_C <= 8) ? 0 : 1; bpp_shift[2] = bpp_shift[1]; @@ -515,7 +531,7 @@ Another option would be to safe the copied data not in an de265_image at all. */ - de265_error err = alloc_image(src->width, src->height, src->chroma_format, &src->sps, false, + de265_error err = alloc_image(src->width, src->height, src->chroma_format, src->sps, false, src->decctx, src->encctx, src->pts, src->user_data, false); if (err != DE265_OK) { return err; @@ -535,8 +551,8 @@ assert(first % 2 == 0); assert(end % 2 == 0); - int luma_bpp = (sps.BitDepth_Y+7)/8; - int chroma_bpp = (sps.BitDepth_C+7)/8; + int luma_bpp = (sps->BitDepth_Y+7)/8; + int chroma_bpp = (sps->BitDepth_C+7)/8; if (src->stride == stride) { memcpy(pixels[0] + first*stride * luma_bpp, @@ -551,8 +567,8 @@ } } - int first_chroma = first / src->sps.SubHeightC; - int end_chroma = end / src->sps.SubHeightC; + int first_chroma = first / src->SubHeightC; + int end_chroma = end / src->SubHeightC; if (src->chroma_format != de265_chroma_mono) { if (src->chroma_stride == chroma_stride) { @@ -650,7 +666,7 @@ void de265_image::wait_for_progress(thread_task* task, int ctbx,int ctby, int progress) { - const int ctbW = sps.PicWidthInCtbsY; + const int ctbW = sps->PicWidthInCtbsY; wait_for_progress(task, ctbx + ctbW*ctby, progress); } @@ -712,7 +728,7 @@ } -void de265_image::set_mv_info(int x,int y, int nPbW,int nPbH, const MotionVectorSpec& mv) +void de265_image::set_mv_info(int x,int y, int nPbW,int nPbH, const PBMotion& mv) { int log2PuSize = 2; @@ -726,7 +742,7 @@ for (int pby=0;pby<hPu;pby++) for (int pbx=0;pbx<wPu;pbx++) { - pb_info[ xPu+pbx + (yPu+pby)*stride ].mv = mv; + pb_info[ xPu+pbx + (yPu+pby)*stride ] = mv; } } @@ -734,28 +750,28 @@ bool de265_image::available_zscan(int xCurr,int yCurr, int xN,int yN) const { if (xN<0 || yN<0) return false; - if (xN>=sps.pic_width_in_luma_samples || - yN>=sps.pic_height_in_luma_samples) return false; + if (xN>=sps->pic_width_in_luma_samples || + yN>=sps->pic_height_in_luma_samples) return false; - int minBlockAddrN = pps.MinTbAddrZS[ (xN>>sps.Log2MinTrafoSize) + - (yN>>sps.Log2MinTrafoSize) * sps.PicWidthInTbsY ]; - int minBlockAddrCurr = pps.MinTbAddrZS[ (xCurr>>sps.Log2MinTrafoSize) + - (yCurr>>sps.Log2MinTrafoSize) * sps.PicWidthInTbsY ]; + int minBlockAddrN = pps->MinTbAddrZS[ (xN>>sps->Log2MinTrafoSize) + + (yN>>sps->Log2MinTrafoSize) * sps->PicWidthInTbsY ]; + int minBlockAddrCurr = pps->MinTbAddrZS[ (xCurr>>sps->Log2MinTrafoSize) + + (yCurr>>sps->Log2MinTrafoSize) * sps->PicWidthInTbsY ]; if (minBlockAddrN > minBlockAddrCurr) return false; - int xCurrCtb = xCurr >> sps.Log2CtbSizeY; - int yCurrCtb = yCurr >> sps.Log2CtbSizeY; - int xNCtb = xN >> sps.Log2CtbSizeY; - int yNCtb = yN >> sps.Log2CtbSizeY; + int xCurrCtb = xCurr >> sps->Log2CtbSizeY; + int yCurrCtb = yCurr >> sps->Log2CtbSizeY; + int xNCtb = xN >> sps->Log2CtbSizeY; + int yNCtb = yN >> sps->Log2CtbSizeY; if (get_SliceAddrRS(xCurrCtb,yCurrCtb) != get_SliceAddrRS(xNCtb, yNCtb)) { return false; } - if (pps.TileIdRS[xCurrCtb + yCurrCtb*sps.PicWidthInCtbsY] != - pps.TileIdRS[xNCtb + yNCtb *sps.PicWidthInCtbsY]) { + if (pps->TileIdRS[xCurrCtb + yCurrCtb*sps->PicWidthInCtbsY] != + pps->TileIdRS[xNCtb + yNCtb *sps->PicWidthInCtbsY]) { return false; }
View file
libde265-1.0.2.tar.gz/libde265/image.h -> libde265-1.0.3.tar.gz/libde265/image.h
Changed
@@ -29,9 +29,11 @@ #include <stdint.h> #include <stdlib.h> #include <string.h> +#include <memory> #ifdef HAVE_STDBOOL_H #include <stdbool.h> #endif + #include "libde265/de265.h" #include "libde265/en265.h" #include "libde265/sps.h" @@ -214,12 +216,6 @@ } CB_ref_info; -typedef struct { - MotionVectorSpec mv; // TODO: this can be done in 16x16 grid -} PB_ref_info; - -// intraPredMode: Used for determining scanIdx when decoding/encoding coefficients. - struct de265_image { @@ -228,7 +224,7 @@ de265_error alloc_image(int w,int h, enum de265_chroma c, - const seq_parameter_set* sps, + std::shared_ptr<const seq_parameter_set> sps, bool allocMetadata, decoder_context* dctx, class encoder_context* ectx, @@ -241,6 +237,14 @@ void release(); + void set_headers(std::shared_ptr<video_parameter_set> _vps, + std::shared_ptr<seq_parameter_set> _sps, + std::shared_ptr<pic_parameter_set> _pps) { + vps = _vps; + sps = _sps; + pps = _pps; + } + void fill_image(int y,int u,int v); de265_error copy_image(const de265_image* src); void copy_lines_from(const de265_image* src, int first, int end); @@ -304,8 +308,8 @@ enum de265_chroma get_chroma_format() const { return chroma_format; } int get_bit_depth(int cIdx) const { - if (cIdx==0) return sps.BitDepth_Y; - else return sps.BitDepth_C; + if (cIdx==0) return sps->BitDepth_Y; + else return sps->BitDepth_C; } int get_bytes_per_pixel(int cIdx) const { @@ -354,6 +358,8 @@ int stride, chroma_stride; public: + uint8_t BitDepth_Y, BitDepth_C; + uint8_t SubWidthC, SubHeightC; std::vector<slice_segment_header*> slices; public: @@ -376,18 +382,35 @@ int32_t removed_at_picture_id; - video_parameter_set vps; - seq_parameter_set sps; // the SPS used for decoding this image - pic_parameter_set pps; // the PPS used for decoding this image + const video_parameter_set& get_vps() const { return *vps; } + const seq_parameter_set& get_sps() const { return *sps; } + const pic_parameter_set& get_pps() const { return *pps; } + + bool has_vps() const { return (bool)vps; } + bool has_sps() const { return (bool)sps; } + bool has_pps() const { return (bool)pps; } + + std::shared_ptr<const seq_parameter_set> get_shared_sps() { return sps; } + + //std::shared_ptr<const seq_parameter_set> get_shared_sps() const { return sps; } + //std::shared_ptr<const pic_parameter_set> get_shared_pps() const { return pps; } + decoder_context* decctx; class encoder_context* encctx; int number_of_ctbs() const { return ctb_info.size(); } private: + // The image also keeps a reference to VPS/SPS/PPS, because when decoding is delayed, + // the currently active parameter sets in the decctx might already have been replaced + // with new parameters. + std::shared_ptr<const video_parameter_set> vps; + std::shared_ptr<const seq_parameter_set> sps; // the SPS used for decoding this image + std::shared_ptr<const pic_parameter_set> pps; // the PPS used for decoding this image + MetaDataArray<CTB_info> ctb_info; MetaDataArray<CB_ref_info> cb_info; - MetaDataArray<PB_ref_info> pb_info; + MetaDataArray<PBMotion> pb_info; MetaDataArray<uint8_t> intraPredMode; MetaDataArray<uint8_t> intraPredModeC; MetaDataArray<uint8_t> tu_info; @@ -621,12 +644,12 @@ enum IntraPredMode mode) { int pbSize = 1<<(log2blkSize - intraPredMode.log2unitSize); - int PUidx = (x0>>sps.Log2MinPUSize) + (y0>>sps.Log2MinPUSize)*sps.PicWidthInMinPUs; + int PUidx = (x0>>sps->Log2MinPUSize) + (y0>>sps->Log2MinPUSize)*sps->PicWidthInMinPUs; for (int y=0;y<pbSize;y++) for (int x=0;x<pbSize;x++) { - assert(x<sps.PicWidthInMinPUs); - assert(y<sps.PicHeightInMinPUs); + assert(x < sps->PicWidthInMinPUs); + assert(y < sps->PicHeightInMinPUs); int idx = PUidx + x + y*intraPredMode.width_in_units; assert(idx<intraPredMode.data_size); @@ -652,12 +675,12 @@ if (is_mode4) combinedValue |= 0x80; int pbSize = 1<<(log2blkSize - intraPredMode.log2unitSize); - int PUidx = (x0>>sps.Log2MinPUSize) + (y0>>sps.Log2MinPUSize)*sps.PicWidthInMinPUs; + int PUidx = (x0>>sps->Log2MinPUSize) + (y0>>sps->Log2MinPUSize)*sps->PicWidthInMinPUs; for (int y=0;y<pbSize;y++) for (int x=0;x<pbSize;x++) { - assert(x<sps.PicWidthInMinPUs); - assert(y<sps.PicHeightInMinPUs); + assert(x<sps->PicWidthInMinPUs); + assert(y<sps->PicHeightInMinPUs); int idx = PUidx + x + y*intraPredModeC.width_in_units; assert(idx<intraPredModeC.data_size); @@ -821,12 +844,12 @@ // --- PB metadata access --- - const MotionVectorSpec* get_mv_info(int x,int y) const + const PBMotion& get_mv_info(int x,int y) const { - return &pb_info.get(x,y).mv; + return pb_info.get(x,y); } - void set_mv_info(int x,int y, int nPbW,int nPbH, const MotionVectorSpec& mv); + void set_mv_info(int x,int y, int nPbW,int nPbH, const PBMotion& mv); // --- value logging ---
View file
libde265-1.0.2.tar.gz/libde265/intrapred.cc -> libde265-1.0.3.tar.gz/libde265/intrapred.cc
Changed
@@ -21,12 +21,18 @@ #include "intrapred.h" #include "transform.h" #include "util.h" +#include "encoder/encoder-types.h" #include <assert.h> #include <sys/types.h> #include <string.h> +// Actually, the largest TB block can only be 32, but in some intra-pred-mode algorithms +// (e.g. min-residual), we may call intra prediction on the maximum CTB size (64). +static const int MAX_INTRA_PRED_BLOCK_SIZE = 64; + + #ifdef DE265_LOG_TRACE template <class pixel_t> @@ -52,12 +58,58 @@ #endif -void fillIntraPredModeCandidates(int candModeList[3], int x,int y, int PUidx, + +void fillIntraPredModeCandidates(enum IntraPredMode candModeList[3], + enum IntraPredMode candIntraPredModeA, + enum IntraPredMode candIntraPredModeB) +{ + // build candidate list + + if (candIntraPredModeA == candIntraPredModeB) { + if (candIntraPredModeA < 2) { + candModeList[0] = INTRA_PLANAR; + candModeList[1] = INTRA_DC; + candModeList[2] = INTRA_ANGULAR_26; + } + else { + candModeList[0] = candIntraPredModeA; + candModeList[1] = (enum IntraPredMode)(2 + ((candIntraPredModeA-2 -1 +32) % 32)); + candModeList[2] = (enum IntraPredMode)(2 + ((candIntraPredModeA-2 +1 ) % 32)); + } + } + else { + candModeList[0] = candIntraPredModeA; + candModeList[1] = candIntraPredModeB; + + if (candIntraPredModeA != INTRA_PLANAR && + candIntraPredModeB != INTRA_PLANAR) { + candModeList[2] = INTRA_PLANAR; + } + else if (candIntraPredModeA != INTRA_DC && + candIntraPredModeB != INTRA_DC) { + candModeList[2] = INTRA_DC; + } + else { + candModeList[2] = INTRA_ANGULAR_26; + } + } + + /* + printf("candModeList: %d %d %d\n", + candModeList[0], + candModeList[1], + candModeList[2] + ); + */ +} + + +void fillIntraPredModeCandidates(enum IntraPredMode candModeList[3], int x,int y, int PUidx, bool availableA, // left bool availableB, // top const de265_image* img) { - const seq_parameter_set* sps = &img->sps; + const seq_parameter_set* sps = &img->get_sps(); // block on left side @@ -90,53 +142,85 @@ } - // build candidate list + logtrace(LogSlice,"%d;%d candA:%d / candB:%d\n", x,y, + availableA ? candIntraPredModeA : -999, + availableB ? candIntraPredModeB : -999); - logtrace(LogSlice,"%d;%d availableA:%d candA:%d & availableB:%d candB:%d\n", x,y, - availableA, candIntraPredModeA, - availableB, candIntraPredModeB); - if (candIntraPredModeA == candIntraPredModeB) { - if (candIntraPredModeA < 2) { - candModeList[0] = INTRA_PLANAR; - candModeList[1] = INTRA_DC; - candModeList[2] = INTRA_ANGULAR_26; + fillIntraPredModeCandidates(candModeList, + candIntraPredModeA, + candIntraPredModeB); +} + + +void fillIntraPredModeCandidates(enum IntraPredMode candModeList[3], + int x,int y, + bool availableA, // left + bool availableB, // top + const CTBTreeMatrix& ctbs, + const seq_parameter_set* sps) +{ + + // block on left side + + enum IntraPredMode candIntraPredModeA, candIntraPredModeB; + + if (availableA==false) { + candIntraPredModeA=INTRA_DC; + } + else { + const enc_cb* cbL = ctbs.getCB(x-1,y); + assert(cbL != NULL); + + if (cbL->PredMode != MODE_INTRA || + cbL->pcm_flag) { + candIntraPredModeA=INTRA_DC; } else { - candModeList[0] = candIntraPredModeA; - candModeList[1] = 2 + ((candIntraPredModeA-2 -1 +32) % 32); - candModeList[2] = 2 + ((candIntraPredModeA-2 +1 ) % 32); + const enc_tb* tbL = cbL->getTB(x-1,y); + assert(tbL); + candIntraPredModeA = tbL->intra_mode; } } + + // block above + + if (availableB==false) { + candIntraPredModeB=INTRA_DC; + } else { - candModeList[0] = candIntraPredModeA; - candModeList[1] = candIntraPredModeB; + const enc_cb* cbA = ctbs.getCB(x,y-1); + assert(cbA != NULL); - if (candIntraPredModeA != INTRA_PLANAR && - candIntraPredModeB != INTRA_PLANAR) { - candModeList[2] = INTRA_PLANAR; + if (cbA->PredMode != MODE_INTRA || + cbA->pcm_flag) { + candIntraPredModeB=INTRA_DC; } - else if (candIntraPredModeA != INTRA_DC && - candIntraPredModeB != INTRA_DC) { - candModeList[2] = INTRA_DC; + else if (y-1 < ((y >> sps->Log2CtbSizeY) << sps->Log2CtbSizeY)) { + candIntraPredModeB=INTRA_DC; } else { - candModeList[2] = INTRA_ANGULAR_26; + const enc_tb* tbA = cbA->getTB(x,y-1); + assert(tbA); + + candIntraPredModeB = tbA->intra_mode; } } - /* - printf("candModeList: %d %d %d\n", - candModeList[0], - candModeList[1], - candModeList[2] - ); - */ + + logtrace(LogSlice,"%d;%d candA:%d / candB:%d\n", x,y, + availableA ? candIntraPredModeA : -999, + availableB ? candIntraPredModeB : -999); + + + fillIntraPredModeCandidates(candModeList, + candIntraPredModeA, + candIntraPredModeB); } int find_intra_pred_mode(enum IntraPredMode mode, - int candModeList[3]) + enum IntraPredMode candModeList[3]) { // check whether the mode is in the candidate list @@ -257,29 +341,107 @@ } -// (8.4.4.2.2) template <class pixel_t> -void fill_border_samples(de265_image* img, - int xB,int yB, // in component specific resolution - int nT, int cIdx, - pixel_t* out_border) +struct intra_border_computer { - const seq_parameter_set* sps = &img->sps; - const pic_parameter_set* pps = &img->pps; + pixel_t* out_border; - uint8_t available_data[2*64 + 1]; - uint8_t* available = &available_data[64]; + const de265_image* img; + int nT; + int cIdx; - pixel_t* image; - int stride; - image = (pixel_t*)img->get_image_plane(cIdx); - stride = img->get_image_stride(cIdx); + int xB,yB; + + const seq_parameter_set* sps; + const pic_parameter_set* pps; + + uint8_t available_data[4*MAX_INTRA_PRED_BLOCK_SIZE + 1]; + uint8_t* available; + + int SubWidth; + int SubHeight; + + bool availableLeft; // is CTB at left side available? + bool availableTop; // is CTB at top side available? + bool availableTopRight; // is CTB at top-right side available? + bool availableTopLeft; // if CTB at top-left pixel available? + + int nBottom; + int nRight; + int nAvail; + pixel_t firstValue; + + void init(pixel_t* _out_border, + const de265_image* _img, int _nT, int _cIdx, int _xB, int _yB) { + img=_img; nT=_nT; cIdx=_cIdx; + out_border=_out_border; xB=_xB; yB=_yB; + + assert(nT <= MAX_INTRA_PRED_BLOCK_SIZE); + + availableLeft=true; + availableTop=true; + availableTopRight=true; + availableTopLeft=true; + } + void preproc(); + void fill_from_image(); + void fill_from_ctbtree(const enc_tb* tb, + const CTBTreeMatrix& ctbs); + void reference_sample_substitution(); +}; - const int SubWidth = (cIdx==0) ? 1 : sps->SubWidthC; - const int SubHeight = (cIdx==0) ? 1 : sps->SubHeightC; + +template <class pixel_t> +void intra_border_computer<pixel_t>::reference_sample_substitution() +{ + // reference sample substitution const int bit_depth = img->get_bit_depth(cIdx); + if (nAvail!=4*nT+1) { + if (nAvail==0) { + if (sizeof(pixel_t)==1) { + memset(out_border-2*nT, 1<<(bit_depth-1), 4*nT+1); + } + else { + for (int i = -2*nT; i <= 2*nT ; i++) { + out_border[i] = 1<<(bit_depth-1); + } + } + } + else { + if (!available[-2*nT]) { + out_border[-2*nT] = firstValue; + } + + for (int i=-2*nT+1; i<=2*nT; i++) + if (!available[i]) { + out_border[i]=out_border[i-1]; + } + } + } + + logtrace(LogIntraPred,"availableN: "); + print_border(available,NULL,nT); + logtrace(LogIntraPred,"\n"); + + logtrace(LogIntraPred,"output: "); + print_border(out_border,NULL,nT); + logtrace(LogIntraPred,"\n"); +} + + + + +template <class pixel_t> +void intra_border_computer<pixel_t>::preproc() +{ + sps = &img->get_sps(); + pps = &img->get_pps(); + + SubWidth = (cIdx==0) ? 1 : sps->SubWidthC; + SubHeight = (cIdx==0) ? 1 : sps->SubHeightC; + // --- check for CTB boundaries --- int xBLuma = xB * SubWidth; @@ -288,11 +450,6 @@ int log2CtbSize = sps->Log2CtbSizeY; int picWidthInCtbs = sps->PicWidthInCtbsY; - bool availableLeft=true; // is CTB at left side available? - bool availableTop=true; // is CTB at top side available? - bool availableTopRight=true; // is CTB at top-right side available? - bool availableTopLeft=true; // if CTB at top-left pixel available? - //printf("xB/yB: %d %d\n",xB,yB); @@ -350,186 +507,352 @@ if (topleftCTBSlice !=currCTBSlice||topleftCTBTileID!=currCTBTileID ) availableTopLeft = false; if (toprightCTBSlice!=currCTBSlice||toprightCTBTileID!=currCTBTileID) availableTopRight= false; - int currBlockAddr = pps->MinTbAddrZS[ (xBLuma>>sps->Log2MinTrafoSize) + - (yBLuma>>sps->Log2MinTrafoSize) * sps->PicWidthInTbsY ]; - // number of pixels that are in the valid image area to the right and to the bottom - int nBottom = sps->pic_height_in_luma_samples - yB*SubHeight; + nBottom = sps->pic_height_in_luma_samples - yB*SubHeight; nBottom=(nBottom+SubHeight-1)/SubHeight; if (nBottom>2*nT) nBottom=2*nT; - int nRight = sps->pic_width_in_luma_samples - xB*SubWidth; + nRight = sps->pic_width_in_luma_samples - xB*SubWidth; nRight =(nRight +SubWidth-1)/SubWidth; if (nRight >2*nT) nRight=2*nT; - int nAvail=0; + nAvail=0; - pixel_t firstValue; + available = &available_data[2*MAX_INTRA_PRED_BLOCK_SIZE]; memset(available-2*nT, 0, 4*nT+1); +} - { - // copy pixels at left column - for (int y=nBottom-1 ; y>=0 ; y-=4) - if (availableLeft) - { - int NBlockAddr = pps->MinTbAddrZS[ (((xB-1)*SubWidth )>>sps->Log2MinTrafoSize) + - (((yB+y)*SubHeight)>>sps->Log2MinTrafoSize) - * sps->PicWidthInTbsY ]; - bool availableN = NBlockAddr <= currBlockAddr; +// (8.4.4.2.2) +template <class pixel_t> +void fill_border_samples(de265_image* img, + int xB,int yB, // in component specific resolution + int nT, int cIdx, + pixel_t* out_border) +{ + intra_border_computer<pixel_t> c; + c.init(out_border, img, nT, cIdx, xB, yB); + c.preproc(); + c.fill_from_image(); + c.reference_sample_substitution(); +} - if (pps->constrained_intra_pred_flag) { - if (img->get_pred_mode((xB-1)*SubWidth,(yB+y)*SubHeight)!=MODE_INTRA) - availableN = false; - } - if (availableN) { - if (!nAvail) firstValue = image[xB-1 + (yB+y)*stride]; +// (8.4.4.2.2) +template <class pixel_t> +void fill_border_samples_from_tree(const de265_image* img, + const enc_tb* tb, + const CTBTreeMatrix& ctbs, + int cIdx, + pixel_t* out_border) +{ + intra_border_computer<pixel_t> c; + + // xB,yB in component specific resolution + int xB,yB; + int nT = 1<<tb->log2Size; + + xB = tb->x; + yB = tb->y; + + if (img->get_sps().chroma_format_idc == CHROMA_444) { + } + else if (cIdx > 0) { + // TODO: proper chroma handling + xB >>= 1; + yB >>= 1; + nT >>= 1; + + if (tb->log2Size==2) { + xB = tb->parent->x >> 1; + yB = tb->parent->y >> 1; + nT = 4; + } + } + + c.init(out_border, img, nT, cIdx, xB, yB); + c.preproc(); + c.fill_from_ctbtree(tb, ctbs); + c.reference_sample_substitution(); +} - for (int i=0;i<4;i++) { - available[-y+i-1] = availableN; - out_border[-y+i-1] = image[xB-1 + (yB+y-i)*stride]; - } - nAvail+=4; +template <class pixel_t> +void intra_border_computer<pixel_t>::fill_from_image() +{ + assert(nT<=32); + + pixel_t* image; + int stride; + image = (pixel_t*)img->get_image_plane(cIdx); + stride = img->get_image_stride(cIdx); + + int xBLuma = xB * SubWidth; + int yBLuma = yB * SubHeight; + + int currBlockAddr = pps->MinTbAddrZS[ (xBLuma>>sps->Log2MinTrafoSize) + + (yBLuma>>sps->Log2MinTrafoSize) * sps->PicWidthInTbsY ]; + + + // copy pixels at left column + + for (int y=nBottom-1 ; y>=0 ; y-=4) + if (availableLeft) + { + int NBlockAddr = pps->MinTbAddrZS[ (((xB-1)*SubWidth )>>sps->Log2MinTrafoSize) + + (((yB+y)*SubHeight)>>sps->Log2MinTrafoSize) + * sps->PicWidthInTbsY ]; + + bool availableN = NBlockAddr <= currBlockAddr; + + if (pps->constrained_intra_pred_flag) { + if (img->get_pred_mode((xB-1)*SubWidth,(yB+y)*SubHeight)!=MODE_INTRA) + availableN = false; + } + + if (availableN) { + if (!nAvail) firstValue = image[xB-1 + (yB+y)*stride]; + + for (int i=0;i<4;i++) { + available[-y+i-1] = availableN; + out_border[-y+i-1] = image[xB-1 + (yB+y-i)*stride]; } + + nAvail+=4; } + } + + // copy pixel at top-left position - // copy pixel at top-left position + if (availableTopLeft) + { + int NBlockAddr = pps->MinTbAddrZS[ (((xB-1)*SubWidth )>>sps->Log2MinTrafoSize) + + (((yB-1)*SubHeight)>>sps->Log2MinTrafoSize) + * sps->PicWidthInTbsY ]; - if (availableTopLeft) + bool availableN = NBlockAddr <= currBlockAddr; + + if (pps->constrained_intra_pred_flag) { + if (img->get_pred_mode((xB-1)*SubWidth,(yB-1)*SubHeight)!=MODE_INTRA) { + availableN = false; + } + } + + if (availableN) { + if (!nAvail) firstValue = image[xB-1 + (yB-1)*stride]; + + out_border[0] = image[xB-1 + (yB-1)*stride]; + available[0] = availableN; + nAvail++; + } + } + + // copy pixels at top row + + for (int x=0 ; x<nRight ; x+=4) { + bool borderAvailable; + if (x<nT) borderAvailable=availableTop; + else borderAvailable=availableTopRight; + + if (borderAvailable) { - int NBlockAddr = pps->MinTbAddrZS[ (((xB-1)*SubWidth )>>sps->Log2MinTrafoSize) + + int NBlockAddr = pps->MinTbAddrZS[ (((xB+x)*SubWidth )>>sps->Log2MinTrafoSize) + (((yB-1)*SubHeight)>>sps->Log2MinTrafoSize) * sps->PicWidthInTbsY ]; bool availableN = NBlockAddr <= currBlockAddr; if (pps->constrained_intra_pred_flag) { - if (img->get_pred_mode((xB-1)*SubWidth,(yB-1)*SubHeight)!=MODE_INTRA) { + if (img->get_pred_mode((xB+x)*SubWidth,(yB-1)*SubHeight)!=MODE_INTRA) { availableN = false; } } + if (availableN) { - if (!nAvail) firstValue = image[xB-1 + (yB-1)*stride]; + if (!nAvail) firstValue = image[xB+x + (yB-1)*stride]; - out_border[0] = image[xB-1 + (yB-1)*stride]; - available[0] = availableN; - nAvail++; + for (int i=0;i<4;i++) { + out_border[x+i+1] = image[xB+x+i + (yB-1)*stride]; + available[x+i+1] = availableN; + } + + nAvail+=4; } } + } +} - // copy pixels at top row - for (int x=0 ; x<nRight ; x+=4) { - bool borderAvailable; - if (x<nT) borderAvailable=availableTop; - else borderAvailable=availableTopRight; +template <class pixel_t> +void intra_border_computer<pixel_t>::fill_from_ctbtree(const enc_tb* blkTb, + const CTBTreeMatrix& ctbs) +{ + int xBLuma = xB * SubWidth; + int yBLuma = yB * SubHeight; - if (borderAvailable) - { - int NBlockAddr = pps->MinTbAddrZS[ (((xB+x)*SubWidth )>>sps->Log2MinTrafoSize) + - (((yB-1)*SubHeight)>>sps->Log2MinTrafoSize) - * sps->PicWidthInTbsY ]; + int currBlockAddr = pps->MinTbAddrZS[ (xBLuma>>sps->Log2MinTrafoSize) + + (yBLuma>>sps->Log2MinTrafoSize) * sps->PicWidthInTbsY ]; - bool availableN = NBlockAddr <= currBlockAddr; - if (pps->constrained_intra_pred_flag) { - if (img->get_pred_mode((xB+x)*SubWidth,(yB-1)*SubHeight)!=MODE_INTRA) { - availableN = false; - } - } + // copy pixels at left column + + for (int y=nBottom-1 ; y>=0 ; y-=4) + if (availableLeft) + { + int NBlockAddr = pps->MinTbAddrZS[ (((xB-1)*SubWidth )>>sps->Log2MinTrafoSize) + + (((yB+y)*SubHeight)>>sps->Log2MinTrafoSize) + * sps->PicWidthInTbsY ]; + bool availableN = NBlockAddr <= currBlockAddr; - if (availableN) { - if (!nAvail) firstValue = image[xB+x + (yB-1)*stride]; + int xN = xB-1; + int yN = yB+y; - for (int i=0;i<4;i++) { - out_border[x+i+1] = image[xB+x+i + (yB-1)*stride]; - available[x+i+1] = availableN; - } + const enc_cb* cb = ctbs.getCB(xN*SubWidth, yN*SubHeight); - nAvail+=4; - } + if (pps->constrained_intra_pred_flag) { + if (cb->PredMode != MODE_INTRA) + availableN = false; } - } + if (availableN) { + PixelAccessor pa = cb->transform_tree->getPixels(xN,yN, cIdx, *sps); - // reference sample substitution + if (!nAvail) firstValue = pa[yB+y][xB-1]; - if (nAvail!=4*nT+1) { - if (nAvail==0) { - if (sizeof(pixel_t)==1) { - memset(out_border-2*nT, 1<<(bit_depth-1), 4*nT+1); - } - else { - for (int i = -2*nT; i <= 2*nT ; i++) { - out_border[i] = 1<<(bit_depth-1); + for (int i=0;i<4;i++) { + available[-y+i-1] = availableN; + out_border[-y+i-1] = pa[yB+y-i][xB-1]; } + + nAvail+=4; } } - else { - if (!available[-2*nT]) { - out_border[-2*nT] = firstValue; + + // copy pixel at top-left position + + if (availableTopLeft) + { + int NBlockAddr = pps->MinTbAddrZS[ (((xB-1)*SubWidth )>>sps->Log2MinTrafoSize) + + (((yB-1)*SubHeight)>>sps->Log2MinTrafoSize) + * sps->PicWidthInTbsY ]; + + bool availableN = NBlockAddr <= currBlockAddr; + + int xN = xB-1; + int yN = yB-1; + + const enc_cb* cb = ctbs.getCB(xN*SubWidth, yN*SubHeight); + + if (pps->constrained_intra_pred_flag) { + if (cb->PredMode!=MODE_INTRA) { + availableN = false; } + } - for (int i=-2*nT+1; i<=2*nT; i++) - if (!available[i]) { - out_border[i]=out_border[i-1]; - } + if (availableN) { + PixelAccessor pa = cb->transform_tree->getPixels(xN,yN, cIdx, *sps); + + out_border[0] = pa[yB-1][xB-1]; + available[0] = availableN; + + if (!nAvail) firstValue = out_border[0]; + nAvail++; } } - logtrace(LogIntraPred,"availableN: "); - print_border(available,NULL,nT); - logtrace(LogIntraPred,"\n"); - logtrace(LogIntraPred,"output: "); - print_border(out_border,NULL,nT); - logtrace(LogIntraPred,"\n"); + // copy pixels at top row + + for (int x=0 ; x<nRight ; x+=4) { + bool borderAvailable; + if (x<nT) borderAvailable=availableTop; + else borderAvailable=availableTopRight; + + if (borderAvailable) + { + int NBlockAddr = pps->MinTbAddrZS[ (((xB+x)*SubWidth )>>sps->Log2MinTrafoSize) + + (((yB-1)*SubHeight)>>sps->Log2MinTrafoSize) + * sps->PicWidthInTbsY ]; + + bool availableN = NBlockAddr <= currBlockAddr; + + int xN = xB+x; + int yN = yB-1; + + const enc_cb* cb = ctbs.getCB(xN*SubWidth, yN*SubHeight); + + if (pps->constrained_intra_pred_flag) { + if (cb->PredMode!=MODE_INTRA) { + availableN = false; + } + } + + + if (availableN) { + PixelAccessor pa = cb->transform_tree->getPixels(xN,yN, cIdx, *sps); + + if (!nAvail) firstValue = pa[yB-1][xB+x]; + + for (int i=0;i<4;i++) { + out_border[x+i+1] = pa[yB-1][xB+x+i]; + available[x+i+1] = availableN; + } + + nAvail+=4; + } + } } } // (8.4.4.2.3) template <class pixel_t> -void intra_prediction_sample_filtering(de265_image* img, +void intra_prediction_sample_filtering(const seq_parameter_set& sps, pixel_t* p, int nT, int cIdx, enum IntraPredMode intraPredMode) { int filterFlag; + //printf("filtering, mode: %d\n",intraPredMode); + if (intraPredMode==INTRA_DC || nT==4) { filterFlag = 0; } else { // int-cast below prevents a typing problem that leads to wrong results when abs_value is a macro int minDistVerHor = libde265_min( abs_value((int)intraPredMode-26), abs_value((int)intraPredMode-10) ); + + //printf("mindist: %d\n",minDistVerHor); + switch (nT) { case 8: filterFlag = (minDistVerHor>7) ? 1 : 0; break; case 16: filterFlag = (minDistVerHor>1) ? 1 : 0; break; case 32: filterFlag = (minDistVerHor>0) ? 1 : 0; break; + // there is no official 64x64 TB block, but we call this for some intra-pred mode algorithms + // on the whole CB (2Nx2N mode for the whole CTB) + case 64: filterFlag = 0; break; default: filterFlag = -1; assert(false); break; // should never happen } } if (filterFlag) { - int biIntFlag = (img->sps.strong_intra_smoothing_enable_flag && + int biIntFlag = (sps.strong_intra_smoothing_enable_flag && cIdx==0 && nT==32 && - abs_value(p[0]+p[ 64]-2*p[ 32]) < (1<<(img->sps.bit_depth_luma-5)) && - abs_value(p[0]+p[-64]-2*p[-32]) < (1<<(img->sps.bit_depth_luma-5))) + abs_value(p[0]+p[ 64]-2*p[ 32]) < (1<<(sps.bit_depth_luma-5)) && + abs_value(p[0]+p[-64]-2*p[-32]) < (1<<(sps.bit_depth_luma-5))) ? 1 : 0; - pixel_t pF_mem[2*64+1]; - pixel_t* pF = &pF_mem[64]; + pixel_t pF_mem[4*32+1]; + pixel_t* pF = &pF_mem[2*32]; if (biIntFlag) { pF[-2*nT] = p[-2*nT]; @@ -577,31 +900,21 @@ // (8.4.4.2.6) template <class pixel_t> -void intra_prediction_angular(de265_image* img, +void intra_prediction_angular(pixel_t* dst, int dstStride, + int bit_depth, bool disableIntraBoundaryFilter, int xB0,int yB0, enum IntraPredMode intraPredMode, int nT,int cIdx, pixel_t* border) { - pixel_t ref_mem[2*64+1]; - pixel_t* ref=&ref_mem[64]; - - pixel_t* pred; - int stride; - pred = img->get_image_plane_at_pos_NEW<pixel_t>(cIdx,xB0,yB0); - stride = img->get_image_stride(cIdx); - - int bit_depth = img->get_bit_depth(cIdx); + pixel_t ref_mem[4*MAX_INTRA_PRED_BLOCK_SIZE+1]; // TODO: what is the required range here ? + pixel_t* ref=&ref_mem[2*MAX_INTRA_PRED_BLOCK_SIZE]; assert(intraPredMode<35); assert(intraPredMode>=2); int intraPredAngle = intraPredAngle_table[intraPredMode]; - bool disableIntraBoundaryFilter = - (img->sps.range_extension.implicit_rdpcm_enabled_flag && - img->get_cu_transquant_bypass(xB0,yB0)); - if (intraPredMode >= 18) { for (int x=0;x<=nT;x++) @@ -628,15 +941,15 @@ int iFact= ((y+1)*intraPredAngle)&31; if (iFact != 0) { - pred[x+y*stride] = ((32-iFact)*ref[x+iIdx+1] + iFact*ref[x+iIdx+2] + 16)>>5; + dst[x+y*dstStride] = ((32-iFact)*ref[x+iIdx+1] + iFact*ref[x+iIdx+2] + 16)>>5; } else { - pred[x+y*stride] = ref[x+iIdx+1]; + dst[x+y*dstStride] = ref[x+iIdx+1]; } } if (intraPredMode==26 && cIdx==0 && nT<32 && !disableIntraBoundaryFilter) { for (int y=0;y<nT;y++) { - pred[0+y*stride] = Clip_BitDepth(border[1] + ((border[-1-y] - border[0])>>1), bit_depth); + dst[0+y*dstStride] = Clip_BitDepth(border[1] + ((border[-1-y] - border[0])>>1), bit_depth); } } } @@ -666,15 +979,15 @@ int iFact= ((x+1)*intraPredAngle)&31; // DIFF (x<->y) if (iFact != 0) { - pred[x+y*stride] = ((32-iFact)*ref[y+iIdx+1] + iFact*ref[y+iIdx+2] + 16)>>5; // DIFF (x<->y) + dst[x+y*dstStride] = ((32-iFact)*ref[y+iIdx+1] + iFact*ref[y+iIdx+2] + 16)>>5; // DIFF (x<->y) } else { - pred[x+y*stride] = ref[y+iIdx+1]; // DIFF (x<->y) + dst[x+y*dstStride] = ref[y+iIdx+1]; // DIFF (x<->y) } } if (intraPredMode==10 && cIdx==0 && nT<32 && !disableIntraBoundaryFilter) { // DIFF 26->10 for (int x=0;x<nT;x++) { // DIFF (x<->y) - pred[x] = Clip_BitDepth(border[-1] + ((border[1+x] - border[0])>>1), bit_depth); // DIFF (x<->y && neg) + dst[x] = Clip_BitDepth(border[-1] + ((border[1+x] - border[0])>>1), bit_depth); // DIFF (x<->y && neg) } } } @@ -685,7 +998,7 @@ for (int y=0;y<nT;y++) { for (int x=0;x<nT;x++) - logtrace(LogIntraPred,"%02x ", pred[x+y*stride]); + logtrace(LogIntraPred,"%02x ", dst[x+y*dstStride]); logtrace(LogIntraPred,"\n"); } @@ -693,21 +1006,17 @@ template <class pixel_t> -void intra_prediction_planar(de265_image* img,int xB0,int yB0,int nT,int cIdx, +void intra_prediction_planar(pixel_t* dst, int dstStride, + int nT,int cIdx, pixel_t* border) { - pixel_t* pred; - int stride; - pred = img->get_image_plane_at_pos_NEW<pixel_t>(cIdx,xB0,yB0); - stride = img->get_image_stride(cIdx); - int Log2_nT = Log2(nT); for (int y=0;y<nT;y++) for (int x=0;x<nT;x++) { - pred[x+y*stride] = ((nT-1-x)*border[-1-y] + (x+1)*border[ 1+nT] + - (nT-1-y)*border[ 1+x] + (y+1)*border[-1-nT] + nT) >> (Log2_nT+1); + dst[x+y*dstStride] = ((nT-1-x)*border[-1-y] + (x+1)*border[ 1+nT] + + (nT-1-y)*border[ 1+x] + (y+1)*border[-1-nT] + nT) >> (Log2_nT+1); } @@ -716,7 +1025,7 @@ for (int y=0;y<nT;y++) { for (int x=0;x<nT;x++) - logtrace(LogIntraPred,"%02x ", pred[x+y*stride]); + logtrace(LogIntraPred,"%02x ", dst[x+y*dstStride]); logtrace(LogIntraPred,"\n"); } @@ -724,14 +1033,10 @@ template <class pixel_t> -void intra_prediction_DC(de265_image* img,int xB0,int yB0,int nT,int cIdx, +void intra_prediction_DC(pixel_t* dst, int dstStride, + int nT,int cIdx, pixel_t* border) { - pixel_t* pred; - int stride; - pred = img->get_image_plane_at_pos_NEW<pixel_t>(cIdx,xB0,yB0); - stride = img->get_image_stride(cIdx); - int Log2_nT = Log2(nT); int dcVal = 0; @@ -745,32 +1050,22 @@ dcVal >>= Log2_nT+1; if (cIdx==0 && nT<32) { - pred[0] = (border[-1] + 2*dcVal + border[1] +2) >> 2; + dst[0] = (border[-1] + 2*dcVal + border[1] +2) >> 2; - for (int x=1;x<nT;x++) { pred[x] = (border[ x+1] + 3*dcVal+2)>>2; } - for (int y=1;y<nT;y++) { pred[y*stride] = (border[-y-1] + 3*dcVal+2)>>2; } + for (int x=1;x<nT;x++) { dst[x] = (border[ x+1] + 3*dcVal+2)>>2; } + for (int y=1;y<nT;y++) { dst[y*dstStride] = (border[-y-1] + 3*dcVal+2)>>2; } for (int y=1;y<nT;y++) for (int x=1;x<nT;x++) { - pred[x+y*stride] = dcVal; + dst[x+y*dstStride] = dcVal; } } else { for (int y=0;y<nT;y++) for (int x=0;x<nT;x++) { - pred[x+y*stride] = dcVal; + dst[x+y*dstStride] = dcVal; } } - - - logtrace(LogIntraPred,"INTRAPRED DC\n"); - for (int y=0;y<nT;y++) - { - for (int x=0;x<nT;x++) - logtrace(LogIntraPred,"%02x ", pred[x+y*stride]); - - logtrace(LogIntraPred,"\n"); - } } @@ -779,29 +1074,38 @@ void decode_intra_prediction_internal(de265_image* img, int xB0,int yB0, enum IntraPredMode intraPredMode, + pixel_t* dst, int dstStride, int nT, int cIdx) { - pixel_t border_pixels_mem[2*64+1]; - pixel_t* border_pixels = &border_pixels_mem[64]; + pixel_t border_pixels_mem[4*MAX_INTRA_PRED_BLOCK_SIZE+1]; + pixel_t* border_pixels = &border_pixels_mem[2*MAX_INTRA_PRED_BLOCK_SIZE]; fill_border_samples(img, xB0,yB0, nT, cIdx, border_pixels); - if (img->sps.range_extension.intra_smoothing_disabled_flag == 0 && - (cIdx==0 || img->sps.ChromaArrayType==CHROMA_444)) + if (img->get_sps().range_extension.intra_smoothing_disabled_flag == 0 && + (cIdx==0 || img->get_sps().ChromaArrayType==CHROMA_444)) { - intra_prediction_sample_filtering(img, border_pixels, nT, cIdx, intraPredMode); + intra_prediction_sample_filtering(img->get_sps(), border_pixels, nT, cIdx, intraPredMode); } switch (intraPredMode) { case INTRA_PLANAR: - intra_prediction_planar(img,xB0,yB0,nT,cIdx, border_pixels); + intra_prediction_planar(dst,dstStride, nT,cIdx, border_pixels); break; case INTRA_DC: - intra_prediction_DC(img,xB0,yB0,nT,cIdx, border_pixels); + intra_prediction_DC(dst,dstStride, nT,cIdx, border_pixels); break; default: - intra_prediction_angular(img,xB0,yB0,intraPredMode,nT,cIdx, border_pixels); + { + int bit_depth = img->get_bit_depth(cIdx); + bool disableIntraBoundaryFilter = + (img->get_sps().range_extension.implicit_rdpcm_enabled_flag && + img->get_cu_transquant_bypass(xB0,yB0)); + + intra_prediction_angular(dst,dstStride, bit_depth,disableIntraBoundaryFilter, + xB0,yB0,intraPredMode,nT,cIdx, border_pixels); + } break; } } @@ -821,9 +1125,111 @@ */ if (img->high_bit_depth(cIdx)) { - decode_intra_prediction_internal<uint16_t>(img,xB0,yB0, intraPredMode,nT,cIdx); + decode_intra_prediction_internal<uint16_t>(img,xB0,yB0, intraPredMode, + img->get_image_plane_at_pos_NEW<uint16_t>(cIdx,xB0,yB0), + img->get_image_stride(cIdx), + nT,cIdx); } else { - decode_intra_prediction_internal<uint8_t>(img,xB0,yB0, intraPredMode,nT,cIdx); + decode_intra_prediction_internal<uint8_t>(img,xB0,yB0, intraPredMode, + img->get_image_plane_at_pos_NEW<uint8_t>(cIdx,xB0,yB0), + img->get_image_stride(cIdx), + nT,cIdx); } } + + +// TODO: remove this +template <> void decode_intra_prediction<uint8_t>(de265_image* img, + int xB0,int yB0, + enum IntraPredMode intraPredMode, + uint8_t* dst, int nT, int cIdx) +{ + decode_intra_prediction_internal<uint8_t>(img,xB0,yB0, intraPredMode, + dst,nT, + nT,cIdx); +} + + +// TODO: remove this +template <> void decode_intra_prediction<uint16_t>(de265_image* img, + int xB0,int yB0, + enum IntraPredMode intraPredMode, + uint16_t* dst, int nT, int cIdx) +{ + decode_intra_prediction_internal<uint16_t>(img,xB0,yB0, intraPredMode, + dst,nT, + nT,cIdx); +} + + +template <class pixel_t> +void decode_intra_prediction_from_tree_internal(const de265_image* img, + const enc_tb* tb, + const CTBTreeMatrix& ctbs, + const seq_parameter_set& sps, + int cIdx) +{ + enum IntraPredMode intraPredMode; + if (cIdx==0) intraPredMode = tb->intra_mode; + else intraPredMode = tb->intra_mode_chroma; + + pixel_t* dst = tb->intra_prediction[cIdx]->get_buffer<pixel_t>(); + int dstStride = tb->intra_prediction[cIdx]->getStride(); + + pixel_t border_pixels_mem[4*MAX_INTRA_PRED_BLOCK_SIZE+1]; + pixel_t* border_pixels = &border_pixels_mem[2*MAX_INTRA_PRED_BLOCK_SIZE]; + + fill_border_samples_from_tree(img, tb, ctbs, cIdx, border_pixels); + + if (cIdx==0) { + // memcpy(tb->debug_intra_border, border_pixels_mem, 2*64+1); + } + + int nT = 1<<tb->log2Size; + if (cIdx>0 && tb->log2Size>2 && sps.chroma_format_idc == CHROMA_420) { + nT >>= 1; // TODO: 4:2:2 + } + + + if (sps.range_extension.intra_smoothing_disabled_flag == 0 && + (cIdx==0 || sps.ChromaArrayType==CHROMA_444)) + { + intra_prediction_sample_filtering(sps, border_pixels, nT, cIdx, intraPredMode); + } + + + switch (intraPredMode) { + case INTRA_PLANAR: + intra_prediction_planar(dst,dstStride, nT, cIdx, border_pixels); + break; + case INTRA_DC: + intra_prediction_DC(dst,dstStride, nT, cIdx, border_pixels); + break; + default: + { + //int bit_depth = img->get_bit_depth(cIdx); + int bit_depth = 8; // TODO + + bool disableIntraBoundaryFilter = + (sps.range_extension.implicit_rdpcm_enabled_flag && + tb->cb->cu_transquant_bypass_flag); + + intra_prediction_angular(dst,dstStride, bit_depth,disableIntraBoundaryFilter, + tb->x,tb->y,intraPredMode,nT,cIdx, border_pixels); + } + break; + } +} + + +void decode_intra_prediction_from_tree(const de265_image* img, + const enc_tb* tb, + const CTBTreeMatrix& ctbs, + const seq_parameter_set& sps, + int cIdx) +{ + // TODO: high bit depths + + decode_intra_prediction_from_tree_internal<uint8_t>(img ,tb, ctbs, sps, cIdx); +}
View file
libde265-1.0.2.tar.gz/libde265/intrapred.h -> libde265-1.0.3.tar.gz/libde265/intrapred.h
Changed
@@ -31,23 +31,31 @@ block (which is (x>>Log2MinPUSize) + (y>>Log2MinPUSize)*PicWidthInMinPUs). availableA/B is the output of check_CTB_available(). */ -void fillIntraPredModeCandidates(int candModeList[3], +void fillIntraPredModeCandidates(enum IntraPredMode candModeList[3], int x,int y, int PUidx, bool availableA, // left bool availableB, // top const de265_image* img); -inline void fillIntraPredModeCandidates(int candModeList[3], int x,int y, +inline void fillIntraPredModeCandidates(enum IntraPredMode candModeList[3], int x,int y, bool availableA, // left bool availableB, // top const de265_image* img) { - int PUidx = img->sps.getPUIndexRS(x,y); + int PUidx = img->get_sps().getPUIndexRS(x,y); fillIntraPredModeCandidates(candModeList, x,y, PUidx, availableA,availableB, img); } +void fillIntraPredModeCandidates(enum IntraPredMode candModeList[3], + int x,int y, + bool availableA, // left + bool availableB, // top + const class CTBTreeMatrix& ctbs, + const seq_parameter_set* sps); + + /* Return value >= 0 -> use mpm_idx(return value) else -> use rem_intra(-return value-1) @@ -55,7 +63,7 @@ This function may modify the candModeList ! */ int find_intra_pred_mode(enum IntraPredMode mode, - int candModeList[3]); + enum IntraPredMode candModeList[3]); void list_chroma_pred_candidates(enum IntraPredMode chroma_mode[5], enum IntraPredMode luma_mode); @@ -69,6 +77,7 @@ enum IntraPredMode lumaPredMode_to_chromaPredMode(enum IntraPredMode luma, enum IntraChromaPredMode chroma); +/* void decode_intra_block(decoder_context* ctx, thread_context* tctx, int cIdx, @@ -77,6 +86,7 @@ int log2TrafoSize, int trafoDepth, enum IntraPredMode intraPredMode, bool transform_skip_flag); +*/ //void fill_border_samples(decoder_context* ctx, int xB,int yB, // int nT, int cIdx, uint8_t* out_border); @@ -86,4 +96,16 @@ enum IntraPredMode intraPredMode, int nT, int cIdx); +void decode_intra_prediction_from_tree(const de265_image* img, + const class enc_tb* tb, + const class CTBTreeMatrix& ctbs, + const class seq_parameter_set& sps, + int cIdx); + +// TODO: remove this +template <class pixel_t> void decode_intra_prediction(de265_image* img, + int xB0,int yB0, + enum IntraPredMode intraPredMode, + pixel_t* dst, int nT, int cIdx); + #endif
View file
libde265-1.0.2.tar.gz/libde265/motion.cc -> libde265-1.0.3.tar.gz/libde265/motion.cc
Changed
@@ -22,6 +22,8 @@ #include "decctx.h" #include "util.h" #include "dpb.h" +#include "encoder/encoder-context.h" + #include <assert.h> @@ -31,7 +33,7 @@ #if defined(_MSC_VER) || defined(__MINGW32__) # include <malloc.h> -#else +#elif defined(HAVE_ALLOCA_H) # include <alloca.h> #endif @@ -280,7 +282,7 @@ int xC,int yC, int xB,int yB, int nCS, int nPbW,int nPbH, - const MotionVectorSpec* vi) + const PBMotion* vi) { int xP = xC+xB; int yP = yC+yB; @@ -288,8 +290,11 @@ void* pixels[3]; int stride[3]; - const int SubWidthC = img->sps.SubWidthC; - const int SubHeightC = img->sps.SubHeightC; + const pic_parameter_set* pps = shdr->pps; + const seq_parameter_set* sps = pps->sps; + + const int SubWidthC = sps->SubWidthC; + const int SubHeightC = sps->SubHeightC; pixels[0] = img->get_image_plane_at_pos_any_depth(0,xP,yP); stride[0] = img->get_image_stride(0); @@ -311,14 +316,14 @@ predFlag[0] = vi->predFlag[0]; predFlag[1] = vi->predFlag[1]; - const int bit_depth_L = img->sps.BitDepth_Y; - const int bit_depth_C = img->sps.BitDepth_C; + const int bit_depth_L = sps->BitDepth_Y; + const int bit_depth_C = sps->BitDepth_C; // Some encoders use bi-prediction with two similar MVs. // Identify this case and use only one MV. // do this only without weighted prediction, because the weights/offsets may be different - if (img->pps.weighted_pred_flag==0) { + if (pps->weighted_pred_flag==0) { if (predFlag[0] && predFlag[1]) { if (vi->mv[0].x == vi->mv[1].x && vi->mv[0].y == vi->mv[1].y && @@ -360,31 +365,31 @@ // TODO: must predSamples stride really be nCS or can it be somthing smaller like nPbW? if (img->high_bit_depth(0)) { - mc_luma(ctx, &img->sps, vi->mv[l].x, vi->mv[l].y, xP,yP, + mc_luma(ctx, sps, vi->mv[l].x, vi->mv[l].y, xP,yP, predSamplesL[l],nCS, (const uint16_t*)refPic->get_image_plane(0), refPic->get_luma_stride(), nPbW,nPbH, bit_depth_L); } else { - mc_luma(ctx, &img->sps, vi->mv[l].x, vi->mv[l].y, xP,yP, + mc_luma(ctx, sps, vi->mv[l].x, vi->mv[l].y, xP,yP, predSamplesL[l],nCS, (const uint8_t*)refPic->get_image_plane(0), refPic->get_luma_stride(), nPbW,nPbH, bit_depth_L); } if (img->high_bit_depth(0)) { - mc_chroma(ctx, &img->sps, vi->mv[l].x, vi->mv[l].y, xP,yP, + mc_chroma(ctx, sps, vi->mv[l].x, vi->mv[l].y, xP,yP, predSamplesC[0][l],nCS, (const uint16_t*)refPic->get_image_plane(1), refPic->get_chroma_stride(), nPbW/SubWidthC,nPbH/SubHeightC, bit_depth_C); - mc_chroma(ctx, &img->sps, vi->mv[l].x, vi->mv[l].y, xP,yP, + mc_chroma(ctx, sps, vi->mv[l].x, vi->mv[l].y, xP,yP, predSamplesC[1][l],nCS, (const uint16_t*)refPic->get_image_plane(2), refPic->get_chroma_stride(), nPbW/SubWidthC,nPbH/SubHeightC, bit_depth_C); } else { - mc_chroma(ctx, &img->sps, vi->mv[l].x, vi->mv[l].y, xP,yP, + mc_chroma(ctx, sps, vi->mv[l].x, vi->mv[l].y, xP,yP, predSamplesC[0][l],nCS, (const uint8_t*)refPic->get_image_plane(1), refPic->get_chroma_stride(), nPbW/SubWidthC,nPbH/SubHeightC, bit_depth_C); - mc_chroma(ctx, &img->sps, vi->mv[l].x, vi->mv[l].y, xP,yP, + mc_chroma(ctx, sps, vi->mv[l].x, vi->mv[l].y, xP,yP, predSamplesC[1][l],nCS, (const uint8_t*)refPic->get_image_plane(2), refPic->get_chroma_stride(), nPbW/SubWidthC,nPbH/SubHeightC, bit_depth_C); } @@ -395,10 +400,10 @@ // weighted sample prediction (8.5.3.2.3) - const int shift1_L = libde265_max(2,14-img->sps.BitDepth_Y); - const int offset_shift1_L = img->sps.WpOffsetBdShiftY; - const int shift1_C = libde265_max(2,14-img->sps.BitDepth_C); - const int offset_shift1_C = img->sps.WpOffsetBdShiftC; + const int shift1_L = libde265_max(2,14-sps->BitDepth_Y); + const int offset_shift1_L = img->get_sps().WpOffsetBdShiftY; + const int shift1_C = libde265_max(2,14-sps->BitDepth_C); + const int offset_shift1_C = img->get_sps().WpOffsetBdShiftC; /* const int shift1_L = 14-img->sps.BitDepth_Y; @@ -433,7 +438,7 @@ logtrace(LogMotion,"predFlags (modified): %d %d\n", predFlag[0], predFlag[1]); if (shdr->slice_type == SLICE_TYPE_P) { - if (img->pps.weighted_pred_flag==0) { + if (pps->weighted_pred_flag==0) { if (predFlag[0]==1 && predFlag[1]==0) { ctx->acceleration.put_unweighted_pred(pixels[0], stride[0], predSamplesL[0],nCS, nPbW,nPbH, bit_depth_L); @@ -489,7 +494,7 @@ assert(shdr->slice_type == SLICE_TYPE_B); if (predFlag[0]==1 && predFlag[1]==1) { - if (img->pps.weighted_bipred_flag==0) { + if (pps->weighted_bipred_flag==0) { //const int shift2 = 15-8; // TODO: real bit depth //const int offset2 = 1<<(shift2-1); @@ -566,7 +571,7 @@ else if (predFlag[0]==1 || predFlag[1]==1) { int l = predFlag[0] ? 0 : 1; - if (img->pps.weighted_bipred_flag==0) { + if (pps->weighted_bipred_flag==0) { ctx->acceleration.put_unweighted_pred(pixels[0], stride[0], predSamplesL[l],nCS, nPbW,nPbH, bit_depth_L); ctx->acceleration.put_unweighted_pred(pixels[1], stride[1], @@ -657,7 +662,7 @@ #ifdef DE265_LOG_TRACE -void logmvcand(const MotionVectorSpec& p) +void logmvcand(const PBMotion& p) { for (int v=0;v<2;v++) { if (p.predFlag[v]) { @@ -673,17 +678,19 @@ #endif -LIBDE265_INLINE static bool equal_cand_MV(const MotionVectorSpec* a, const MotionVectorSpec* b) +bool PBMotion::operator==(const PBMotion& b) const { + const PBMotion& a = *this; + // TODO: is this really correct? no check for predFlag? Standard says so... (p.127) for (int i=0;i<2;i++) { - if (a->predFlag[i] != b->predFlag[i]) return false; + if (a.predFlag[i] != b.predFlag[i]) return false; - if (a->predFlag[i]) { - if (a->mv[i].x != b->mv[i].x) return false; - if (a->mv[i].y != b->mv[i].y) return false; - if (a->refIdx[i] != b->refIdx[i]) return false; + if (a.predFlag[i]) { + if (a.mv[i].x != b.mv[i].x) return false; + if (a.mv[i].y != b.mv[i].y) return false; + if (a.refIdx[i] != b.refIdx[i]) return false; } } @@ -691,6 +698,43 @@ } +// TODO: add specializations for de265_image and encoder_context +template <class T> class MotionVectorAccess +{ +public: + enum PartMode get_PartMode(int x,int y); + const PBMotion& get_mv_info(int x,int y); +}; + + +template <> class MotionVectorAccess<de265_image> +{ +public: + MotionVectorAccess(const de265_image* i) : img(i) { } + + enum PartMode get_PartMode(int x,int y) { return img->get_PartMode(x,y); } + const PBMotion& get_mv_info(int x,int y) { return img->get_mv_info(x,y); } + +private: + const de265_image* img; +}; + + +template <> class MotionVectorAccess<encoder_context> +{ +public: + MotionVectorAccess(const encoder_context* e) : ectx(e) { } + + enum PartMode get_PartMode(int x,int y) { return ectx->ctbs.getCB(x,y)->PartMode; } + const PBMotion& get_mv_info(int x,int y) { + return ectx->ctbs.getPB(x,y)->motion; + } + +private: + const encoder_context* ectx; +}; + + /* +--+ +--+--+ |B2| |B1|B0| @@ -734,18 +778,21 @@ second part to the parameters of the first part, since then, we could use 2Nx2N right away. -> Exclude this candidate. */ -int derive_spatial_merging_candidates(const de265_image* img, +template <class MVAccessType> +int derive_spatial_merging_candidates(//const de265_image* img, + MotionVectorAccess<MVAccessType> mvaccess, + const de265_image* img, int xC, int yC, int nCS, int xP, int yP, uint8_t singleMCLFlag, int nPbW, int nPbH, int partIdx, - MotionVectorSpec* out_cand, + PBMotion* out_cand, int maxCandidates) { - const pic_parameter_set* pps = &img->pps; + const pic_parameter_set* pps = &img->get_pps(); const int log2_parallel_merge_level = pps->log2_parallel_merge_level; - enum PartMode PartMode = img->get_PartMode(xC,yC); + enum PartMode PartMode = mvaccess.get_PartMode(xC,yC); /* const int A0 = SpatialMergingCandidates::PRED_A0; @@ -789,7 +836,7 @@ if (availableA1) { idxA1 = computed_candidates++; - out_cand[idxA1] = *img->get_mv_info(xA1,yA1); + out_cand[idxA1] = mvaccess.get_mv_info(xA1,yA1); logtrace(LogMotion,"spatial merging candidate A1:\n"); logmvcand(out_cand[idxA1]); @@ -828,17 +875,16 @@ } if (availableB1) { - const MotionVectorSpec* b1 = img->get_mv_info(xB1,yB1); + const PBMotion& b1 = img->get_mv_info(xB1,yB1); // B1 == A1 -> discard B1 - if (availableA1 && - equal_cand_MV(&out_cand[idxA1], b1)) { + if (availableA1 && out_cand[idxA1] == b1) { idxB1 = idxA1; logtrace(LogMotion,"spatial merging candidate B1: redundant to A1\n"); } else { idxB1 = computed_candidates++; - out_cand[idxB1] = *b1; + out_cand[idxB1] = b1; logtrace(LogMotion,"spatial merging candidate B1:\n"); logmvcand(out_cand[idxB1]); @@ -867,17 +913,16 @@ } if (availableB0) { - const MotionVectorSpec* b0 = img->get_mv_info(xB0,yB0); + const PBMotion& b0 = img->get_mv_info(xB0,yB0); // B0 == B1 -> discard B0 - if (availableB1 && - equal_cand_MV(&out_cand[idxB1], b0)) { + if (availableB1 && out_cand[idxB1]==b0) { idxB0 = idxB1; logtrace(LogMotion,"spatial merging candidate B0: redundant to B1\n"); } else { idxB0 = computed_candidates++; - out_cand[idxB0] = *b0; + out_cand[idxB0] = b0; logtrace(LogMotion,"spatial merging candidate B0:\n"); logmvcand(out_cand[idxB0]); } @@ -905,17 +950,16 @@ } if (availableA0) { - const MotionVectorSpec* a0 = img->get_mv_info(xA0,yA0); + const PBMotion& a0 = img->get_mv_info(xA0,yA0); // A0 == A1 -> discard A0 - if (availableA1 && - equal_cand_MV(&out_cand[idxA1], a0)) { + if (availableA1 && out_cand[idxA1]==a0) { idxA0 = idxA1; logtrace(LogMotion,"spatial merging candidate A0: redundant to A1\n"); } else { idxA0 = computed_candidates++; - out_cand[idxA0] = *a0; + out_cand[idxA0] = a0; logtrace(LogMotion,"spatial merging candidate A0:\n"); logmvcand(out_cand[idxA0]); } @@ -948,23 +992,21 @@ } if (availableB2) { - const MotionVectorSpec* b2 = img->get_mv_info(xB2,yB2); + const PBMotion& b2 = img->get_mv_info(xB2,yB2); // B2 == B1 -> discard B2 - if (availableB1 && - equal_cand_MV(&out_cand[idxB1], b2)) { + if (availableB1 && out_cand[idxB1]==b2) { idxB2 = idxB1; logtrace(LogMotion,"spatial merging candidate B2: redundant to B1\n"); } // B2 == A1 -> discard B2 - else if (availableA1 && - equal_cand_MV(&out_cand[idxA1], b2)) { + else if (availableA1 && out_cand[idxA1]==b2) { idxB2 = idxA1; logtrace(LogMotion,"spatial merging candidate B2: redundant to A1\n"); } else { idxB2 = computed_candidates++; - out_cand[idxB2] = *b2; + out_cand[idxB2] = b2; logtrace(LogMotion,"spatial merging candidate B2:\n"); logmvcand(out_cand[idxB2]); } @@ -976,7 +1018,7 @@ // 8.5.3.1.4 void derive_zero_motion_vector_candidates(const slice_segment_header* shdr, - MotionVectorSpec* out_mergeCandList, + PBMotion* out_mergeCandList, int* inout_numCurrMergeCand, int maxCandidates) { @@ -1001,7 +1043,7 @@ logtrace(LogMotion,"zeroIdx:%d numRefIdx:%d\n", zeroIdx, numRefIdx); - MotionVectorSpec* newCand = &out_mergeCandList[*inout_numCurrMergeCand]; + PBMotion* newCand = &out_mergeCandList[*inout_numCurrMergeCand]; const int refIdx = (zeroIdx < numRefIdx) ? zeroIdx : 0; @@ -1114,25 +1156,25 @@ // get the collocated MV - const MotionVectorSpec* mvi = colImg->get_mv_info(xColPb,yColPb); + const PBMotion& mvi = colImg->get_mv_info(xColPb,yColPb); int listCol; int refIdxCol; MotionVector mvCol; logtrace(LogMotion,"read MVI %d;%d:\n",xColPb,yColPb); - logmvcand(*mvi); + logmvcand(mvi); // collocated MV uses only L1 -> use L1 - if (mvi->predFlag[0]==0) { - mvCol = mvi->mv[1]; - refIdxCol = mvi->refIdx[1]; + if (mvi.predFlag[0]==0) { + mvCol = mvi.mv[1]; + refIdxCol = mvi.refIdx[1]; listCol = 1; } // collocated MV uses only L0 -> use L0 - else if (mvi->predFlag[1]==0) { - mvCol = mvi->mv[0]; - refIdxCol = mvi->refIdx[0]; + else if (mvi.predFlag[1]==0) { + mvCol = mvi.mv[0]; + refIdxCol = mvi.refIdx[0]; listCol = 0; } // collocated MV uses L0 and L1 @@ -1180,14 +1222,14 @@ */ if (allRefFramesBeforeCurrentFrame) { - mvCol = mvi->mv[X]; - refIdxCol = mvi->refIdx[X]; + mvCol = mvi.mv[X]; + refIdxCol = mvi.refIdx[X]; listCol = X; } else { int N = shdr->collocated_from_l0_flag; - mvCol = mvi->mv[N]; - refIdxCol = mvi->refIdx[N]; + mvCol = mvi.mv[N]; + refIdxCol = mvi.refIdx[N]; listCol = N; } } @@ -1254,7 +1296,7 @@ // --- find collocated reference image --- - int Log2CtbSizeY = img->sps.Log2CtbSizeY; + int Log2CtbSizeY = img->get_sps().Log2CtbSizeY; int colPic; // TODO: this is the same for the whole slice. We can precompute it. @@ -1298,8 +1340,8 @@ This is to reduce the memory bandwidth requirements. */ if ((yP>>Log2CtbSizeY) == (yColBr>>Log2CtbSizeY) && - xColBr < img->sps.pic_width_in_luma_samples && - yColBr < img->sps.pic_height_in_luma_samples) + xColBr < img->get_sps().pic_width_in_luma_samples && + yColBr < img->get_sps().pic_height_in_luma_samples) { xColPb = xColBr & ~0x0F; // reduce resolution of collocated motion-vectors to 16 pixels grid yColPb = yColBr & ~0x0F; @@ -1340,7 +1382,7 @@ + */ void derive_combined_bipredictive_merging_candidates(const base_context* ctx, const slice_segment_header* shdr, - MotionVectorSpec* inout_mergeCandList, + PBMotion* inout_mergeCandList, int* inout_numMergeCand, int maxCandidates) { @@ -1360,39 +1402,39 @@ assert(false); // bitstream error -> TODO: conceal error } - MotionVectorSpec* l0Cand = &inout_mergeCandList[l0CandIdx]; - MotionVectorSpec* l1Cand = &inout_mergeCandList[l1CandIdx]; + PBMotion& l0Cand = inout_mergeCandList[l0CandIdx]; + PBMotion& l1Cand = inout_mergeCandList[l1CandIdx]; logtrace(LogMotion,"add bipredictive merging candidate (combIdx:%d)\n",combIdx); - logtrace(LogMotion,"l0Cand:\n"); logmvcand(*l0Cand); - logtrace(LogMotion,"l1Cand:\n"); logmvcand(*l1Cand); + logtrace(LogMotion,"l0Cand:\n"); logmvcand(l0Cand); + logtrace(LogMotion,"l1Cand:\n"); logmvcand(l1Cand); - const de265_image* img0 = l0Cand->predFlag[0] ? ctx->get_image(shdr->RefPicList[0][l0Cand->refIdx[0]]) : NULL; - const de265_image* img1 = l1Cand->predFlag[1] ? ctx->get_image(shdr->RefPicList[1][l1Cand->refIdx[1]]) : NULL; + const de265_image* img0 = l0Cand.predFlag[0] ? ctx->get_image(shdr->RefPicList[0][l0Cand.refIdx[0]]) : NULL; + const de265_image* img1 = l1Cand.predFlag[1] ? ctx->get_image(shdr->RefPicList[1][l1Cand.refIdx[1]]) : NULL; - if (l0Cand->predFlag[0] && !img0) { + if (l0Cand.predFlag[0] && !img0) { return; // TODO error } - if (l1Cand->predFlag[1] && !img1) { + if (l1Cand.predFlag[1] && !img1) { return; // TODO error } - if (l0Cand->predFlag[0] && l1Cand->predFlag[1] && + if (l0Cand.predFlag[0] && l1Cand.predFlag[1] && (img0->PicOrderCntVal != img1->PicOrderCntVal || - l0Cand->mv[0].x != l1Cand->mv[1].x || - l0Cand->mv[0].y != l1Cand->mv[1].y)) { - MotionVectorSpec* p = &inout_mergeCandList[ *inout_numMergeCand ]; - p->refIdx[0] = l0Cand->refIdx[0]; - p->refIdx[1] = l1Cand->refIdx[1]; - p->predFlag[0] = l0Cand->predFlag[0]; - p->predFlag[1] = l1Cand->predFlag[1]; - p->mv[0] = l0Cand->mv[0]; - p->mv[1] = l1Cand->mv[1]; + l0Cand.mv[0].x != l1Cand.mv[1].x || + l0Cand.mv[0].y != l1Cand.mv[1].y)) { + PBMotion& p = inout_mergeCandList[ *inout_numMergeCand ]; + p.refIdx[0] = l0Cand.refIdx[0]; + p.refIdx[1] = l1Cand.refIdx[1]; + p.predFlag[0] = l0Cand.predFlag[0]; + p.predFlag[1] = l1Cand.predFlag[1]; + p.mv[0] = l0Cand.mv[0]; + p.mv[1] = l1Cand.mv[1]; (*inout_numMergeCand)++; logtrace(LogMotion,"result:\n"); - logmvcand(*p); + logmvcand(p); } combIdx++; @@ -1406,13 +1448,16 @@ // 8.5.3.1.1 -static void get_merge_candidate_list_without_step_9(base_context* ctx, - const slice_segment_header* shdr, - de265_image* img, - int xC,int yC, int xP,int yP, - int nCS, int nPbW,int nPbH, int partIdx, - int max_merge_idx, - MotionVectorSpec* mergeCandList) + +template <class MVAccess> +void get_merge_candidate_list_without_step_9(base_context* ctx, + const slice_segment_header* shdr, + MotionVectorAccess<MVAccess> mvaccess, + de265_image* img, + int xC,int yC, int xP,int yP, + int nCS, int nPbW,int nPbH, int partIdx, + int max_merge_idx, + PBMotion* mergeCandList) { //int xOrigP = xP; @@ -1427,9 +1472,9 @@ Having additional candidates might have these advantages: - coding MVs for these small PBs is expensive, and - since the PBs are not far away from a proper (neighboring) merging candidate, - the quality of the candidates will still be good. - */ - singleMCLFlag = (img->pps.log2_parallel_merge_level > 2 && nCS==8); + the quality of the candidates will still be good. + */ + singleMCLFlag = (img->get_pps().log2_parallel_merge_level > 2 && nCS==8); if (singleMCLFlag) { xP=xC; @@ -1445,7 +1490,8 @@ // --- spatial merge candidates - numMergeCand = derive_spatial_merging_candidates(img, xC,yC, nCS, xP,yP, singleMCLFlag, + numMergeCand = derive_spatial_merging_candidates(mvaccess, + img, xC,yC, nCS, xP,yP, singleMCLFlag, nPbW,nPbH,partIdx, mergeCandList, maxCandidates); @@ -1471,7 +1517,7 @@ if (availableFlagCol) { - MotionVectorSpec* colVec = &mergeCandList[numMergeCand++]; + PBMotion* colVec = &mergeCandList[numMergeCand++]; colVec->mv[0] = mvCol[0]; colVec->mv[1] = mvCol[1]; @@ -1511,11 +1557,39 @@ de265_image* img, int xC,int yC, int xP,int yP, int nCS, int nPbW,int nPbH, int partIdx, - MotionVectorSpec* mergeCandList) + PBMotion* mergeCandList) +{ + int max_merge_idx = 5-shdr->five_minus_max_num_merge_cand -1; + + get_merge_candidate_list_without_step_9(ctx, shdr, + MotionVectorAccess<de265_image>(img), img, + xC,yC,xP,yP,nCS,nPbW,nPbH, partIdx, + max_merge_idx, mergeCandList); + + // 9. for encoder: modify all merge candidates + + for (int i=0;i<=max_merge_idx;i++) { + if (mergeCandList[i].predFlag[0] && + mergeCandList[i].predFlag[1] && + nPbW+nPbH==12) + { + mergeCandList[i].refIdx[1] = -1; + mergeCandList[i].predFlag[1] = 0; + } + } +} + + +void get_merge_candidate_list_from_tree(encoder_context* ectx, + const slice_segment_header* shdr, + int xC,int yC, int xP,int yP, + int nCS, int nPbW,int nPbH, int partIdx, + PBMotion* mergeCandList) { int max_merge_idx = 5-shdr->five_minus_max_num_merge_cand -1; - get_merge_candidate_list_without_step_9(ctx, shdr, img, + get_merge_candidate_list_without_step_9(ectx, shdr, + MotionVectorAccess<encoder_context>(ectx), ectx->img, xC,yC,xP,yP,nCS,nPbW,nPbH, partIdx, max_merge_idx, mergeCandList); @@ -1540,11 +1614,12 @@ int xC,int yC, int xP,int yP, int nCS, int nPbW,int nPbH, int partIdx, int merge_idx, - MotionVectorSpec* out_vi) + PBMotion* out_vi) { - MotionVectorSpec mergeCandList[5]; + PBMotion mergeCandList[5]; - get_merge_candidate_list_without_step_9(ctx, shdr, img, + get_merge_candidate_list_without_step_9(ctx, shdr, + MotionVectorAccess<de265_image>(img), img, xC,yC,xP,yP,nCS,nPbW,nPbH, partIdx, merge_idx, mergeCandList); @@ -1623,32 +1698,32 @@ int Y=1-X; - const MotionVectorSpec* vi = img->get_mv_info(xA[k],yA[k]); + const PBMotion& vi = img->get_mv_info(xA[k],yA[k]); logtrace(LogMotion,"MVP A%d=\n",k); - logmvcand(*vi); + logmvcand(vi); const de265_image* imgX = NULL; - if (vi->predFlag[X]) imgX = ctx->get_image(shdr->RefPicList[X][ vi->refIdx[X] ]); + if (vi.predFlag[X]) imgX = ctx->get_image(shdr->RefPicList[X][ vi.refIdx[X] ]); const de265_image* imgY = NULL; - if (vi->predFlag[Y]) imgY = ctx->get_image(shdr->RefPicList[Y][ vi->refIdx[Y] ]); + if (vi.predFlag[Y]) imgY = ctx->get_image(shdr->RefPicList[Y][ vi.refIdx[Y] ]); // check whether the predictor X is available and references the same POC - if (vi->predFlag[X] && imgX && imgX->PicOrderCntVal == referenced_POC) { + if (vi.predFlag[X] && imgX && imgX->PicOrderCntVal == referenced_POC) { logtrace(LogMotion,"take A%d/L%d as A candidate with same POC\n",k,X); out_availableFlagLXN[A]=1; - out_mvLXN[A] = vi->mv[X]; - refIdxA = vi->refIdx[X]; + out_mvLXN[A] = vi.mv[X]; + refIdxA = vi.refIdx[X]; } // check whether the other predictor (Y) is available and references the same POC - else if (vi->predFlag[Y] && imgY && imgY->PicOrderCntVal == referenced_POC) { + else if (vi.predFlag[Y] && imgY && imgY->PicOrderCntVal == referenced_POC) { logtrace(LogMotion,"take A%d/L%d as A candidate with same POC\n",k,Y); out_availableFlagLXN[A]=1; - out_mvLXN[A] = vi->mv[Y]; - refIdxA = vi->refIdx[Y]; + out_mvLXN[A] = vi.mv[Y]; + refIdxA = vi.refIdx[Y]; } } } @@ -1665,25 +1740,25 @@ int Y=1-X; - const MotionVectorSpec* vi = img->get_mv_info(xA[k],yA[k]); - if (vi->predFlag[X]==1 && - shdr->LongTermRefPic[X][refIdxLX] == shdr->LongTermRefPic[X][ vi->refIdx[X] ]) { + const PBMotion& vi = img->get_mv_info(xA[k],yA[k]); + if (vi.predFlag[X]==1 && + shdr->LongTermRefPic[X][refIdxLX] == shdr->LongTermRefPic[X][ vi.refIdx[X] ]) { logtrace(LogMotion,"take A%D/L%d as A candidate with different POCs\n",k,X); out_availableFlagLXN[A]=1; - out_mvLXN[A] = vi->mv[X]; - refIdxA = vi->refIdx[X]; + out_mvLXN[A] = vi.mv[X]; + refIdxA = vi.refIdx[X]; refPicList = X; } - else if (vi->predFlag[Y]==1 && - shdr->LongTermRefPic[X][refIdxLX] == shdr->LongTermRefPic[Y][ vi->refIdx[Y] ]) { + else if (vi.predFlag[Y]==1 && + shdr->LongTermRefPic[X][refIdxLX] == shdr->LongTermRefPic[Y][ vi.refIdx[Y] ]) { logtrace(LogMotion,"take A%d/L%d as A candidate with different POCs\n",k,Y); out_availableFlagLXN[A]=1; - out_mvLXN[A] = vi->mv[Y]; - refIdxA = vi->refIdx[Y]; + out_mvLXN[A] = vi.mv[Y]; + refIdxA = vi.refIdx[Y]; refPicList = Y; } } @@ -1757,29 +1832,29 @@ int Y=1-X; - const MotionVectorSpec* vi = img->get_mv_info(xB[k],yB[k]); + const PBMotion& vi = img->get_mv_info(xB[k],yB[k]); logtrace(LogMotion,"MVP B%d=\n",k); - logmvcand(*vi); + logmvcand(vi); const de265_image* imgX = NULL; - if (vi->predFlag[X]) imgX = ctx->get_image(shdr->RefPicList[X][ vi->refIdx[X] ]); + if (vi.predFlag[X]) imgX = ctx->get_image(shdr->RefPicList[X][ vi.refIdx[X] ]); const de265_image* imgY = NULL; - if (vi->predFlag[Y]) imgY = ctx->get_image(shdr->RefPicList[Y][ vi->refIdx[Y] ]); + if (vi.predFlag[Y]) imgY = ctx->get_image(shdr->RefPicList[Y][ vi.refIdx[Y] ]); - if (vi->predFlag[X] && imgX && imgX->PicOrderCntVal == referenced_POC) { + if (vi.predFlag[X] && imgX && imgX->PicOrderCntVal == referenced_POC) { logtrace(LogMotion,"a) take B%d/L%d as B candidate with same POC\n",k,X); out_availableFlagLXN[B]=1; - out_mvLXN[B] = vi->mv[X]; - refIdxB = vi->refIdx[X]; + out_mvLXN[B] = vi.mv[X]; + refIdxB = vi.refIdx[X]; } - else if (vi->predFlag[Y] && imgY && imgY->PicOrderCntVal == referenced_POC) { + else if (vi.predFlag[Y] && imgY && imgY->PicOrderCntVal == referenced_POC) { logtrace(LogMotion,"b) take B%d/L%d as B candidate with same POC\n",k,Y); out_availableFlagLXN[B]=1; - out_mvLXN[B] = vi->mv[Y]; - refIdxB = vi->refIdx[Y]; + out_mvLXN[B] = vi.mv[Y]; + refIdxB = vi.refIdx[Y]; } } } @@ -1812,20 +1887,20 @@ if (availableB[k]) { int Y=1-X; - const MotionVectorSpec* vi = img->get_mv_info(xB[k],yB[k]); + const PBMotion& vi = img->get_mv_info(xB[k],yB[k]); - if (vi->predFlag[X]==1 && - shdr->LongTermRefPic[X][refIdxLX] == shdr->LongTermRefPic[X][ vi->refIdx[X] ]) { + if (vi.predFlag[X]==1 && + shdr->LongTermRefPic[X][refIdxLX] == shdr->LongTermRefPic[X][ vi.refIdx[X] ]) { out_availableFlagLXN[B]=1; - out_mvLXN[B] = vi->mv[X]; - refIdxB = vi->refIdx[X]; + out_mvLXN[B] = vi.mv[X]; + refIdxB = vi.refIdx[X]; refPicList = X; } - else if (vi->predFlag[Y]==1 && - shdr->LongTermRefPic[X][refIdxLX] == shdr->LongTermRefPic[Y][ vi->refIdx[Y] ]) { + else if (vi.predFlag[Y]==1 && + shdr->LongTermRefPic[X][refIdxLX] == shdr->LongTermRefPic[Y][ vi.refIdx[Y] ]) { out_availableFlagLXN[B]=1; - out_mvLXN[B] = vi->mv[Y]; - refIdxB = vi->refIdx[Y]; + out_mvLXN[B] = vi.mv[Y]; + refIdxB = vi.refIdx[Y]; refPicList = Y; } } @@ -1947,7 +2022,7 @@ MotionVector luma_motion_vector_prediction(base_context* ctx, const slice_segment_header* shdr, de265_image* img, - const motion_spec& motion, + const PBMotionCoding& motion, int xC,int yC,int nCS,int xP,int yP, int nPbW,int nPbH, int l, int refIdx, int partIdx) @@ -1966,7 +2041,7 @@ #if DE265_LOG_TRACE -void logMV(int x0,int y0,int nPbW,int nPbH, const char* mode,const MotionVectorSpec* mv) +void logMV(int x0,int y0,int nPbW,int nPbH, const char* mode,const PBMotion* mv) { int pred0 = mv->predFlag[0]; int pred1 = mv->predFlag[1]; @@ -1988,10 +2063,10 @@ void motion_vectors_and_ref_indices(base_context* ctx, const slice_segment_header* shdr, de265_image* img, - const motion_spec& motion, + const PBMotionCoding& motion, int xC,int yC, int xB,int yB, int nCS, int nPbW,int nPbH, int partIdx, - MotionVectorSpec* out_vi) + PBMotion* out_vi) { //slice_segment_header* shdr = tctx->shdr; @@ -2058,10 +2133,16 @@ // 8.5.3 + +/* xC/yC : CB position + xB/yB : position offset of the PB + nPbW/nPbH : size of PB + nCS : CB size + */ void decode_prediction_unit(base_context* ctx, const slice_segment_header* shdr, de265_image* img, - const motion_spec& motion, + const PBMotionCoding& motion, int xC,int yC, int xB,int yB, int nCS, int nPbW,int nPbH, int partIdx) { logtrace(LogMotion,"decode_prediction_unit POC=%d %d;%d %dx%d\n", @@ -2071,7 +2152,7 @@ // 1. - MotionVectorSpec vi; + PBMotion vi; motion_vectors_and_ref_indices(ctx, shdr, img, motion, xC,yC, xB,yB, nCS, nPbW,nPbH, partIdx, &vi);
View file
libde265-1.0.2.tar.gz/libde265/motion.h -> libde265-1.0.3.tar.gz/libde265/motion.h
Changed
@@ -26,30 +26,44 @@ class base_context; class slice_segment_header; -typedef struct +class MotionVector { + public: int16_t x,y; -} MotionVector; +}; -typedef struct +class PBMotion { + public: uint8_t predFlag[2]; // which of the two vectors is actually used - int8_t refIdx[2]; - MotionVector mv[2]; -} MotionVectorSpec; + int8_t refIdx[2]; // index into RefPicList + MotionVector mv[2]; // the absolute motion vectors + bool operator==(const PBMotion&) const; +}; -typedef struct { + +class PBMotionCoding +{ + public: + // index into RefPicList int8_t refIdx[2]; + + // motion vector difference int16_t mvd[2][2]; // [L0/L1][x/y] (only in top left position - ???) - uint8_t inter_pred_idc : 2; // enum InterPredIdc + // enum InterPredIdc, whether this is prediction from L0,L1, or BI + uint8_t inter_pred_idc : 2; + + // which of the two MVPs is used uint8_t mvp_l0_flag : 1; uint8_t mvp_l1_flag : 1; + + // whether merge mode is used uint8_t merge_flag : 1; uint8_t merge_idx : 3; -} motion_spec; +}; void get_merge_candidate_list(base_context* ctx, @@ -57,7 +71,13 @@ struct de265_image* img, int xC,int yC, int xP,int yP, int nCS, int nPbW,int nPbH, int partIdx, - MotionVectorSpec* mergeCandList); + PBMotion* mergeCandList); + +void get_merge_candidate_list_from_tree(class encoder_context* ectx, + const slice_segment_header* shdr, + int xC,int yC, int xP,int yP, + int nCS, int nPbW,int nPbH, int partIdx, + PBMotion* mergeCandList); /* int derive_spatial_merging_candidates(const struct de265_image* img, @@ -75,7 +95,7 @@ int xC,int yC, int xB,int yB, int nCS, int nPbW,int nPbH, - const MotionVectorSpec* vi); + const PBMotion* vi); /* Fill list (two entries) of motion-vector predictors for MVD coding. @@ -90,7 +110,7 @@ void decode_prediction_unit(base_context* ctx,const slice_segment_header* shdr, - de265_image* img, const motion_spec& motion, + de265_image* img, const PBMotionCoding& motion, int xC,int yC, int xB,int yB, int nCS, int nPbW,int nPbH, int partIdx); #endif
View file
libde265-1.0.2.tar.gz/libde265/pps.cc -> libde265-1.0.3.tar.gz/libde265/pps.cc
Changed
@@ -27,7 +27,7 @@ #include <string.h> #if defined(_MSC_VER) || defined(__MINGW32__) # include <malloc.h> -#else +#elif defined(HAVE_ALLOCA_H) # include <alloca.h> #endif @@ -191,6 +191,7 @@ void pic_parameter_set::set_defaults(enum PresetSet) { pps_read = false; + sps = NULL; pic_parameter_set_id = 0; seq_parameter_set_id = 0; @@ -306,12 +307,13 @@ num_ref_idx_l1_default_active++; - seq_parameter_set* sps = ctx->get_sps(seq_parameter_set_id); - if (sps->sps_read==false) { + if (!ctx->has_sps(seq_parameter_set_id)) { ctx->add_warning(DE265_WARNING_NONEXISTING_SPS_REFERENCED, false); return false; } + sps = ctx->get_sps(seq_parameter_set_id); + if ((pic_init_qp = get_svlc(br)) == UVLC_ERROR) { ctx->add_warning(DE265_WARNING_PPS_HEADER_INVALID, false); return false;
View file
libde265-1.0.2.tar.gz/libde265/pps.h -> libde265-1.0.3.tar.gz/libde265/pps.h
Changed
@@ -72,6 +72,8 @@ void set_defaults(enum PresetSet = Preset_Default); bool pps_read; // whether this pps has been read from bitstream + const seq_parameter_set* sps; + char pic_parameter_set_id; char seq_parameter_set_id;
View file
libde265-1.0.2.tar.gz/libde265/quality.cc -> libde265-1.0.3.tar.gz/libde265/quality.cc
Changed
@@ -109,4 +109,3 @@ img2->get_image_plane_at_pos(cIdx,x0,y0), img2->get_image_stride(cIdx), 1<<log2size, 1<<log2size); } -
View file
libde265-1.0.2.tar.gz/libde265/refpic.cc -> libde265-1.0.3.tar.gz/libde265/refpic.cc
Changed
@@ -26,7 +26,7 @@ #include <stdlib.h> #if defined(_MSC_VER) || defined(__MINGW32__) # include <malloc.h> -#else +#elif defined(HAVE_ALLOCA_H) # include <alloca.h> #endif @@ -255,6 +255,13 @@ int num_negative_pics = get_uvlc(br); int num_positive_pics = get_uvlc(br); + if (num_negative_pics == UVLC_ERROR || + num_positive_pics == UVLC_ERROR) { + // invalid num-ref-pics value + errqueue->add_warning(DE265_WARNING_MAX_NUM_REF_PICS_EXCEEDED, false); + return false; + } + // total number of reference pictures may not exceed buffer capacity if (num_negative_pics + num_positive_pics > sps->sps_max_dec_pic_buffering[ sps->sps_max_sub_layers-1 ]) {
View file
libde265-1.0.2.tar.gz/libde265/sao.cc -> libde265-1.0.3.tar.gz/libde265/sao.cc
Changed
@@ -41,8 +41,8 @@ return; } - const seq_parameter_set* sps = &img->sps; - const pic_parameter_set* pps = &img->pps; + const seq_parameter_set* sps = &img->get_sps(); + const pic_parameter_set* pps = &img->get_pps(); const int bitDepth = (cIdx==0 ? sps->BitDepth_Y : sps->BitDepth_C); const int maxPixelValue = (1<<bitDepth)-1; @@ -275,7 +275,9 @@ void apply_sample_adaptive_offset(de265_image* img) { - if (img->sps.sample_adaptive_offset_enabled_flag==0) { + const seq_parameter_set& sps = img->get_sps(); + + if (sps.sample_adaptive_offset_enabled_flag==0) { return; } @@ -286,20 +288,20 @@ return; } - for (int yCtb=0; yCtb<img->sps.PicHeightInCtbsY; yCtb++) - for (int xCtb=0; xCtb<img->sps.PicWidthInCtbsY; xCtb++) + for (int yCtb=0; yCtb<sps.PicHeightInCtbsY; yCtb++) + for (int xCtb=0; xCtb<sps.PicWidthInCtbsY; xCtb++) { const slice_segment_header* shdr = img->get_SliceHeaderCtb(xCtb,yCtb); if (shdr->slice_sao_luma_flag) { - apply_sao(img, xCtb,yCtb, shdr, 0, 1<<img->sps.Log2CtbSizeY, 1<<img->sps.Log2CtbSizeY, + apply_sao(img, xCtb,yCtb, shdr, 0, 1<<sps.Log2CtbSizeY, 1<<sps.Log2CtbSizeY, inputCopy.get_image_plane(0), inputCopy.get_image_stride(0), img->get_image_plane(0), img->get_image_stride(0)); } if (shdr->slice_sao_chroma_flag) { - int nSW = (1<<img->sps.Log2CtbSizeY) / img->sps.SubWidthC; - int nSH = (1<<img->sps.Log2CtbSizeY) / img->sps.SubHeightC; + int nSW = (1<<sps.Log2CtbSizeY) / sps.SubWidthC; + int nSH = (1<<sps.Log2CtbSizeY) / sps.SubHeightC; apply_sao(img, xCtb,yCtb, shdr, 1, nSW,nSH, inputCopy.get_image_plane(1), inputCopy.get_image_stride(1), @@ -315,7 +317,9 @@ void apply_sample_adaptive_offset_sequential(de265_image* img) { - if (img->sps.sample_adaptive_offset_enabled_flag==0) { + const seq_parameter_set& sps = img->get_sps(); + + if (sps.sample_adaptive_offset_enabled_flag==0) { return; } @@ -330,7 +334,7 @@ int nChannels = 3; - if (img->sps.ChromaArrayType == CHROMA_MONO) { nChannels=1; } + if (sps.ChromaArrayType == CHROMA_MONO) { nChannels=1; } for (int cIdx=0;cIdx<nChannels;cIdx++) { @@ -339,21 +343,21 @@ memcpy(inputCopy, img->get_image_plane(cIdx), stride * height * img->get_bytes_per_pixel(cIdx)); - for (int yCtb=0; yCtb<img->sps.PicHeightInCtbsY; yCtb++) - for (int xCtb=0; xCtb<img->sps.PicWidthInCtbsY; xCtb++) + for (int yCtb=0; yCtb<sps.PicHeightInCtbsY; yCtb++) + for (int xCtb=0; xCtb<sps.PicWidthInCtbsY; xCtb++) { const slice_segment_header* shdr = img->get_SliceHeaderCtb(xCtb,yCtb); if (shdr==NULL) { return; } if (cIdx==0 && shdr->slice_sao_luma_flag) { - apply_sao(img, xCtb,yCtb, shdr, 0, 1<<img->sps.Log2CtbSizeY, 1<<img->sps.Log2CtbSizeY, + apply_sao(img, xCtb,yCtb, shdr, 0, 1<<sps.Log2CtbSizeY, 1<<sps.Log2CtbSizeY, inputCopy, stride, img->get_image_plane(0), img->get_image_stride(0)); } if (cIdx!=0 && shdr->slice_sao_chroma_flag) { - int nSW = (1<<img->sps.Log2CtbSizeY) / img->sps.SubWidthC; - int nSH = (1<<img->sps.Log2CtbSizeY) / img->sps.SubHeightC; + int nSW = (1<<sps.Log2CtbSizeY) / sps.SubWidthC; + int nSH = (1<<sps.Log2CtbSizeY) / sps.SubHeightC; apply_sao(img, xCtb,yCtb, shdr, cIdx, nSW,nSH, inputCopy, stride, @@ -394,8 +398,10 @@ state = Running; img->thread_run(this); - const int rightCtb = img->sps.PicWidthInCtbsY-1; - const int ctbSize = (1<<img->sps.Log2CtbSizeY); + const seq_parameter_set& sps = img->get_sps(); + + const int rightCtb = sps.PicWidthInCtbsY-1; + const int ctbSize = (1<<sps.Log2CtbSizeY); // wait until also the CTB-rows below and above are ready @@ -406,7 +412,7 @@ img->wait_for_progress(this, rightCtb,ctb_y-1, inputProgress); } - if (ctb_y+1<img->sps.PicHeightInCtbsY) { + if (ctb_y+1<sps.PicHeightInCtbsY) { img->wait_for_progress(this, rightCtb,ctb_y+1, inputProgress); } @@ -418,7 +424,7 @@ // process SAO in the CTB-row - for (int xCtb=0; xCtb<img->sps.PicWidthInCtbsY; xCtb++) + for (int xCtb=0; xCtb<sps.PicWidthInCtbsY; xCtb++) { const slice_segment_header* shdr = img->get_SliceHeaderCtb(xCtb,ctb_y); if (shdr==NULL) { @@ -432,8 +438,8 @@ } if (shdr->slice_sao_chroma_flag) { - int nSW = ctbSize / img->sps.SubWidthC; - int nSH = ctbSize / img->sps.SubHeightC; + int nSW = ctbSize / sps.SubWidthC; + int nSH = ctbSize / sps.SubHeightC; apply_sao(img, xCtb,ctb_y, shdr, 1, nSW,nSH, inputImg ->get_image_plane(1), inputImg ->get_image_stride(1), @@ -449,7 +455,7 @@ // mark SAO progress for (int x=0;x<=rightCtb;x++) { - const int CtbWidth = img->sps.PicWidthInCtbsY; + const int CtbWidth = sps.PicWidthInCtbsY; img->ctb_progress[x+ctb_y*CtbWidth].set_progress(CTB_PROGRESS_SAO); } @@ -462,8 +468,9 @@ bool add_sao_tasks(image_unit* imgunit, int saoInputProgress) { de265_image* img = imgunit->img; + const seq_parameter_set& sps = img->get_sps(); - if (img->sps.sample_adaptive_offset_enabled_flag==0) { + if (sps.sample_adaptive_offset_enabled_flag==0) { return false; } @@ -471,7 +478,9 @@ decoder_context* ctx = img->decctx; de265_error err = imgunit->sao_output.alloc_image(img->get_width(), img->get_height(), - img->get_chroma_format(), &img->sps, false, + img->get_chroma_format(), + img->get_shared_sps(), + false, img->decctx, img->encctx, img->pts, img->user_data, true); if (err != DE265_OK) { @@ -479,7 +488,7 @@ return false; } - int nRows = img->sps.PicHeightInCtbsY; + int nRows = sps.PicHeightInCtbsY; int n=0; img->thread_start(nRows);
View file
libde265-1.0.2.tar.gz/libde265/sei.cc -> libde265-1.0.3.tar.gz/libde265/sei.cc
Changed
@@ -284,7 +284,7 @@ //write_picture(img); - int nHashes = img->sps.chroma_format_idc==0 ? 1 : 3; + int nHashes = img->get_sps().chroma_format_idc==0 ? 1 : 3; for (int i=0;i<nHashes;i++) { uint8_t* data; int w,h,stride;
View file
libde265-1.0.2.tar.gz/libde265/slice.cc -> libde265-1.0.3.tar.gz/libde265/slice.cc
Changed
@@ -244,6 +244,8 @@ void slice_segment_header::reset() { + pps = NULL; + slice_index = 0; first_slice_segment_in_pic_flag = 0; @@ -377,13 +379,14 @@ return DE265_OK; } - pic_parameter_set* pps = ctx->get_pps((int)slice_pic_parameter_set_id); - if (!pps->pps_read) { + if (!ctx->has_pps(slice_pic_parameter_set_id)) { ctx->add_warning(DE265_WARNING_NONEXISTING_PPS_REFERENCED, false); return DE265_OK; } - seq_parameter_set* sps = ctx->get_sps((int)pps->seq_parameter_set_id); + pps = ctx->get_pps(slice_pic_parameter_set_id); + + const seq_parameter_set* sps = pps->sps; if (!sps->sps_read) { ctx->add_warning(DE265_WARNING_NONEXISTING_SPS_REFERENCED, false); *continueDecoding = false; @@ -1700,13 +1703,15 @@ return bit ? PART_2Nx2N : PART_NxN; } else { + const seq_parameter_set& sps = img->get_sps(); + int bit0 = decode_CABAC_bit(&tctx->cabac_decoder, &tctx->ctx_model[CONTEXT_MODEL_PART_MODE+0]); if (bit0) { logtrace(LogSymbols,"$1 part_mode=%d\n",PART_2Nx2N); return PART_2Nx2N; } // CHECK_ME: I optimize code and fix bug here, need more VERIFY! int bit1 = decode_CABAC_bit(&tctx->cabac_decoder, &tctx->ctx_model[CONTEXT_MODEL_PART_MODE+1]); - if (cLog2CbSize > img->sps.Log2MinCbSizeY) { - if (!img->sps.amp_enabled_flag) { + if (cLog2CbSize > sps.Log2MinCbSizeY) { + if (!sps.amp_enabled_flag) { logtrace(LogSymbols,"$1 part_mode=%d\n",bit1 ? PART_2NxN : PART_Nx2N); return bit1 ? PART_2NxN : PART_Nx2N; } @@ -2660,20 +2665,20 @@ */ bool setCtbAddrFromTS(thread_context* tctx) { - const seq_parameter_set* sps = &tctx->img->sps; + const seq_parameter_set& sps = tctx->img->get_sps(); - if (tctx->CtbAddrInTS < sps->PicSizeInCtbsY) { - tctx->CtbAddrInRS = tctx->img->pps.CtbAddrTStoRS[tctx->CtbAddrInTS]; + if (tctx->CtbAddrInTS < sps.PicSizeInCtbsY) { + tctx->CtbAddrInRS = tctx->img->get_pps().CtbAddrTStoRS[tctx->CtbAddrInTS]; - tctx->CtbX = tctx->CtbAddrInRS % sps->PicWidthInCtbsY; - tctx->CtbY = tctx->CtbAddrInRS / sps->PicWidthInCtbsY; + tctx->CtbX = tctx->CtbAddrInRS % sps.PicWidthInCtbsY; + tctx->CtbY = tctx->CtbAddrInRS / sps.PicWidthInCtbsY; return false; } else { - tctx->CtbAddrInRS = sps->PicSizeInCtbsY; + tctx->CtbAddrInRS = sps.PicSizeInCtbsY; - tctx->CtbX = tctx->CtbAddrInRS % sps->PicWidthInCtbsY; - tctx->CtbY = tctx->CtbAddrInRS / sps->PicWidthInCtbsY; + tctx->CtbX = tctx->CtbAddrInRS % sps.PicWidthInCtbsY; + tctx->CtbY = tctx->CtbAddrInRS / sps.PicWidthInCtbsY; return true; } } @@ -2692,8 +2697,8 @@ { slice_segment_header* shdr = tctx->shdr; de265_image* img = tctx->img; - const seq_parameter_set* sps = &img->sps; - const pic_parameter_set* pps = &img->pps; + const seq_parameter_set& sps = img->get_sps(); + const pic_parameter_set& pps = img->get_pps(); logtrace(LogSlice,"# read_sao(%d,%d)\n",xCtb,yCtb); @@ -2708,8 +2713,8 @@ if (xCtb>0) { //char leftCtbInSliceSeg = (CtbAddrInSliceSeg>0); char leftCtbInSliceSeg = (tctx->CtbAddrInRS > shdr->SliceAddrRS); - char leftCtbInTile = (pps->TileIdRS[xCtb + yCtb * sps->PicWidthInCtbsY] == - pps->TileIdRS[xCtb-1 + yCtb * sps->PicWidthInCtbsY]); + char leftCtbInTile = (pps.TileIdRS[xCtb + yCtb * sps.PicWidthInCtbsY] == + pps.TileIdRS[xCtb-1 + yCtb * sps.PicWidthInCtbsY]); if (leftCtbInSliceSeg && leftCtbInTile) { sao_merge_left_flag = decode_sao_merge_flag(tctx); @@ -2720,11 +2725,11 @@ if (yCtb>0 && sao_merge_left_flag==0) { logtrace(LogSlice,"CtbAddrInRS:%d PicWidthInCtbsY:%d slice_segment_address:%d\n", tctx->CtbAddrInRS, - sps->PicWidthInCtbsY, + sps.PicWidthInCtbsY, shdr->slice_segment_address); - char upCtbInSliceSeg = (tctx->CtbAddrInRS - sps->PicWidthInCtbsY) >= shdr->SliceAddrRS; - char upCtbInTile = (pps->TileIdRS[xCtb + yCtb * sps->PicWidthInCtbsY] == - pps->TileIdRS[xCtb + (yCtb-1) * sps->PicWidthInCtbsY]); + char upCtbInSliceSeg = (tctx->CtbAddrInRS - sps.PicWidthInCtbsY) >= shdr->SliceAddrRS; + char upCtbInTile = (pps.TileIdRS[xCtb + yCtb * sps.PicWidthInCtbsY] == + pps.TileIdRS[xCtb + (yCtb-1) * sps.PicWidthInCtbsY]); if (upCtbInSliceSeg && upCtbInTile) { sao_merge_up_flag = decode_sao_merge_flag(tctx); @@ -2734,7 +2739,7 @@ if (!sao_merge_up_flag && !sao_merge_left_flag) { int nChroma = 3; - if (sps->ChromaArrayType == CHROMA_MONO) nChroma=1; + if (sps.ChromaArrayType == CHROMA_MONO) nChroma=1; for (int cIdx=0; cIdx<nChroma; cIdx++) { if ((shdr->slice_sao_luma_flag && cIdx==0) || @@ -2800,10 +2805,10 @@ int log2OffsetScale; if (cIdx==0) { - log2OffsetScale = pps->range_extension.log2_sao_offset_scale_luma; + log2OffsetScale = pps.range_extension.log2_sao_offset_scale_luma; } else { - log2OffsetScale = pps->range_extension.log2_sao_offset_scale_chroma; + log2OffsetScale = pps.range_extension.log2_sao_offset_scale_chroma; } for (int i=0;i<4;i++) { @@ -2831,12 +2836,12 @@ { slice_segment_header* shdr = tctx->shdr; de265_image* img = tctx->img; - seq_parameter_set* sps = &img->sps; + const seq_parameter_set& sps = img->get_sps(); - int xCtb = (tctx->CtbAddrInRS % sps->PicWidthInCtbsY); - int yCtb = (tctx->CtbAddrInRS / sps->PicWidthInCtbsY); - int xCtbPixels = xCtb << sps->Log2CtbSizeY; - int yCtbPixels = yCtb << sps->Log2CtbSizeY; + int xCtb = (tctx->CtbAddrInRS % sps.PicWidthInCtbsY); + int yCtb = (tctx->CtbAddrInRS / sps.PicWidthInCtbsY); + int xCtbPixels = xCtb << sps.Log2CtbSizeY; + int yCtbPixels = yCtb << sps.Log2CtbSizeY; logtrace(LogSlice,"----- decode CTB %d;%d (%d;%d) POC=%d, SliceAddrRS=%d\n", xCtbPixels,yCtbPixels, xCtb,yCtb, @@ -2853,7 +2858,7 @@ read_sao(tctx, xCtb,yCtb, CtbAddrInSliceSeg); } - read_coding_quadtree(tctx, xCtbPixels, yCtbPixels, sps->Log2CtbSizeY, 0); + read_coding_quadtree(tctx, xCtbPixels, yCtbPixels, sps.Log2CtbSizeY, 0); } @@ -2872,12 +2877,12 @@ // check whether neighbor is outside of frame if (xN < 0 || yN < 0) { return 0; } - if (xN >= img->sps.pic_width_in_luma_samples) { return 0; } - if (yN >= img->sps.pic_height_in_luma_samples) { return 0; } + if (xN >= img->get_sps().pic_width_in_luma_samples) { return 0; } + if (yN >= img->get_sps().pic_height_in_luma_samples) { return 0; } - int current_ctbAddrRS = luma_pos_to_ctbAddrRS(&img->sps, xC,yC); - int neighbor_ctbAddrRS = luma_pos_to_ctbAddrRS(&img->sps, xN,yN); + int current_ctbAddrRS = luma_pos_to_ctbAddrRS(&img->get_sps(), xC,yC); + int neighbor_ctbAddrRS = luma_pos_to_ctbAddrRS(&img->get_sps(), xN,yN); // TODO: check if this is correct (6.4.1) @@ -2888,8 +2893,8 @@ // check if both CTBs are in the same tile. - if (img->pps.TileIdRS[current_ctbAddrRS] != - img->pps.TileIdRS[neighbor_ctbAddrRS]) { + if (img->get_pps().TileIdRS[current_ctbAddrRS] != + img->get_pps().TileIdRS[neighbor_ctbAddrRS]) { return 0; } @@ -2907,8 +2912,8 @@ //slice_segment_header* shdr = tctx->shdr; de265_image* img = tctx->img; - const seq_parameter_set* sps = &img->sps; - const pic_parameter_set* pps = &img->pps; + const seq_parameter_set& sps = img->get_sps(); + const pic_parameter_set& pps = img->get_pps(); enum PredMode PredMode = img->get_pred_mode(x0,y0); @@ -2917,9 +2922,9 @@ } - if (pps->transform_skip_enabled_flag && + if (pps.transform_skip_enabled_flag && !tctx->cu_transquant_bypass_flag && - (log2TrafoSize <= pps->Log2MaxTransformSkipSize)) + (log2TrafoSize <= pps.Log2MaxTransformSkipSize)) { tctx->transform_skip_flag[cIdx] = decode_transform_skip_flag(tctx,cIdx); } @@ -2931,7 +2936,7 @@ tctx->explicit_rdpcm_flag = false; - if (PredMode == MODE_INTER && sps->range_extension.explicit_rdpcm_enabled_flag && + if (PredMode == MODE_INTER && sps.range_extension.explicit_rdpcm_enabled_flag && ( tctx->transform_skip_flag[cIdx] || tctx->cu_transquant_bypass_flag)) { tctx->explicit_rdpcm_flag = decode_explicit_rdpcm_flag(tctx,cIdx); @@ -3001,10 +3006,13 @@ if (PredMode == MODE_INTRA) { if (cIdx==0) { - scanIdx = get_intra_scan_idx(log2TrafoSize, img->get_IntraPredMode(x0,y0), cIdx, sps); + scanIdx = get_intra_scan_idx(log2TrafoSize, img->get_IntraPredMode(x0,y0), cIdx, &sps); + //printf("luma scan idx=%d <- intra mode=%d\n",scanIdx, img->get_IntraPredMode(x0,y0)); } else { - scanIdx = get_intra_scan_idx(log2TrafoSize, img->get_IntraPredModeC(x0,y0), cIdx, sps); + scanIdx = get_intra_scan_idx(log2TrafoSize, img->get_IntraPredModeC(x0,y0), cIdx, &sps); + //printf("chroma scan idx=%d <- intra mode=%d chroma:%d trsize:%d\n",scanIdx, + // img->get_IntraPredModeC(x0,y0), sps->chroma_format_idc, 1<<log2TrafoSize); } } else { @@ -3116,6 +3124,9 @@ int prevCsbf = coded_sub_block_neighbors[S.x+S.y*sbWidth]; uint8_t* ctxIdxMap = ctxIdxLookup[log2w][!!cIdx][!!scanIdx][prevCsbf]; + logdebug(LogSlice,"log2w:%d cIdx:%d scanIdx:%d prevCsbf:%d\n", + log2w,cIdx,scanIdx,prevCsbf); + // set the last coded coefficient in the last subblock @@ -3141,7 +3152,7 @@ // for all AC coefficients in sub-block, a significant_coeff flag is coded int ctxInc; - if (sps->range_extension.transform_skip_context_enabled_flag && + if (sps.range_extension.transform_skip_context_enabled_flag && (tctx->cu_transquant_bypass_flag || tctx->transform_skip_flag[cIdx])) { ctxInc = ( cIdx == 0 ) ? 42 : (16+27); } @@ -3149,6 +3160,8 @@ ctxInc = ctxIdxMap[xC+(yC<<log2TrafoSize)]; } + logtrace(LogSlice,"trafoSize: %d\n",1<<log2TrafoSize); + int significant_coeff = decode_significant_coeff_flag_lookup(tctx, ctxInc); if (significant_coeff) { @@ -3172,7 +3185,7 @@ // if we cannot infert the DC coefficient, it is coded int ctxInc; - if (sps->range_extension.transform_skip_context_enabled_flag && + if (sps.range_extension.transform_skip_context_enabled_flag && (tctx->cu_transquant_bypass_flag || tctx->transform_skip_flag[cIdx])) { ctxInc = ( cIdx == 0 ) ? 42 : (16+27); } @@ -3281,7 +3294,7 @@ if (tctx->cu_transquant_bypass_flag || (PredMode == MODE_INTRA && - sps->range_extension.implicit_rdpcm_enabled_flag && + sps.range_extension.implicit_rdpcm_enabled_flag && tctx->transform_skip_flag[cIdx] && ( predModeIntra == 10 || predModeIntra == 26 )) || tctx->explicit_rdpcm_flag) @@ -3300,7 +3313,7 @@ } // n==nCoefficients-1 - if (!pps->sign_data_hiding_flag || !signHidden) { + if (!pps.sign_data_hiding_flag || !signHidden) { coeff_sign[nCoefficients-1] = decode_CABAC_bypass(&tctx->cabac_decoder); logtrace(LogSlice,"sign[%d] = %d\n", nCoefficients-1, coeff_sign[nCoefficients-1]); } @@ -3314,7 +3327,7 @@ int sumAbsLevel=0; int uiGoRiceParam; - if (sps->range_extension.persistent_rice_adaptation_enabled_flag==0) { + if (sps.range_extension.persistent_rice_adaptation_enabled_flag==0) { uiGoRiceParam = 0; } else { @@ -3335,7 +3348,7 @@ coeff_abs_level_remaining = decode_coeff_abs_level_remaining(tctx, uiGoRiceParam); - if (sps->range_extension.persistent_rice_adaptation_enabled_flag == 0) { + if (sps.range_extension.persistent_rice_adaptation_enabled_flag == 0) { // (2014.10 / 9-20) if (baseLevel + coeff_abs_level_remaining > 3*(1<<uiGoRiceParam)) { uiGoRiceParam++; @@ -3348,7 +3361,7 @@ } // persistent_rice_adaptation_enabled_flag - if (sps->range_extension.persistent_rice_adaptation_enabled_flag && + if (sps.range_extension.persistent_rice_adaptation_enabled_flag && firstCoeffWithAbsLevelRemaining) { if (coeff_abs_level_remaining >= (3 << (tctx->StatCoeff[sbType]/4 ))) { tctx->StatCoeff[sbType]++; @@ -3373,7 +3386,7 @@ currCoeff = -currCoeff; } - if (pps->sign_data_hiding_flag && signHidden) { + if (pps.sign_data_hiding_flag && signHidden) { sumAbsLevel += baseLevel + coeff_abs_level_remaining; if (n==nCoefficients-1 && (sumAbsLevel & 1)) { @@ -3414,6 +3427,7 @@ int nT, int cIdx, enum PredMode cuPredMode, bool cbf) { de265_image* img = tctx->img; + const seq_parameter_set& sps = img->get_sps(); int residualDpcm = 0; @@ -3425,8 +3439,8 @@ intraPredMode = img->get_IntraPredMode(x0,y0); } else { - const int SubWidthC = tctx->img->sps.SubWidthC; - const int SubHeightC = tctx->img->sps.SubHeightC; + const int SubWidthC = sps.SubWidthC; + const int SubHeightC = sps.SubHeightC; intraPredMode = img->get_IntraPredModeC(x0*SubWidthC,y0*SubHeightC); } @@ -3439,7 +3453,7 @@ decode_intra_prediction(img, x0,y0, intraPredMode, nT, cIdx); - residualDpcm = tctx->img->sps.range_extension.implicit_rdpcm_enabled_flag && + residualDpcm = sps.range_extension.implicit_rdpcm_enabled_flag && (tctx->cu_transquant_bypass_flag || tctx->transform_skip_flag[cIdx]) && (intraPredMode == 10 || intraPredMode == 26); @@ -3548,7 +3562,9 @@ assert(cbf_cr != -1); assert(cbf_luma != -1); - const int ChromaArrayType = tctx->img->sps.ChromaArrayType; + const seq_parameter_set& sps = tctx->img->get_sps(); + + const int ChromaArrayType = sps.ChromaArrayType; int log2TrafoSizeC = (ChromaArrayType==CHROMA_444 ? log2TrafoSize : log2TrafoSize-1); log2TrafoSizeC = libde265_max(2, log2TrafoSizeC); @@ -3569,7 +3585,7 @@ { bool doDecodeQuantParameters = false; - if (tctx->img->pps.cu_qp_delta_enabled_flag && + if (tctx->img->get_pps().cu_qp_delta_enabled_flag && !tctx->IsCuQpDeltaCoded) { int cu_qp_delta_abs = decode_cu_qp_delta_abs(tctx); @@ -3599,10 +3615,10 @@ &tctx->ctx_model[CONTEXT_MODEL_CU_CHROMA_QP_OFFSET_FLAG]); - const pic_parameter_set* pps = &tctx->img->pps; + const pic_parameter_set& pps = tctx->img->get_pps(); int cu_chroma_qp_offset_idx = 0; - if (cu_chroma_qp_offset_flag && pps->range_extension.chroma_qp_offset_list_len > 1) { + if (cu_chroma_qp_offset_flag && pps.range_extension.chroma_qp_offset_list_len > 1) { cu_chroma_qp_offset_idx = decode_CABAC_bit(&tctx->cabac_decoder, &tctx->ctx_model[CONTEXT_MODEL_CU_CHROMA_QP_OFFSET_IDX]); } @@ -3610,8 +3626,8 @@ tctx->IsCuChromaQpOffsetCoded = 1; if (cu_chroma_qp_offset_flag) { - tctx->CuQpOffsetCb = pps->range_extension.cb_qp_offset_list[ cu_chroma_qp_offset_idx ]; - tctx->CuQpOffsetCr = pps->range_extension.cr_qp_offset_list[ cu_chroma_qp_offset_idx ]; + tctx->CuQpOffsetCb = pps.range_extension.cb_qp_offset_list[ cu_chroma_qp_offset_idx ]; + tctx->CuQpOffsetCr = pps.range_extension.cr_qp_offset_list[ cu_chroma_qp_offset_idx ]; } else { tctx->CuQpOffsetCb = 0; @@ -3634,8 +3650,8 @@ int nT = 1<<log2TrafoSize; int nTC = 1<<log2TrafoSizeC; - const int SubWidthC = tctx->img->sps.SubWidthC; - const int SubHeightC = tctx->img->sps.SubHeightC; + const int SubWidthC = sps.SubWidthC; + const int SubHeightC = sps.SubHeightC; // --- luma --- @@ -3657,7 +3673,7 @@ // TODO: cross-component prediction const bool do_cross_component_prediction = - (tctx->img->pps.range_extension.cross_component_prediction_enabled_flag && + (tctx->img->get_pps().range_extension.cross_component_prediction_enabled_flag && cbf_luma && (cuPredMode == MODE_INTER || tctx->img->is_IntraPredModeC_Mode4(x0,y0))); @@ -3673,7 +3689,7 @@ if ((err=residual_coding(tctx,x0,y0,log2TrafoSizeC,1)) != DE265_OK) return err; } - if (tctx->img->sps.ChromaArrayType != CHROMA_MONO) { + if (sps.ChromaArrayType != CHROMA_MONO) { decode_TU(tctx, x0/SubWidthC,y0/SubHeightC, xCUBase/SubWidthC,yCUBase/SubHeightC, nTC, 1, cuPredMode, cbf_cb & 1); @@ -3709,7 +3725,7 @@ if ((err=residual_coding(tctx,x0,y0,log2TrafoSizeC,2)) != DE265_OK) return err; } - if (tctx->img->sps.ChromaArrayType != CHROMA_MONO) { + if (sps.ChromaArrayType != CHROMA_MONO) { decode_TU(tctx, x0/SubWidthC,y0/SubHeightC, xCUBase/SubWidthC,yCUBase/SubHeightC, @@ -3739,7 +3755,7 @@ log2TrafoSize,1)) != DE265_OK) return err; } - if (tctx->img->sps.ChromaArrayType != CHROMA_MONO) { + if (sps.ChromaArrayType != CHROMA_MONO) { decode_TU(tctx, xBase/SubWidthC, yBase/SubHeightC, xCUBase/SubWidthC,yCUBase/SubHeightC, nT, 1, cuPredMode, cbf_cb & 1); @@ -3763,7 +3779,7 @@ log2TrafoSize,2)) != DE265_OK) return err; } - if (tctx->img->sps.ChromaArrayType != CHROMA_MONO) { + if (sps.ChromaArrayType != CHROMA_MONO) { decode_TU(tctx, xBase/SubWidthC, yBase/SubHeightC, xCUBase/SubWidthC,yCUBase/SubHeightC, nT, 2, cuPredMode, cbf_cr & 1); @@ -3819,7 +3835,7 @@ x0,y0,xBase,yBase,log2TrafoSize,trafoDepth,MaxTrafoDepth,parent_cbf_cb,parent_cbf_cr); de265_image* img = tctx->img; - const seq_parameter_set* sps = &img->sps; + const seq_parameter_set& sps = img->get_sps(); int split_transform_flag; @@ -3832,8 +3848,8 @@ If intra-prediction is NxN mode -> split automatically (only at level 0) Otherwise -> read split flag */ - if (log2TrafoSize <= sps->Log2MaxTrafoSize && - log2TrafoSize > sps->Log2MinTrafoSize && + if (log2TrafoSize <= sps.Log2MaxTrafoSize && + log2TrafoSize > sps.Log2MinTrafoSize && trafoDepth < MaxTrafoDepth && !(IntraSplitFlag && trafoDepth==0)) { @@ -3843,12 +3859,12 @@ { enum PartMode PartMode = img->get_PartMode(x0,y0); - int interSplitFlag= (sps->max_transform_hierarchy_depth_inter==0 && + int interSplitFlag= (sps.max_transform_hierarchy_depth_inter==0 && trafoDepth == 0 && PredMode == MODE_INTER && PartMode != PART_2Nx2N); - split_transform_flag = (log2TrafoSize > sps->Log2MaxTrafoSize || + split_transform_flag = (log2TrafoSize > sps.Log2MaxTrafoSize || (IntraSplitFlag==1 && trafoDepth==0) || interSplitFlag==1) ? 1:0; } @@ -3865,13 +3881,13 @@ // 4:2:0 and 4:4:4 modes: binary flag in bit 0 // 4:2:2 mode: bit 0: top block, bit 1: bottom block - if ((log2TrafoSize>2 && sps->ChromaArrayType != CHROMA_MONO) || - sps->ChromaArrayType == CHROMA_444) { + if ((log2TrafoSize>2 && sps.ChromaArrayType != CHROMA_MONO) || + sps.ChromaArrayType == CHROMA_444) { // we do not have to test for trafoDepth==0, because parent_cbf_cb is 1 at depth 0 if (/*trafoDepth==0 ||*/ parent_cbf_cb) { cbf_cb = decode_cbf_chroma(tctx,trafoDepth); - if (sps->ChromaArrayType == CHROMA_422 && (!split_transform_flag || log2TrafoSize==3)) { + if (sps.ChromaArrayType == CHROMA_422 && (!split_transform_flag || log2TrafoSize==3)) { cbf_cb |= (decode_cbf_chroma(tctx,trafoDepth) << 1); } } @@ -3880,7 +3896,7 @@ if (/*trafoDepth==0 ||*/ parent_cbf_cr) { cbf_cr = decode_cbf_chroma(tctx,trafoDepth); - if (sps->ChromaArrayType == CHROMA_422 && (!split_transform_flag || log2TrafoSize==3)) { + if (sps.ChromaArrayType == CHROMA_422 && (!split_transform_flag || log2TrafoSize==3)) { cbf_cr |= (decode_cbf_chroma(tctx,trafoDepth) << 1); } } @@ -3950,8 +3966,7 @@ } -#if DE265_LOG_TRACE -static const char* part_mode_name(enum PartMode pm) +const char* part_mode_name(enum PartMode pm) { switch (pm) { case PART_2Nx2N: return "2Nx2N"; @@ -3966,7 +3981,6 @@ return "undefined part mode"; } -#endif void read_mvd_coding(thread_context* tctx, @@ -4130,7 +4144,7 @@ void read_pcm_samples_internal(thread_context* tctx, int x0, int y0, int log2CbSize, int cIdx, bitreader& br) { - const seq_parameter_set* sps = &tctx->img->sps; + const seq_parameter_set& sps = tctx->img->get_sps(); int nPcmBits; int bitDepth; @@ -4139,18 +4153,18 @@ int h = 1<<log2CbSize; if (cIdx>0) { - w /= tctx->img->sps.SubWidthC; - h /= tctx->img->sps.SubHeightC; + w /= sps.SubWidthC; + h /= sps.SubHeightC; - x0 /= tctx->img->sps.SubWidthC; - y0 /= tctx->img->sps.SubHeightC; + x0 /= sps.SubWidthC; + y0 /= sps.SubHeightC; - nPcmBits = sps->pcm_sample_bit_depth_chroma; - bitDepth = sps->BitDepth_C; + nPcmBits = sps.pcm_sample_bit_depth_chroma; + bitDepth = sps.BitDepth_C; } else { - nPcmBits = sps->pcm_sample_bit_depth_luma; - bitDepth = sps->BitDepth_Y; + nPcmBits = sps.pcm_sample_bit_depth_luma; + bitDepth = sps.BitDepth_Y; } pixel_t* ptr; @@ -4183,7 +4197,7 @@ read_pcm_samples_internal<uint8_t>(tctx,x0,y0,log2CbSize,0,br); } - if (tctx->img->sps.ChromaArrayType != CHROMA_MONO) { + if (tctx->img->get_sps().ChromaArrayType != CHROMA_MONO) { if (tctx->img->high_bit_depth(1)) { read_pcm_samples_internal<uint16_t>(tctx,x0,y0,log2CbSize,1,br); read_pcm_samples_internal<uint16_t>(tctx,x0,y0,log2CbSize,2,br); @@ -4234,8 +4248,8 @@ int ctDepth) { de265_image* img = tctx->img; - const seq_parameter_set* sps = &img->sps; - const pic_parameter_set* pps = &img->pps; + const seq_parameter_set& sps = img->get_sps(); + const pic_parameter_set& pps = img->get_pps(); slice_segment_header* shdr = tctx->shdr; logtrace(LogSlice,"- read_coding_unit %d;%d cbsize:%d\n",x0,y0,1<<log2CbSize); @@ -4256,7 +4270,7 @@ decode_quantization_parameters(tctx, x0,y0, x0, y0); - if (pps->transquant_bypass_enable_flag) + if (pps.transquant_bypass_enable_flag) { int transquant_bypass = decode_transquant_bypass_flag(tctx); @@ -4312,7 +4326,7 @@ enum PartMode PartMode; if (cuPredMode != MODE_INTRA || - log2CbSize == sps->Log2MinCbSizeY) { + log2CbSize == sps.Log2MinCbSizeY) { PartMode = decode_part_mode(tctx, cuPredMode, log2CbSize); if (PartMode==PART_NxN && cuPredMode==MODE_INTRA) { @@ -4330,9 +4344,9 @@ bool pcm_flag = false; if (cuPredMode == MODE_INTRA) { - if (PartMode == PART_2Nx2N && sps->pcm_enabled_flag && - log2CbSize >= sps->Log2MinIpcmCbSizeY && - log2CbSize <= sps->Log2MaxIpcmCbSizeY) { + if (PartMode == PART_2Nx2N && sps.pcm_enabled_flag && + log2CbSize >= sps.Log2MinIpcmCbSizeY && + log2CbSize <= sps.Log2MaxIpcmCbSizeY) { pcm_flag = decode_CABAC_term_bit(&tctx->cabac_decoder); } @@ -4385,9 +4399,9 @@ - int PUidx = (x>>sps->Log2MinPUSize) + (y>>sps->Log2MinPUSize)*sps->PicWidthInMinPUs; + int PUidx = (x>>sps.Log2MinPUSize) + (y>>sps.Log2MinPUSize)*sps.PicWidthInMinPUs; - int candModeList[3]; + enum IntraPredMode candModeList[3]; fillIntraPredModeCandidates(candModeList,x,y,PUidx, availableA, availableB, img); @@ -4430,7 +4444,7 @@ // set chroma intra prediction mode - if (sps->ChromaArrayType == CHROMA_444) { + if (sps.ChromaArrayType == CHROMA_444) { // chroma 4:4:4 idx = 0; @@ -4453,7 +4467,7 @@ idx++; } } - else if (sps->ChromaArrayType != CHROMA_MONO) { + else if (sps.ChromaArrayType != CHROMA_MONO) { // chroma 4:2:0 and 4:2:2 int intra_chroma_pred_mode = decode_intra_chroma_pred_mode(tctx); @@ -4461,7 +4475,7 @@ logtrace(LogSlice,"IntraPredMode: %d\n",IntraPredMode); int IntraPredModeC = map_chroma_pred_mode(intra_chroma_pred_mode, IntraPredMode); - if (sps->ChromaArrayType == CHROMA_422) { + if (sps.ChromaArrayType == CHROMA_422) { IntraPredModeC = map_chroma_422[ IntraPredModeC ]; } @@ -4540,16 +4554,16 @@ int MaxTrafoDepth; if (cuPredMode==MODE_INTRA) { - MaxTrafoDepth = sps->max_transform_hierarchy_depth_intra + IntraSplitFlag; + MaxTrafoDepth = sps.max_transform_hierarchy_depth_intra + IntraSplitFlag; } else { - MaxTrafoDepth = sps->max_transform_hierarchy_depth_inter; + MaxTrafoDepth = sps.max_transform_hierarchy_depth_inter; } logtrace(LogSlice,"MaxTrafoDepth: %d\n",MaxTrafoDepth); uint8_t initial_chroma_cbf = 1; - if (sps->ChromaArrayType == CHROMA_MONO) { + if (sps.ChromaArrayType == CHROMA_MONO) { initial_chroma_cbf = 0; } @@ -4573,7 +4587,8 @@ logtrace(LogSlice,"- read_coding_quadtree %d;%d cbsize:%d depth:%d POC:%d\n",x0,y0,1<<log2CbSize,ctDepth,tctx->img->PicOrderCntVal); de265_image* img = tctx->img; - const seq_parameter_set* sps = &img->sps; + const seq_parameter_set& sps = img->get_sps(); + const pic_parameter_set& pps = img->get_pps(); int split_flag; @@ -4581,18 +4596,18 @@ // completely contained within the image area. // If it is partly outside the image area and not at minimum size, // it is split. If already at minimum size, it is not split further. - if (x0+(1<<log2CbSize) <= sps->pic_width_in_luma_samples && - y0+(1<<log2CbSize) <= sps->pic_height_in_luma_samples && - log2CbSize > sps->Log2MinCbSizeY) { + if (x0+(1<<log2CbSize) <= sps.pic_width_in_luma_samples && + y0+(1<<log2CbSize) <= sps.pic_height_in_luma_samples && + log2CbSize > sps.Log2MinCbSizeY) { split_flag = decode_split_cu_flag(tctx, x0,y0, ctDepth); } else { - if (log2CbSize > sps->Log2MinCbSizeY) { split_flag=1; } + if (log2CbSize > sps.Log2MinCbSizeY) { split_flag=1; } else { split_flag=0; } } - if (img->pps.cu_qp_delta_enabled_flag && - log2CbSize >= img->pps.Log2MinCuQpDeltaSize) + if (pps.cu_qp_delta_enabled_flag && + log2CbSize >= pps.Log2MinCuQpDeltaSize) { tctx->IsCuQpDeltaCoded = 0; tctx->CuQpDelta = 0; @@ -4604,7 +4619,7 @@ if (tctx->shdr->cu_chroma_qp_offset_enabled_flag && - log2CbSize >= img->pps.Log2MinCuChromaQpOffsetSize) { + log2CbSize >= pps.Log2MinCuChromaQpOffsetSize) { tctx->IsCuChromaQpOffsetCoded = 0; } @@ -4614,14 +4629,14 @@ read_coding_quadtree(tctx,x0,y0, log2CbSize-1, ctDepth+1); - if (x1<sps->pic_width_in_luma_samples) + if (x1<sps.pic_width_in_luma_samples) read_coding_quadtree(tctx,x1,y0, log2CbSize-1, ctDepth+1); - if (y1<sps->pic_height_in_luma_samples) + if (y1<sps.pic_height_in_luma_samples) read_coding_quadtree(tctx,x0,y1, log2CbSize-1, ctDepth+1); - if (x1<sps->pic_width_in_luma_samples && - y1<sps->pic_height_in_luma_samples) + if (x1<sps.pic_width_in_luma_samples && + y1<sps.pic_height_in_luma_samples) read_coding_quadtree(tctx,x1,y1, log2CbSize-1, ctDepth+1); } else { @@ -4650,10 +4665,10 @@ bool block_wpp, // block on WPP dependencies bool first_independent_substream) { - const pic_parameter_set* pps = &tctx->img->pps; - const seq_parameter_set* sps = &tctx->img->sps; + const pic_parameter_set& pps = tctx->img->get_pps(); + const seq_parameter_set& sps = tctx->img->get_sps(); - const int ctbW = sps->PicWidthInCtbsY; + const int ctbW = sps.PicWidthInCtbsY; const int startCtbY = tctx->CtbY; @@ -4663,10 +4678,10 @@ // in WPP mode: initialize CABAC model with stored model from row above if ((!first_independent_substream || tctx->CtbY != startCtbY) && - pps->entropy_coding_sync_enabled_flag && + pps.entropy_coding_sync_enabled_flag && tctx->CtbY>=1 && tctx->CtbX==0) { - if (sps->PicWidthInCtbsY>1) { + if (sps.PicWidthInCtbsY>1) { if ((tctx->CtbY-1) >= tctx->imgunit->ctx_models.size()) { return Decode_Error; } @@ -4691,12 +4706,12 @@ const int ctbx = tctx->CtbX; const int ctby = tctx->CtbY; - if (ctbx+ctby*ctbW >= tctx->img->pps.CtbAddrRStoTS.size()) { + if (ctbx+ctby*ctbW >= pps.CtbAddrRStoTS.size()) { return Decode_Error; } - if (ctbx >= tctx->img->sps.PicWidthInCtbsY || - ctby >= tctx->img->sps.PicHeightInCtbsY) { + if (ctbx >= sps.PicWidthInCtbsY || + ctby >= sps.PicHeightInCtbsY) { return Decode_Error; } @@ -4723,9 +4738,9 @@ // save CABAC-model for WPP (except in last CTB row) - if (pps->entropy_coding_sync_enabled_flag && + if (pps.entropy_coding_sync_enabled_flag && ctbx == 1 && - ctby < sps->PicHeightInCtbsY-1) + ctby < sps.PicHeightInCtbsY-1) { // no storage for context table has been allocated if (tctx->imgunit->ctx_models.size() <= ctby) { @@ -4746,7 +4761,7 @@ // at the end of the slice segment, we store the CABAC model if we need it // because a dependent slice may follow - if (pps->dependent_slice_segments_enabled_flag) { + if (pps.dependent_slice_segments_enabled_flag) { tctx->shdr->ctx_model_storage = tctx->ctx_model; tctx->shdr->ctx_model_storage.decouple(); // store an independent copy @@ -4793,9 +4808,9 @@ if (!end_of_slice_segment_flag) { bool end_of_sub_stream = false; - end_of_sub_stream |= (pps->tiles_enabled_flag && - pps->TileId[tctx->CtbAddrInTS] != pps->TileId[tctx->CtbAddrInTS-1]); - end_of_sub_stream |= (pps->entropy_coding_sync_enabled_flag && + end_of_sub_stream |= (pps.tiles_enabled_flag && + pps.TileId[tctx->CtbAddrInTS] != pps.TileId[tctx->CtbAddrInTS-1]); + end_of_sub_stream |= (pps.entropy_coding_sync_enabled_flag && lastCtbY != tctx->CtbY); if (end_of_sub_stream) { @@ -4819,12 +4834,12 @@ bool initialize_CABAC_at_slice_segment_start(thread_context* tctx) { de265_image* img = tctx->img; - const pic_parameter_set* pps = &img->pps; - const seq_parameter_set* sps = &img->sps; + const pic_parameter_set& pps = img->get_pps(); + const seq_parameter_set& sps = img->get_sps(); slice_segment_header* shdr = tctx->shdr; if (shdr->dependent_slice_segment_flag) { - int prevCtb = pps->CtbAddrTStoRS[ pps->CtbAddrRStoTS[shdr->slice_segment_address] -1 ]; + int prevCtb = pps.CtbAddrTStoRS[ pps.CtbAddrRStoTS[shdr->slice_segment_address] -1 ]; int sliceIdx = img->get_SliceHeaderIndex_atIndex(prevCtb); if (sliceIdx >= img->slices.size()) { @@ -4832,9 +4847,9 @@ } slice_segment_header* prevCtbHdr = img->slices[ sliceIdx ]; - if (pps->is_tile_start_CTB(shdr->slice_segment_address % sps->PicWidthInCtbsY, - shdr->slice_segment_address / sps->PicWidthInCtbsY - )) { + if (pps.is_tile_start_CTB(shdr->slice_segment_address % sps.PicWidthInCtbsY, + shdr->slice_segment_address / sps.PicWidthInCtbsY + )) { initialize_CABAC_models(tctx); } else { @@ -4933,8 +4948,8 @@ thread_context* tctx = data->tctx; de265_image* img = tctx->img; - seq_parameter_set* sps = &img->sps; - int ctbW = sps->PicWidthInCtbsY; + const seq_parameter_set& sps = img->get_sps(); + int ctbW = sps.PicWidthInCtbsY; state = Running; img->thread_run(this); @@ -4975,11 +4990,11 @@ // TODO: what about slices that end properly in the middle of a CTB row? if (tctx->CtbY == myCtbRow) { - int lastCtbX = sps->PicWidthInCtbsY; // assume no tiles when WPP is on + int lastCtbX = sps.PicWidthInCtbsY; // assume no tiles when WPP is on for (int x = tctx->CtbX; x<lastCtbX ; x++) { - if (x < img->sps.PicWidthInCtbsY && - myCtbRow < img->sps.PicHeightInCtbsY) { + if (x < sps.PicWidthInCtbsY && + myCtbRow < sps.PicHeightInCtbsY) { img->ctb_progress[myCtbRow*ctbW + x].set_progress(CTB_PROGRESS_PREFILTER); } } @@ -4996,8 +5011,8 @@ setCtbAddrFromTS(tctx); de265_image* img = tctx->img; - const pic_parameter_set* pps = &img->pps; - const seq_parameter_set* sps = &img->sps; + const pic_parameter_set& pps = img->get_pps(); + const seq_parameter_set& sps = img->get_sps(); slice_segment_header* shdr = tctx->shdr; bool success = initialize_CABAC_at_slice_segment_start(tctx); @@ -5041,7 +5056,7 @@ first_slice_substream = false; - if (pps->tiles_enabled_flag) { + if (pps.tiles_enabled_flag) { initialize_CABAC_models(tctx); } } while (true);
View file
libde265-1.0.2.tar.gz/libde265/slice.h -> libde265-1.0.3.tar.gz/libde265/slice.h
Changed
@@ -82,6 +82,9 @@ PART_nRx2N = 7 }; +const char* part_mode_name(enum PartMode); + + enum PredMode { MODE_INTRA, MODE_INTER, MODE_SKIP @@ -142,6 +145,8 @@ int slice_index; // index through all slices in a picture (internal only) + const pic_parameter_set* pps; + char first_slice_segment_in_pic_flag; char no_output_of_prior_pics_flag;
View file
libde265-1.0.2.tar.gz/libde265/sps.cc -> libde265-1.0.3.tar.gz/libde265/sps.cc
Changed
@@ -226,13 +226,6 @@ separate_colour_plane_flag = 0; } - if (separate_colour_plane_flag) { - ChromaArrayType = 0; - } - else { - ChromaArrayType = chroma_format_idc; - } - if (chroma_format_idc<0 || chroma_format_idc>3) { errqueue->add_warning(DE265_WARNING_INVALID_CHROMA_FORMAT, false); @@ -272,6 +265,11 @@ READ_VLC_OFFSET(bit_depth_luma, uvlc, 8); READ_VLC_OFFSET(bit_depth_chroma,uvlc, 8); + if (bit_depth_luma > 16 || + bit_depth_chroma > 16) { + errqueue->add_warning(DE265_WARNING_SPS_HEADER_INVALID, false); + return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; + } READ_VLC_OFFSET(log2_max_pic_order_cnt_lsb, uvlc, 4); MaxPicOrderCntLsb = 1<<(log2_max_pic_order_cnt_lsb); @@ -458,13 +456,20 @@ } -de265_error seq_parameter_set::compute_derived_values() +de265_error seq_parameter_set::compute_derived_values(bool sanitize_values) { // --- compute derived values --- SubWidthC = SubWidthC_tab [chroma_format_idc]; SubHeightC = SubHeightC_tab[chroma_format_idc]; + if (separate_colour_plane_flag) { + ChromaArrayType = 0; + } + else { + ChromaArrayType = chroma_format_idc; + } + if (ChromaArrayType==0) { WinUnitX = 1; WinUnitY = 1; @@ -506,8 +511,35 @@ Log2MinTrafoSize = log2_min_transform_block_size; Log2MaxTrafoSize = log2_min_transform_block_size + log2_diff_max_min_transform_block_size; - if (max_transform_hierarchy_depth_inter > Log2CtbSizeY - Log2MinTrafoSize) { return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; } - if (max_transform_hierarchy_depth_intra > Log2CtbSizeY - Log2MinTrafoSize) { return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; } + if (max_transform_hierarchy_depth_inter > Log2CtbSizeY - Log2MinTrafoSize) { + if (sanitize_values) { + max_transform_hierarchy_depth_inter = Log2CtbSizeY - Log2MinTrafoSize; + } else { + fprintf(stderr,"SPS error: transform hierarchy depth (inter) > CTB size - min TB size\n"); + return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; + } + } + + if (max_transform_hierarchy_depth_intra > Log2CtbSizeY - Log2MinTrafoSize) { + if (sanitize_values) { + max_transform_hierarchy_depth_intra = Log2CtbSizeY - Log2MinTrafoSize; + } else { + fprintf(stderr,"SPS error: transform hierarchy depth (intra) > CTB size - min TB size\n"); + return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; + } + } + + + if (sanitize_values) { + if (max_transform_hierarchy_depth_inter < Log2CtbSizeY - Log2MaxTrafoSize) { + max_transform_hierarchy_depth_inter = Log2CtbSizeY - Log2MaxTrafoSize; + } + + if (max_transform_hierarchy_depth_intra < Log2CtbSizeY - Log2MaxTrafoSize) { + max_transform_hierarchy_depth_intra = Log2CtbSizeY - Log2MaxTrafoSize; + } + } + Log2MinPUSize = Log2MinCbSizeY-1; PicWidthInMinPUs = PicWidthInCtbsY << (Log2CtbSizeY - Log2MinPUSize); @@ -542,23 +574,28 @@ if (pic_width_in_luma_samples % MinCbSizeY != 0 || pic_height_in_luma_samples % MinCbSizeY != 0) { // TODO: warn that image size is coded wrong in bitstream (must be multiple of MinCbSizeY) + fprintf(stderr,"SPS error: CB alignment\n"); return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; } if (Log2MinTrafoSize > Log2MinCbSizeY) { + fprintf(stderr,"SPS error: TB > CB\n"); return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; } if (Log2MaxTrafoSize > libde265_min(Log2CtbSizeY,5)) { + fprintf(stderr,"SPS error: TB_max > 32 or CTB\n"); return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; } if (BitDepth_Y < 8 || BitDepth_Y > 16) { + fprintf(stderr,"SPS error: bitdepth Y not in [8;16]\n"); return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; } if (BitDepth_C < 8 || BitDepth_C > 16) { + fprintf(stderr,"SPS error: bitdepth C not in [8;16]\n"); return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; }
View file
libde265-1.0.2.tar.gz/libde265/sps.h -> libde265-1.0.3.tar.gz/libde265/sps.h
Changed
@@ -187,7 +187,7 @@ // --- derived values --- - de265_error compute_derived_values(); + de265_error compute_derived_values(bool sanitize_values = false); int BitDepth_Y; int QpBdOffset_Y;
View file
libde265-1.0.2.tar.gz/libde265/threads.cc -> libde265-1.0.3.tar.gz/libde265/threads.cc
Changed
@@ -24,7 +24,7 @@ #if defined(_MSC_VER) || defined(__MINGW32__) # include <malloc.h> -#else +#elif defined(HAVE_ALLOCA_H) # include <alloca.h> #endif @@ -310,6 +310,3 @@ } de265_mutex_unlock(&pool->mutex); } - -extern inline int de265_sync_sub_and_fetch(de265_sync_int* cnt, int n); -extern inline int de265_sync_add_and_fetch(de265_sync_int* cnt, int n);
View file
libde265-1.0.2.tar.gz/libde265/threads.h -> libde265-1.0.3.tar.gz/libde265/threads.h
Changed
@@ -33,6 +33,7 @@ #include <deque> #include <string> +#include <atomic> #ifndef _WIN32 #include <pthread.h> @@ -46,13 +47,6 @@ #include "../extra/win32cond.h" #if _MSC_VER > 1310 #include <intrin.h> -#else -extern "C" -{ - LONG __cdecl _InterlockedExchangeAdd(long volatile *Addend, LONG Value); -} -#pragma intrinsic (_InterlockedExchangeAdd) -#define InterlockedExchangeAdd _InterlockedExchangeAdd #endif typedef HANDLE de265_thread; @@ -77,30 +71,6 @@ void de265_cond_wait(de265_cond* c,de265_mutex* m); void de265_cond_signal(de265_cond* c); -typedef volatile long de265_sync_int; - -inline int de265_sync_sub_and_fetch(de265_sync_int* cnt, int n) -{ -#ifdef _WIN64 - return _InterlockedAdd(cnt, -n); -#elif _WIN32 - return _InterlockedExchangeAdd(cnt, -n) - n; -#else - return __sync_sub_and_fetch(cnt, n); -#endif -} - -inline int de265_sync_add_and_fetch(de265_sync_int* cnt, int n) -{ -#ifdef _WIN64 - return _InterlockedAdd(cnt, n); -#elif _WIN32 - return _InterlockedExchangeAdd(cnt, n) + n; -#else - return __sync_add_and_fetch(cnt, n); -#endif -} - class de265_progress_lock {
View file
libde265-1.0.2.tar.gz/libde265/transform.cc -> libde265-1.0.3.tar.gz/libde265/transform.cc
Changed
@@ -33,13 +33,13 @@ { logtrace(LogTransform,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> decode_quantization_parameters(int xC,int yC)=(%d,%d)\n", xC,yC); - pic_parameter_set* pps = &tctx->img->pps; - seq_parameter_set* sps = &tctx->img->sps; + const pic_parameter_set& pps = tctx->img->get_pps(); + const seq_parameter_set& sps = tctx->img->get_sps(); slice_segment_header* shdr = tctx->shdr; // top left pixel position of current quantization group - int xQG = xCUBase - (xCUBase & ((1<<pps->Log2MinCuQpDeltaSize)-1)); - int yQG = yCUBase - (yCUBase & ((1<<pps->Log2MinCuQpDeltaSize)-1)); + int xQG = xCUBase - (xCUBase & ((1<<pps.Log2MinCuQpDeltaSize)-1)); + int yQG = yCUBase - (yCUBase & ((1<<pps.Log2MinCuQpDeltaSize)-1)); logtrace(LogTransform,"QG: %d,%d\n",xQG,yQG); @@ -69,35 +69,35 @@ // first QG in CTB row ? - int ctbLSBMask = ((1<<sps->Log2CtbSizeY)-1); + int ctbLSBMask = ((1<<sps.Log2CtbSizeY)-1); bool firstInCTBRow = (xQG == 0 && ((yQG & ctbLSBMask)==0)); // first QG in slice ? TODO: a "firstQG" flag in the thread context would be faster int first_ctb_in_slice_RS = tctx->shdr->SliceAddrRS; - int SliceStartX = (first_ctb_in_slice_RS % sps->PicWidthInCtbsY) * sps->CtbSizeY; - int SliceStartY = (first_ctb_in_slice_RS / sps->PicWidthInCtbsY) * sps->CtbSizeY; + int SliceStartX = (first_ctb_in_slice_RS % sps.PicWidthInCtbsY) * sps.CtbSizeY; + int SliceStartY = (first_ctb_in_slice_RS / sps.PicWidthInCtbsY) * sps.CtbSizeY; bool firstQGInSlice = (SliceStartX == xQG && SliceStartY == yQG); // first QG in tile ? bool firstQGInTile = false; - if (pps->tiles_enabled_flag) { - if ((xQG & ((1 << sps->Log2CtbSizeY)-1)) == 0 && - (yQG & ((1 << sps->Log2CtbSizeY)-1)) == 0) + if (pps.tiles_enabled_flag) { + if ((xQG & ((1 << sps.Log2CtbSizeY)-1)) == 0 && + (yQG & ((1 << sps.Log2CtbSizeY)-1)) == 0) { - int ctbX = xQG >> sps->Log2CtbSizeY; - int ctbY = yQG >> sps->Log2CtbSizeY; + int ctbX = xQG >> sps.Log2CtbSizeY; + int ctbY = yQG >> sps.Log2CtbSizeY; - firstQGInTile = pps->is_tile_start_CTB(ctbX,ctbY); // TODO: this is slow + firstQGInTile = pps.is_tile_start_CTB(ctbX,ctbY); // TODO: this is slow } } if (firstQGInSlice || firstQGInTile || - (firstInCTBRow && pps->entropy_coding_sync_enabled_flag)) { + (firstInCTBRow && pps.entropy_coding_sync_enabled_flag)) { qPY_PRED = tctx->shdr->SliceQPY; } else { @@ -108,10 +108,10 @@ int qPYA,qPYB; if (tctx->img->available_zscan(xQG,yQG, xQG-1,yQG)) { - int xTmp = (xQG-1) >> sps->Log2MinTrafoSize; - int yTmp = (yQG ) >> sps->Log2MinTrafoSize; - int minTbAddrA = pps->MinTbAddrZS[xTmp + yTmp*sps->PicWidthInTbsY]; - int ctbAddrA = minTbAddrA >> (2 * (sps->Log2CtbSizeY-sps->Log2MinTrafoSize)); + int xTmp = (xQG-1) >> sps.Log2MinTrafoSize; + int yTmp = (yQG ) >> sps.Log2MinTrafoSize; + int minTbAddrA = pps.MinTbAddrZS[xTmp + yTmp*sps.PicWidthInTbsY]; + int ctbAddrA = minTbAddrA >> (2 * (sps.Log2CtbSizeY-sps.Log2MinTrafoSize)); if (ctbAddrA == tctx->CtbAddrInTS) { qPYA = tctx->img->get_QPY(xQG-1,yQG); } @@ -124,10 +124,10 @@ } if (tctx->img->available_zscan(xQG,yQG, xQG,yQG-1)) { - int xTmp = (xQG ) >> sps->Log2MinTrafoSize; - int yTmp = (yQG-1) >> sps->Log2MinTrafoSize; - int minTbAddrB = pps->MinTbAddrZS[xTmp + yTmp*sps->PicWidthInTbsY]; - int ctbAddrB = minTbAddrB >> (2 * (sps->Log2CtbSizeY-sps->Log2MinTrafoSize)); + int xTmp = (xQG ) >> sps.Log2MinTrafoSize; + int yTmp = (yQG-1) >> sps.Log2MinTrafoSize; + int minTbAddrB = pps.MinTbAddrZS[xTmp + yTmp*sps.PicWidthInTbsY]; + int ctbAddrB = minTbAddrB >> (2 * (sps.Log2CtbSizeY-sps.Log2MinTrafoSize)); if (ctbAddrB == tctx->CtbAddrInTS) { qPYB = tctx->img->get_QPY(xQG,yQG-1); } @@ -143,21 +143,21 @@ logtrace(LogTransform,"qPY_PRED = %d (%d, %d)\n",qPY_PRED, qPYA, qPYB); - int QPY = ((qPY_PRED + tctx->CuQpDelta + 52+2*sps->QpBdOffset_Y) % - (52 + sps->QpBdOffset_Y)) - sps->QpBdOffset_Y; + int QPY = ((qPY_PRED + tctx->CuQpDelta + 52+2*sps.QpBdOffset_Y) % + (52 + sps.QpBdOffset_Y)) - sps.QpBdOffset_Y; - tctx->qPYPrime = QPY + sps->QpBdOffset_Y; + tctx->qPYPrime = QPY + sps.QpBdOffset_Y; - int qPiCb = Clip3(-sps->QpBdOffset_C,57, QPY+pps->pic_cb_qp_offset + shdr->slice_cb_qp_offset + tctx->CuQpOffsetCb); - int qPiCr = Clip3(-sps->QpBdOffset_C,57, QPY+pps->pic_cr_qp_offset + shdr->slice_cr_qp_offset + tctx->CuQpOffsetCr); + int qPiCb = Clip3(-sps.QpBdOffset_C,57, QPY+pps.pic_cb_qp_offset + shdr->slice_cb_qp_offset + tctx->CuQpOffsetCb); + int qPiCr = Clip3(-sps.QpBdOffset_C,57, QPY+pps.pic_cr_qp_offset + shdr->slice_cr_qp_offset + tctx->CuQpOffsetCr); logtrace(LogTransform,"qPiCb:%d (%d %d), qPiCr:%d (%d %d)\n", - qPiCb, pps->pic_cb_qp_offset, shdr->slice_cb_qp_offset, - qPiCr, pps->pic_cr_qp_offset, shdr->slice_cr_qp_offset); + qPiCb, pps.pic_cb_qp_offset, shdr->slice_cb_qp_offset, + qPiCr, pps.pic_cr_qp_offset, shdr->slice_cr_qp_offset); int qPCb,qPCr; - if (sps->ChromaArrayType == CHROMA_420) { + if (sps.ChromaArrayType == CHROMA_420) { qPCb = table8_22(qPiCb); qPCr = table8_22(qPiCr); } @@ -168,8 +168,8 @@ //printf("q: %d %d\n",qPiCb, qPCb); - tctx->qPCbPrime = qPCb + sps->QpBdOffset_C; - tctx->qPCrPrime = qPCr + sps->QpBdOffset_C; + tctx->qPCbPrime = qPCb + sps.QpBdOffset_C; + tctx->qPCrPrime = qPCr + sps.QpBdOffset_C; /* printf("Q: %d (%d %d %d / %d %d) %d %d %d\n",QPY, @@ -234,8 +234,8 @@ // TODO: make this an accelerated function void cross_comp_pred(const thread_context* tctx, int32_t* residual, int nT) { - const int BitDepthC = tctx->img->sps.BitDepth_C; - const int BitDepthY = tctx->img->sps.BitDepth_Y; + const int BitDepthC = tctx->img->get_sps().BitDepth_C; + const int BitDepthY = tctx->img->get_sps().BitDepth_Y; for (int y=0;y<nT;y++) for (int x=0;x<nT;x++) { @@ -356,8 +356,8 @@ int nT, int cIdx, bool transform_skip_flag, bool intra, int rdpcmMode) { - seq_parameter_set* sps = &tctx->img->sps; - pic_parameter_set* pps = &tctx->img->pps; + const seq_parameter_set& sps = tctx->img->get_sps(); + const pic_parameter_set& pps = tctx->img->get_pps(); int qP; switch (cIdx) { @@ -387,12 +387,12 @@ // We explicitly include the case for sizeof(pixel_t)==1 so that the compiler // can optimize away a lot of code for 8-bit pixels. - const int bit_depth = ((sizeof(pixel_t)==1) ? 8 : sps->get_bit_depth(cIdx)); + const int bit_depth = ((sizeof(pixel_t)==1) ? 8 : sps.get_bit_depth(cIdx)); //assert(intra == (tctx->img->get_pred_mode(xT,yT)==MODE_INTRA)); int cuPredModeIntra = (tctx->img->get_pred_mode(xT,yT)==MODE_INTRA); - bool rotateCoeffs = (sps->range_extension.transform_skip_rotation_enabled_flag && + bool rotateCoeffs = (sps.range_extension.transform_skip_rotation_enabled_flag && nT == 4 && cuPredModeIntra); @@ -440,7 +440,7 @@ else { // (8.6.3) - int bdShift = (cIdx==0 ? sps->BitDepth_Y : sps->BitDepth_C) + Log2(nT) - 5; + int bdShift = (cIdx==0 ? sps.BitDepth_Y : sps.BitDepth_C) + Log2(nT) - 5; logtrace(LogTransform,"bdShift=%d\n",bdShift); @@ -449,7 +449,7 @@ // --- inverse quantization --- - if (sps->scaling_list_enable_flag==0) { + if (sps.scaling_list_enable_flag==0) { //const int m_x_y = 16; const int m_x_y = 1; @@ -477,7 +477,7 @@ else { const int offset = (1<<(bdShift-1)); - uint8_t* sclist; + const uint8_t* sclist; int matrixID = cIdx; if (!intra) { if (nT<32) { matrixID += 3; } @@ -485,10 +485,10 @@ } switch (nT) { - case 4: sclist = &pps->scaling_list.ScalingFactor_Size0[matrixID][0][0]; break; - case 8: sclist = &pps->scaling_list.ScalingFactor_Size1[matrixID][0][0]; break; - case 16: sclist = &pps->scaling_list.ScalingFactor_Size2[matrixID][0][0]; break; - case 32: sclist = &pps->scaling_list.ScalingFactor_Size3[matrixID][0][0]; break; + case 4: sclist = &pps.scaling_list.ScalingFactor_Size0[matrixID][0][0]; break; + case 8: sclist = &pps.scaling_list.ScalingFactor_Size1[matrixID][0][0]; break; + case 16: sclist = &pps.scaling_list.ScalingFactor_Size2[matrixID][0][0]; break; + case 32: sclist = &pps.scaling_list.ScalingFactor_Size3[matrixID][0][0]; break; default: assert(0); } @@ -521,7 +521,7 @@ logtrace(LogTransform,"*\n"); } - int bdShift2 = (cIdx==0) ? 20-sps->BitDepth_Y : 20-sps->BitDepth_C; + int bdShift2 = (cIdx==0) ? 20-sps.BitDepth_Y : 20-sps.BitDepth_C; logtrace(LogTransform,"bdShift2=%d\n",bdShift2); @@ -591,7 +591,7 @@ assert(rdpcmMode==0); - if (tctx->img->pps.range_extension.cross_component_prediction_enabled_flag) { + if (tctx->img->get_pps().range_extension.cross_component_prediction_enabled_flag) { // cross-component-prediction: transform to residual buffer and add in a separate step transform_coefficients_explicit(tctx, coeff, coeffStride, nT, trType,
View file
libde265-1.0.2.tar.gz/libde265/util.cc -> libde265-1.0.3.tar.gz/libde265/util.cc
Changed
@@ -126,6 +126,11 @@ va_end(va); fflush(stdout); } + +bool logdebug_enabled(enum LogModule module) +{ + return verbosity>=2; +} #endif #ifdef DE265_LOG_TRACE @@ -173,13 +178,14 @@ -void printBlk(const char* title, const int16_t* data, int blksize, int stride) +void printBlk(const char* title, const int16_t* data, int blksize, int stride, + const std::string& prefix) { - printf("%s:\n",title); + if (title) printf("%s%s:\n",prefix.c_str(),title); for (int y=0;y<blksize;y++) { //logtrace(LogTransform," "); - printf(" "); + printf("%s",prefix.c_str()); for (int x=0;x<blksize;x++) { //logtrace(LogTransform,"*%3d ", data[x+y*stride]); printf("%4d ", data[x+y*stride]); @@ -190,13 +196,14 @@ } -void printBlk(const char* title, const int32_t* data, int blksize, int stride) +void printBlk(const char* title, const int32_t* data, int blksize, int stride, + const std::string& prefix) { - printf("%s:\n",title); + if (title) printf("%s%s:\n",prefix.c_str(),title); for (int y=0;y<blksize;y++) { //logtrace(LogTransform," "); - printf(" "); + printf("%s",prefix.c_str()); for (int x=0;x<blksize;x++) { //logtrace(LogTransform,"*%3d ", data[x+y*stride]); printf("%4d ", data[x+y*stride]); @@ -207,13 +214,14 @@ } -void printBlk(const char* title, const uint8_t* data, int blksize, int stride) +void printBlk(const char* title, const uint8_t* data, int blksize, int stride, + const std::string& prefix) { - printf("%s:\n",title); + if (title) printf("%s%s:\n",prefix.c_str(),title); for (int y=0;y<blksize;y++) { //logtrace(LogTransform," "); - printf(" "); + printf("%s",prefix.c_str()); for (int x=0;x<blksize;x++) { //logtrace(LogTransform,"*%3d ", data[x+y*stride]); printf("%02x ", data[x+y*stride]);
View file
libde265-1.0.2.tar.gz/libde265/util.h -> libde265-1.0.3.tar.gz/libde265/util.h
Changed
@@ -21,11 +21,16 @@ #ifndef DE265_UTIL_H #define DE265_UTIL_H +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #ifndef _MSC_VER #include <inttypes.h> #endif #include <stdio.h> +#include <string> #include "libde265/de265.h" @@ -51,6 +56,9 @@ #define LIBDE265_CHECK_RESULT #endif +// Be careful with these alignment instructions. They only specify the alignment within +// a struct. But they cannot make sure that the base address of the struct has the same alignment +// when it is dynamically allocated. #define ALIGNED_32( var ) LIBDE265_DECLARE_ALIGNED( var, 32 ) #define ALIGNED_16( var ) LIBDE265_DECLARE_ALIGNED( var, 16 ) #define ALIGNED_8( var ) LIBDE265_DECLARE_ALIGNED( var, 8 ) @@ -70,8 +78,22 @@ namespace std { using namespace std::tr1; } #endif -#if __GNUC__ && GCC_VERSION < 40600 -// nullptr was introduced in gcc 4.6, a simple alias should be fine for our use case +#ifdef NEED_STD_MOVE_FALLBACK +// Provide fallback variant of "std::move" for older compilers with +// incomplete/broken C++11 support. +namespace std { + +template<typename _Tp> +inline typename std::remove_reference<_Tp>::type&& move(_Tp&& __t) { + return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); +} + +} // namespace std +#endif + +#ifdef NEED_NULLPTR_FALLBACK +// Compilers with partial/incomplete support for C++11 don't know about +// "nullptr". A simple alias should be fine for our use case. #define nullptr NULL #endif @@ -148,6 +170,7 @@ LogSymbols, LogCABAC, LogEncoder, + LogEncoderMetadata, NUMBER_OF_LogModules }; @@ -181,8 +204,10 @@ #ifdef DE265_LOG_DEBUG void logdebug(enum LogModule module, const char* string, ...); +bool logdebug_enabled(enum LogModule module); #else #define logdebug(a,b, ...) { } +inline bool logdebug_enabled(enum LogModule module) { return false; } #endif #ifdef DE265_LOG_TRACE @@ -194,9 +219,9 @@ void log2fh(FILE* fh, const char* string, ...); -void printBlk(const char* title,const int32_t* data, int blksize, int stride); -void printBlk(const char* title,const int16_t* data, int blksize, int stride); -void printBlk(const char* title,const uint8_t* data, int blksize, int stride); +void printBlk(const char* title,const int32_t* data, int blksize, int stride, const std::string& prefix=" "); +void printBlk(const char* title,const int16_t* data, int blksize, int stride, const std::string& prefix=" "); +void printBlk(const char* title,const uint8_t* data, int blksize, int stride, const std::string& prefix=" "); void debug_set_image_output(void (*)(const struct de265_image*, int slot)); void debug_show_image(const struct de265_image*, int slot);
View file
libde265-1.0.2.tar.gz/libde265/visualize.cc -> libde265-1.0.3.tar.gz/libde265/visualize.cc
Changed
@@ -92,7 +92,7 @@ { int yi = y + i; - if (yi < srcimg->sps.pic_height_in_luma_samples) { + if (yi < srcimg->get_sps().pic_height_in_luma_samples) { set_pixel(img,x,yi,stride,color,pixelSize); } } @@ -101,7 +101,7 @@ { int xi = x + i; - if (xi < srcimg->sps.pic_width_in_luma_samples) { + if (xi < srcimg->get_sps().pic_width_in_luma_samples) { set_pixel(img,xi,y,stride,color,pixelSize); } } @@ -152,7 +152,7 @@ { int dy = (slope*i+Sign(slope*i)*16)/32; int y = y0+w/2-dy; - if (y>=0 && y<srcimg->sps.pic_height_in_luma_samples) { + if (y>=0 && y<srcimg->get_sps().pic_height_in_luma_samples) { set_pixel(img, x0+i+w/2, y, stride, color, pixelSize); } } @@ -162,7 +162,7 @@ { int dx = (slope*i+Sign(slope*i)*16)/32; int x = x0+w/2-dx; - if (x>=0 && x<srcimg->sps.pic_width_in_luma_samples) { + if (x>=0 && x<srcimg->get_sps().pic_width_in_luma_samples) { set_pixel(img, x, y0+i+w/2, stride, color, pixelSize); } } @@ -292,20 +292,20 @@ tint_rect(img,stride, x0,y0,w,h, cols[predMode], pixelSize); } else if (what == PBMotionVectors) { - const MotionVectorSpec* mvi = srcimg->get_mv_info(x0,y0); + const PBMotion& mvi = srcimg->get_mv_info(x0,y0); int x = x0+w/2; int y = y0+h/2; - if (mvi->predFlag[0]) { + if (mvi.predFlag[0]) { draw_line(img,stride,0xFF0000,pixelSize, srcimg->get_width(), srcimg->get_height(), - x,y,x+mvi->mv[0].x,y+mvi->mv[0].y); + x,y,x+mvi.mv[0].x,y+mvi.mv[0].y); } - if (mvi->predFlag[1]) { + if (mvi.predFlag[1]) { draw_line(img,stride,0x00FF00,pixelSize, srcimg->get_width(), srcimg->get_height(), - x,y,x+mvi->mv[1].x,y+mvi->mv[1].y); + x,y,x+mvi.mv[1].x,y+mvi.mv[1].y); } } } @@ -314,11 +314,11 @@ void draw_tree_grid(const de265_image* srcimg, uint8_t* img, int stride, uint32_t color, int pixelSize, enum DrawMode what) { - const seq_parameter_set* sps = &srcimg->sps; - int minCbSize = sps->MinCbSizeY; + const seq_parameter_set& sps = srcimg->get_sps(); + int minCbSize = sps.MinCbSizeY; - for (int y0=0;y0<sps->PicHeightInMinCbsY;y0++) - for (int x0=0;x0<sps->PicWidthInMinCbsY;x0++) + for (int y0=0;y0<sps.PicHeightInMinCbsY;y0++) + for (int x0=0;x0<sps.PicWidthInMinCbsY;x0++) { int log2CbSize = srcimg->get_log2CbSize_cbUnits(x0,y0); if (log2CbSize==0) { @@ -456,16 +456,18 @@ LIBDE265_API void draw_Slices(const de265_image* img, uint8_t* dst, int stride, int pixelSize) { + const seq_parameter_set& sps = img->get_sps(); + // --- mark first CTB in slice (red - independent / green - dependent) --- - for (int ctby=0;ctby<img->sps.PicHeightInCtbsY;ctby++) - for (int ctbx=0;ctbx<img->sps.PicWidthInCtbsY;ctbx++) + for (int ctby=0;ctby<sps.PicHeightInCtbsY;ctby++) + for (int ctbx=0;ctbx<sps.PicWidthInCtbsY;ctbx++) { - const int blkw = img->sps.Log2CtbSizeY; + const int blkw = sps.Log2CtbSizeY; - int ctbAddrRS = ctby*img->sps.PicWidthInCtbsY + ctbx; + int ctbAddrRS = ctby*sps.PicWidthInCtbsY + ctbx; int prevCtbRS = -1; - if (ctbx>0 || ctby>0) { prevCtbRS = img->pps.CtbAddrTStoRS[ img->pps.CtbAddrRStoTS[ctbAddrRS] -1 ]; } + if (ctbx>0 || ctby>0) { prevCtbRS = img->get_pps().CtbAddrTStoRS[ img->get_pps().CtbAddrRStoTS[ctbAddrRS] -1 ]; } if (prevCtbRS<0 || img->get_SliceHeaderIndex_atIndex(ctbAddrRS) != @@ -483,8 +485,8 @@ int x1 = x + (ctbx<<blkw); int y1 = y + (ctby<<blkw); - if (x1<img->sps.pic_width_in_luma_samples && - y1<img->sps.pic_height_in_luma_samples) + if (x1<sps.pic_width_in_luma_samples && + y1<sps.pic_height_in_luma_samples) { set_pixel(dst,x1,y1,stride,fillcolor,pixelSize); } @@ -498,16 +500,16 @@ const uint32_t color = 0xff0000; - for (int ctby=0;ctby<img->sps.PicHeightInCtbsY;ctby++) - for (int ctbx=0;ctbx<img->sps.PicWidthInCtbsY;ctbx++) { + for (int ctby=0;ctby<sps.PicHeightInCtbsY;ctby++) + for (int ctbx=0;ctbx<sps.PicWidthInCtbsY;ctbx++) { if (ctbx>0 && (img->get_SliceHeaderIndexCtb(ctbx ,ctby) != img->get_SliceHeaderIndexCtb(ctbx-1,ctby))) { - int x = ctbx << img->sps.Log2CtbSizeY; - int y0 = ctby << img->sps.Log2CtbSizeY; + int x = ctbx << sps.Log2CtbSizeY; + int y0 = ctby << sps.Log2CtbSizeY; for (int y=y0; - (y<y0+(1<<img->sps.Log2CtbSizeY) && - y<img->sps.pic_height_in_luma_samples) ; + (y<y0+(1<<sps.Log2CtbSizeY) && + y<sps.pic_height_in_luma_samples) ; y++) { set_pixel(dst,x,y,stride,color,pixelSize); } @@ -515,16 +517,16 @@ } - for (int ctby=0;ctby<img->sps.PicHeightInCtbsY;ctby++) - for (int ctbx=0;ctbx<img->sps.PicWidthInCtbsY;ctbx++) { + for (int ctby=0;ctby<sps.PicHeightInCtbsY;ctby++) + for (int ctbx=0;ctbx<sps.PicWidthInCtbsY;ctbx++) { if (ctby>0 && (img->get_SliceHeaderIndexCtb(ctbx,ctby ) != img->get_SliceHeaderIndexCtb(ctbx,ctby-1))) { - int x0 = ctbx << img->sps.Log2CtbSizeY; - int y = ctby << img->sps.Log2CtbSizeY; + int x0 = ctbx << sps.Log2CtbSizeY; + int y = ctby << sps.Log2CtbSizeY; for (int x=x0 ; - (x<x0+(1<<img->sps.Log2CtbSizeY) && - x<img->sps.pic_width_in_luma_samples) ; + (x<x0+(1<<sps.Log2CtbSizeY) && + x<sps.pic_width_in_luma_samples) ; x++) { set_pixel(dst,x,y,stride,color,pixelSize); } @@ -538,18 +540,22 @@ { const uint32_t color = 0xffff00; - for (int tx=1;tx<img->pps.num_tile_columns;tx++) { - int x = img->pps.colBd[tx] << img->sps.Log2CtbSizeY; + const seq_parameter_set& sps = img->get_sps(); + const pic_parameter_set& pps = img->get_pps(); + + + for (int tx=1;tx<pps.num_tile_columns;tx++) { + int x = pps.colBd[tx] << sps.Log2CtbSizeY; - for (int y=0;y<img->sps.pic_height_in_luma_samples;y++) { + for (int y=0;y<sps.pic_height_in_luma_samples;y++) { set_pixel(dst,x,y,stride,color,pixelSize); } } - for (int ty=1;ty<img->pps.num_tile_rows;ty++) { - int y = img->pps.rowBd[ty] << img->sps.Log2CtbSizeY; + for (int ty=1;ty<pps.num_tile_rows;ty++) { + int y = pps.rowBd[ty] << sps.Log2CtbSizeY; - for (int x=0;x<img->sps.pic_width_in_luma_samples;x++) { + for (int x=0;x<sps.pic_width_in_luma_samples;x++) { set_pixel(dst,x,y,stride,color,pixelSize); } }
View file
libde265-1.0.2.tar.gz/libde265/vps.h -> libde265-1.0.3.tar.gz/libde265/vps.h
Changed
@@ -147,7 +147,7 @@ uint8_t vps_max_layer_id; // max value for nuh_layer_id in NALs int vps_num_layer_sets; // [1;1024], currently always 1 - std::vector<std::vector<bool> > layer_id_included_flag; // max size = [1024][64] + std::vector<std::vector<char> > layer_id_included_flag; // max size = [1024][64] // --- timing info ---
View file
libde265-1.0.2.tar.gz/libde265/x86/CMakeLists.txt -> libde265-1.0.3.tar.gz/libde265/x86/CMakeLists.txt
Changed
@@ -6,9 +6,9 @@ sse-motion.cc sse-motion.h sse-dct.h sse-dct.cc ) -add_library(x86 STATIC ${x86_sources}) +add_library(x86 OBJECT ${x86_sources}) -add_library(x86_sse STATIC ${x86_sse_sources}) +add_library(x86_sse OBJECT ${x86_sse_sources}) set(sse_flags "") @@ -16,7 +16,7 @@ set(sse_flags "${sse_flags} -msse4.1") endif() -target_link_libraries(x86 x86_sse) +set(X86_OBJECTS $<TARGET_OBJECTS:x86> $<TARGET_OBJECTS:x86_sse> PARENT_SCOPE) if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") SET_TARGET_PROPERTIES(x86 PROPERTIES COMPILE_FLAGS "-fPIC")
View file
libde265-1.0.2.tar.gz/libde265/x86/Makefile.in -> libde265-1.0.3.tar.gz/libde265/x86/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,8 +92,6 @@ @HAVE_VISIBILITY_TRUE@am__append_1 = -DHAVE_VISIBILITY @HAVE_VISIBILITY_TRUE@am__append_2 = -DHAVE_VISIBILITY subdir = libde265/x86 -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -94,6 +102,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -197,6 +206,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -249,6 +259,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -331,6 +342,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -371,7 +383,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libde265/x86/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libde265/x86/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -668,6 +679,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
View file
libde265-1.0.2.tar.gz/libde265/x86/sse-motion.cc -> libde265-1.0.3.tar.gz/libde265/x86/sse-motion.cc
Changed
@@ -19,6 +19,10 @@ * along with libde265. If not, see <http://www.gnu.org/licenses/>. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <stdio.h> #include <emmintrin.h> #include <tmmintrin.h> // SSSE3
View file
libde265-1.0.2.tar.gz/ltmain.sh -> libde265-1.0.3.tar.gz/ltmain.sh
Changed
@@ -1,9 +1,12 @@ +#! /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.2 +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# 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. @@ -23,881 +26,2112 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see <http://www.gnu.org/licenses/>. -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --no-warn don't display warning messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to <bug-libtool@gnu.org>. -# GNU libtool home page: <http://www.gnu.org/software/libtool/>. -# General help using GNU software: <http://www.gnu.org/gethelp/>. PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" -TIMESTAMP="" -package_revision=1.3337 +VERSION="2.4.6 Debian-2.4.6-0.1" +package_revision=2.4.6 -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + +## ------ ## +## 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 <http://www.gnu.org/licenses/>. + +# 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=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # 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 + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +# 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 \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + 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 -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL -$lt_unset CDPATH +# 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. ## +## ------------------------- ## -# 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" +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + : ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${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}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation +# 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' -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation +# 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' -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation +# 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" -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' +## ----------------- ## +## 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. -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} +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. -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done +# 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=: - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi +# 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 - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} +# 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: -func_dirname_and_basename "$progpath" -progname=$func_basename_result +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` -# Make sure we have an absolute path for reexecution: +# Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) - progdir=$func_dirname_result + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" + progpath=$progdir/$progname ;; *) - save_IFS="$IFS" + _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do - IFS="$save_IFS" + IFS=$_G_IFS test -x "$progdir/$progname" && break done - IFS="$save_IFS" + IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" + progpath=$progdir/$progname ;; esac -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# 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. -# Standard options: opt_dry_run=false -opt_help=false opt_quiet=false opt_verbose=false -opt_warning=: -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +# 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='[0m' + tc_bold='[1m'; tc_standout='[7m' + tc_red='[31m'; tc_green='[32m' + tc_blue='[34m'; tc_cyan='[36m' + 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=: } -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () + +## ----------------- ## +## 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 () { - $opt_verbose && func_echo ${1+"$@"} + $debug_cmd - # 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: - : + '"$_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... + +# func_echo_all ARG... +# -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } -# func_error arg... + +# 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 () { - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} + $debug_cmd -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + $require_term_colors - # bash bug again: - : + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } -# func_fatal_error arg... + +# func_fatal_error ARG... +# ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { - func_error ${1+"$@"} - exit $EXIT_FAILURE -} + $debug_cmd -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" + func_error "$*" + exit $EXIT_FAILURE } -help="Try \`$progname --help' for more information." ## default -# func_grep expression filename +# 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_mkdir_p directory-path +# 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 () { - my_directory_path="$1" - my_dir_list= + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; + # 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 "$my_directory_path"; do + 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. - my_dir_list="$my_directory_path:$my_dir_list" + _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac + case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes + 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 "$my_dir" 2>/dev/null || : + $MKDIR "$_G_dir" 2>/dev/null || : done - IFS="$save_mkdir_p_IFS" + IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" fi } -# func_mktempdir [string] +# func_mktempdir [BASENAME] +# ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. +# given, BASENAME is the basename for that directory. func_mktempdir () { - my_template="${TMPDIR-/tmp}/${1-$progname}" + $debug_cmd - if test "$opt_dry_run" = ":"; then + _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 - my_tmpdir="${my_template}-$$" + _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` - if test ! -d "$my_tmpdir"; then + if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" + _G_tmpdir=$_G_template-${RANDOM-0}$$ - save_mktempdir_umask=`umask` + func_mktempdir_umask=`umask` umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi - $ECHO "$my_tmpdir" + $ECHO "$_G_tmpdir" } -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () +# 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 () { - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac + $debug_cmd - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + # 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. ;; *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + # 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_expand arg +# 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 *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) - my_arg="$1" ;; + _G_arg=$1 ;; esac - case $my_arg in + 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. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" + _G_arg=\"$_G_arg\" ;; esac - func_quote_for_expand_result="$my_arg" + func_quote_for_expand_result=$_G_arg } -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# 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 () { - my_cmd="$1" - my_fail_exp="${2-:}" + $debug_cmd - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" fi - fi + } } -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# 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 () { - my_cmd="$1" - my_fail_exp="${2-:}" + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" + $opt_quiet || { + func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" + $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 - fi + } } + # func_tr_sh +# ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac + $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_version -# Echo version message to standard output and exit. -func_version () +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () { - $opt_debug + $debug_cmd - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? + $opt_verbose && func_echo "$*" + + : } -# func_usage -# Echo short help message to standard output and exit. -func_usage () + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () { - $opt_debug + $debug_cmd - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? + $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 <http://www.gnu.org/licenses/>. + +# 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_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. + +# 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 '<hooked_function_name>_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 () { - $opt_debug + $debug_cmd - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi + func_usage_message + $ECHO "$long_help_message" + exit 0 } -# func_missing_arg argname + +# func_missing_arg ARGNAME +# ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { - $opt_debug + $debug_cmd - func_error "missing argument for $1." + func_error "Missing argument for '$1'." exit_cmd=exit } -# func_split_short_opt shortopt +# 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. -func_split_short_opt () +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 () { - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + $debug_cmd - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () { - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' + $debug_cmd - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} -exit_cmd=: +# 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 $? +} -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" +# 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: -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () { - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation + $debug_cmd -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () -{ - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation + _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_arith arithmetic-term... -func_arith () +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () { - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation + $debug_cmd + $warning_func ${1+"$@"} +} -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation +## ---------------- ## +## 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 +" -# func_lo2o object -func_lo2o () +# Additional text appended to 'usage_message' in response to '--help'. +func_help () { - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation + $debug_cmd + func_usage_message + $ECHO "$long_help_message -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation +MODE must be one of the following: + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname (GNU libtool) 2.4.6 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to <bug-libtool@gnu.org>. +GNU libtool home page: <http://www.gnu.org/s/libtool/>. +General help using GNU software: <http://www.gnu.org/gethelp/>." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' -# func_fatal_configuration arg... + # 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_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." + 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 () { @@ -915,17 +2149,19 @@ exit $? } + # func_features +# ------------- # Display the features supported by this script. func_features () { echo "host: $host" - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" @@ -934,314 +2170,350 @@ exit $? } -# func_enable_tag tagname + +# 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" + # 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 + 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) ;; + # 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" + 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 + # 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 + 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 + 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 + 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 + fi - exit $EXIT_MISMATCH - fi + exit $EXIT_MISMATCH + fi } -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac +# 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= -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false + # 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 -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. -{ - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; - - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; - - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; - esac - done - # Validate options: +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi + # 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" + ;; - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - $opt_help || { - # Sanity checks first: - func_check_version_match + # 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 - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE +# 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 - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } + # 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." + } - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE + # 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. +# True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 + $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. +# 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. +# fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no @@ -1249,13 +2521,13 @@ for lalib_p_l in 1 2 3 4 do read lalib_p_line - case "$lalib_p_line" in + case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi - test "$lalib_p" = yes + test yes = "$lalib_p" } # func_ltwrapper_script_p file @@ -1264,7 +2536,8 @@ # determined imposters. func_ltwrapper_script_p () { - func_lalib_p "$1" + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file @@ -1289,7 +2562,7 @@ { 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_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file @@ -1308,11 +2581,13 @@ # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { - $opt_debug + $debug_cmd + save_ifs=$IFS; IFS='~' for cmd in $1; do - IFS=$save_ifs + IFS=$sp$nl eval cmd=\"$cmd\" + IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs @@ -1324,10 +2599,11 @@ # 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. +# 'FILE.' does not work on cygwin managed mounts. func_source () { - $opt_debug + $debug_cmd + case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; @@ -1354,10 +2630,10 @@ # store the result into func_replace_sysroot_result. func_replace_sysroot () { - case "$lt_sysroot:$1" in + case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" + func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. @@ -1374,7 +2650,8 @@ # arg is usually of the form 'gcc ...' func_infer_tag () { - $opt_debug + $debug_cmd + if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do @@ -1393,7 +2670,7 @@ 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`" + 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. @@ -1418,7 +2695,7 @@ # 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'" + func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi @@ -1434,15 +2711,15 @@ # but don't create it if we're doing a dry run. func_write_libtool_object () { - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' else write_lobj=none fi - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' else write_oldobj=none fi @@ -1450,7 +2727,7 @@ $opt_dry_run || { cat >${write_libobj}T <<EOF # $write_libobj - a libtool object file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. @@ -1462,7 +2739,7 @@ non_pic_object=$write_oldobj EOF - $MV "${write_libobj}T" "${write_libobj}" + $MV "${write_libobj}T" "$write_libobj" } } @@ -1482,8 +2759,9 @@ # be empty on error (or when ARG is empty) func_convert_core_file_wine_to_w32 () { - $opt_debug - func_convert_core_file_wine_to_w32_result="$1" + $debug_cmd + + func_convert_core_file_wine_to_w32_result=$1 if test -n "$1"; then # Unfortunately, winepath does not exit with a non-zero error code, so we # are forced to check the contents of stdout. On the other hand, if the @@ -1491,9 +2769,9 @@ # *an error message* to stdout. So we must check for both error code of # zero AND non-empty stdout, which explains the odd construction: func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` + $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi @@ -1514,18 +2792,19 @@ # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { - $opt_debug + $debug_cmd + # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" + 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 -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" + 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 @@ -1554,7 +2833,8 @@ # environment variable; do not put it in $PATH. func_cygpath () { - $opt_debug + $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 @@ -1563,7 +2843,7 @@ fi else func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath @@ -1574,10 +2854,11 @@ # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { - $opt_debug + $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 "$lt_sed_naive_backslashify"` + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 @@ -1588,13 +2869,14 @@ # func_to_host_file_result to ARG1). func_convert_file_check () { - $opt_debug - if test -z "$2" && test -n "$1" ; then + $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 " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: - func_to_host_file_result="$1" + func_to_host_file_result=$1 fi } # end func_convert_file_check @@ -1606,10 +2888,11 @@ # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { - $opt_debug + $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 " '$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. @@ -1618,7 +2901,7 @@ func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else - func_to_host_path_result="$3" + func_to_host_path_result=$3 fi fi } @@ -1630,9 +2913,10 @@ # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { - $opt_debug + $debug_cmd + case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" + $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in @@ -1646,7 +2930,7 @@ ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## -# invoked via `$to_host_file_cmd ARG' +# 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. @@ -1657,7 +2941,8 @@ # in func_to_host_file_result. func_to_host_file () { - $opt_debug + $debug_cmd + $to_host_file_cmd "$1" } # end func_to_host_file @@ -1669,7 +2954,8 @@ # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { - $opt_debug + $debug_cmd + case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 @@ -1687,7 +2973,7 @@ # Copy ARG to func_to_host_file_result. func_convert_file_noop () { - func_to_host_file_result="$1" + func_to_host_file_result=$1 } # end func_convert_file_noop @@ -1698,11 +2984,12 @@ # func_to_host_file_result. func_convert_file_msys_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $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" + func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1714,8 +3001,9 @@ # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $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. @@ -1731,11 +3019,12 @@ # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $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" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1747,12 +3036,13 @@ # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { - $opt_debug - func_to_host_file_result="$1" + $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" + func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1765,13 +3055,14 @@ # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { - $opt_debug - func_to_host_file_result="$1" + $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" + func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1781,7 +3072,7 @@ ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# -# invoked via `$to_host_path_cmd ARG' +# 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. @@ -1805,10 +3096,11 @@ to_host_path_cmd= func_init_to_host_path_cmd () { - $opt_debug + $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}" + to_host_path_cmd=func_convert_path_$func_stripname_result fi } @@ -1818,7 +3110,8 @@ # in func_to_host_path_result. func_to_host_path () { - $opt_debug + $debug_cmd + func_init_to_host_path_cmd $to_host_path_cmd "$1" } @@ -1829,7 +3122,7 @@ # Copy ARG to func_to_host_path_result. func_convert_path_noop () { - func_to_host_path_result="$1" + func_to_host_path_result=$1 } # end func_convert_path_noop @@ -1840,8 +3133,9 @@ # func_to_host_path_result. func_convert_path_msys_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $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 ';.'; @@ -1849,7 +3143,7 @@ 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_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" @@ -1863,8 +3157,9 @@ # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" @@ -1883,14 +3178,15 @@ # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $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_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" @@ -1904,15 +3200,16 @@ # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { - $opt_debug - func_to_host_path_result="$1" + $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_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" @@ -1927,8 +3224,9 @@ # func_to_host_file_result. func_convert_path_nix_to_cygwin () { - $opt_debug - func_to_host_path_result="$1" + $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 @@ -1937,7 +3235,7 @@ 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_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" @@ -1946,13 +3244,31 @@ # 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 () { - $opt_debug + $debug_cmd + # Get the compilation command and the source file. base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" + srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal @@ -1965,12 +3281,12 @@ case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile - lastarg="$arg" + lastarg=$arg arg_mode=normal ;; target ) - libobj="$arg" + libobj=$arg arg_mode=normal continue ;; @@ -1980,7 +3296,7 @@ case $arg in -o) test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" + func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; @@ -2009,12 +3325,12 @@ func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for arg in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_append_quoted lastarg "$arg" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result @@ -2027,8 +3343,8 @@ # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # - lastarg="$srcfile" - srcfile="$arg" + lastarg=$srcfile + srcfile=$arg ;; esac # case $arg ;; @@ -2043,13 +3359,13 @@ func_fatal_error "you must specify an argument for -Xcompile" ;; target) - func_fatal_error "you must specify a target with \`-o'" + 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" + libobj=$func_basename_result } ;; esac @@ -2069,7 +3385,7 @@ case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) - func_fatal_error "cannot determine name of library object from \`$libobj'" + func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac @@ -2078,8 +3394,8 @@ for arg in $later; do case $arg in -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; @@ -2105,17 +3421,17 @@ 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_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 + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" @@ -2127,16 +3443,16 @@ pic_mode=default ;; esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + 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 "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" + 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 @@ -2145,12 +3461,12 @@ # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then + 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 "$need_locks" = warn; then + elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: @@ -2158,7 +3474,7 @@ 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 +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." @@ -2180,11 +3496,11 @@ qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile - if test "$pic_mode" != no; then + if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code @@ -2201,7 +3517,7 @@ func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - if test "$need_locks" = warn && + if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: @@ -2212,7 +3528,7 @@ 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 +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." @@ -2228,20 +3544,20 @@ fi # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then + 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 "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then + 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 "$compiler_c_o" = yes; then + if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi @@ -2250,7 +3566,7 @@ func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - if test "$need_locks" = warn && + if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: @@ -2261,7 +3577,7 @@ 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 +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." @@ -2281,7 +3597,7 @@ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked - if test "$need_locks" != no; then + if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi @@ -2291,7 +3607,7 @@ } $opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () @@ -2311,7 +3627,7 @@ 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 +(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 @@ -2330,16 +3646,16 @@ -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 + -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 +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'." +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." ;; execute) @@ -2352,7 +3668,7 @@ -dlopen FILE add the directory containing FILE to the library path -This mode sets the library path environment variable according to \`-dlopen' +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 @@ -2371,7 +3687,7 @@ 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." +the '--dry-run' option if you just want to see what would be executed." ;; install) @@ -2381,7 +3697,7 @@ Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. +either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: @@ -2407,7 +3723,7 @@ -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 + -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 @@ -2421,7 +3737,8 @@ -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 + -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 @@ -2441,20 +3758,20 @@ -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. +All other options (arguments beginning with '-') are ignored. -Every other argument is treated as a filename. Files ending in \`.la' are +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 +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 '.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 +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; @@ -2465,7 +3782,7 @@ 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 +(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. @@ -2473,17 +3790,17 @@ ;; *) - func_fatal_help "invalid operation mode \`$opt_mode'" + func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo - $ECHO "Try \`$progname --help' for more information about other modes." + $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 + if test : = "$opt_help"; then func_mode_help else { @@ -2491,7 +3808,7 @@ for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do @@ -2499,7 +3816,7 @@ func_mode_help done } | - sed '1d + $SED '1d /^When reporting/,/^Report/{ H d @@ -2516,16 +3833,17 @@ # func_mode_execute arg... func_mode_execute () { - $opt_debug + $debug_cmd + # The first argument is the command name. - cmd="$nonopt" + 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" + || func_fatal_help "'$file' is not a file" dir= case $file in @@ -2535,7 +3853,7 @@ # 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" + || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= @@ -2546,18 +3864,18 @@ 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'" + func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." - dir="$func_dirname_result" + 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'" + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; @@ -2565,18 +3883,18 @@ *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." - dir="$func_dirname_result" + dir=$func_dirname_result ;; *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + 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" + test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then @@ -2588,7 +3906,7 @@ # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. - libtool_execute_magic="$magic" + libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= @@ -2601,12 +3919,12 @@ if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. - file="$progdir/$program" + 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" + file=$progdir/$program fi ;; esac @@ -2614,7 +3932,15 @@ func_append_quoted args "$file" done - if test "X$opt_dry_run" = Xfalse; then + 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" @@ -2631,25 +3957,18 @@ done # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS + exec_cmd=\$cmd$args fi } -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { - $opt_debug + $debug_cmd + libs= libdirs= admincmds= @@ -2663,11 +3982,11 @@ if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else - func_warning "\`$opt' is not a valid libtool archive" + func_warning "'$opt' is not a valid libtool archive" fi else - func_fatal_error "invalid argument \`$opt'" + func_fatal_error "invalid argument '$opt'" fi done @@ -2682,12 +4001,12 @@ # Remove sysroot references if $opt_dry_run; then for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + 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 \ + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done @@ -2712,7 +4031,7 @@ fi # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS + $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" @@ -2723,27 +4042,27 @@ 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 "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 " - 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 " - 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" + $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'" + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo @@ -2762,18 +4081,20 @@ exit $EXIT_SUCCESS } -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { - $opt_debug + $debug_cmd + # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then + case $nonopt in *shtool*) :;; *) false;; esac + then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " @@ -2800,7 +4121,7 @@ opts= prev= install_type= - isdir=no + isdir=false stripme= no_mode=: for arg @@ -2813,7 +4134,7 @@ fi case $arg in - -d) isdir=yes ;; + -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg @@ -2831,7 +4152,7 @@ *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi @@ -2856,7 +4177,7 @@ func_fatal_help "you must specify an install program" test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" + func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else @@ -2878,19 +4199,19 @@ dest=$func_stripname_result # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" + 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" + func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; @@ -2899,7 +4220,7 @@ case $file in *.lo) ;; *) - func_fatal_help "\`$destdir' must be an absolute directory name" + func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done @@ -2908,7 +4229,7 @@ # This variable tells wrapper scripts just to set variables rather # than running their programs. - libtool_install_magic="$magic" + libtool_install_magic=$magic staticlibs= future_libdirs= @@ -2928,7 +4249,7 @@ # 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" + || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= @@ -2950,7 +4271,7 @@ fi func_dirname "$file" "/" "" - dir="$func_dirname_result" + dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then @@ -2964,7 +4285,7 @@ # 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" + 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. @@ -2973,29 +4294,36 @@ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi - func_warning "relinking \`$file'" + func_warning "relinking '$file'" func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + '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" + realname=$1 shift - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T + 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" + tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) - tstripme="" + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= ;; esac ;; @@ -3006,7 +4334,7 @@ if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on + # 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 @@ -3017,14 +4345,14 @@ fi # Do each command in the postinstall commands. - lib="$destdir/$realname" + 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 + name=$func_basename_result + instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. @@ -3036,11 +4364,11 @@ # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then - destfile="$destdir/$destname" + destfile=$destdir/$destname else func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" + destfile=$func_basename_result + destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. @@ -3050,11 +4378,11 @@ staticdest=$func_lo2o_result ;; *.$objext) - staticdest="$destfile" + staticdest=$destfile destfile= ;; *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" + func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac @@ -3063,7 +4391,7 @@ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result @@ -3075,23 +4403,23 @@ *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then - destfile="$destdir/$destname" + destfile=$destdir/$destname else func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" + 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="" + stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result - stripped_ext=".exe" + stripped_ext=.exe fi ;; esac @@ -3119,19 +4447,19 @@ # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" + func_fatal_error "invalid libtool wrapper script '$wrapper'" - finalize=yes + 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'` ### testsuite: skip nested quoting test + 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=no + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false fi done @@ -3139,29 +4467,29 @@ func_source "$wrapper" outputname= - if test "$fast_install" = no && test -n "$relink_command"; then + if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { - if test "$finalize" = yes; then + if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" + file=$func_basename_result + outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - $opt_silent || { + $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" + func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi - file="$outputname" + file=$outputname else - func_warning "cannot relink \`$file'" + func_warning "cannot relink '$file'" fi } else @@ -3198,10 +4526,10 @@ for file in $staticlibs; do func_basename "$file" - name="$func_basename_result" + name=$func_basename_result # Set up the ranlib parameters. - oldlib="$destdir/$name" + oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result @@ -3216,18 +4544,18 @@ done test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$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' + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } -test "$opt_mode" = install && func_mode_install ${1+"$@"} +test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p @@ -3235,16 +4563,17 @@ # a dlpreopen symbol table. func_generate_dlsyms () { - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + $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 "$dlself" != no; then + 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" + my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi @@ -3255,7 +4584,7 @@ "") ;; *.c) # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" + nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" @@ -3263,34 +4592,36 @@ func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ +/* $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)) +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#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__) +#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 "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" @@ -3298,7 +4629,7 @@ 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'" + 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 @@ -3318,10 +4649,10 @@ # Prepare the list of exported symbols if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" + 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"' + 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"' @@ -3331,7 +4662,7 @@ } else $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + 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 @@ -3345,22 +4676,22 @@ fi for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" + func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" - name="$func_basename_result" + 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="" + 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 + if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" + dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen <import library>. $sharedlib_from_linklib_cmd "$dlprefile" @@ -3368,7 +4699,7 @@ fi fi $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then + if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" @@ -3424,6 +4755,11 @@ 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. */ @@ -3432,11 +4768,30 @@ void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; +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 }," +{ {\"$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) @@ -3478,9 +4833,7 @@ *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi + $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; @@ -3497,10 +4850,10 @@ 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"' + 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" + symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then @@ -3518,7 +4871,7 @@ esac ;; *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" + func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else @@ -3532,6 +4885,32 @@ 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' # @@ -3541,8 +4920,9 @@ # Despite the name, also deal with 64 bit binaries. func_win32_libid () { - $opt_debug - win32_libid_type="unknown" + $debug_cmd + + win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import @@ -3552,16 +4932,29 @@ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' + 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, + s|.*|import| p q } }'` + ;; + esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; @@ -3593,7 +4986,8 @@ # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { - $opt_debug + $debug_cmd + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } @@ -3610,7 +5004,8 @@ # specified import library. func_cygming_dll_for_implib_fallback_core () { - $opt_debug + $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"':/{ @@ -3646,8 +5041,8 @@ /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is + # 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 @@ -3658,30 +5053,6 @@ $SED -e '/^\./d;/^.\./d;q' } -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified @@ -3695,16 +5066,17 @@ # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then + $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 + 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="" + sharedlib_from_linklib_result= fi } @@ -3712,10 +5084,11 @@ # func_extract_an_archive dir oldlib func_extract_an_archive () { - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then + $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" @@ -3724,7 +5097,7 @@ fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then + 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 @@ -3738,22 +5111,23 @@ # func_extract_archives gentop oldlib ... func_extract_archives () { - $opt_debug - my_gentop="$1"; shift + $debug_cmd + + my_gentop=$1; shift my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" + 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" ;; + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" - my_xlib="$func_basename_result" + my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in @@ -3765,7 +5139,7 @@ esac done extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" @@ -3778,22 +5152,23 @@ cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` + 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}" + 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}" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_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 @@ -3815,7 +5190,7 @@ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done - func_extract_archives_result="$my_oldobjs" + func_extract_archives_result=$my_oldobjs } @@ -3830,7 +5205,7 @@ # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is +# will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () @@ -3841,7 +5216,7 @@ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. @@ -3898,9 +5273,9 @@ # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on +# /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 which match +# (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and @@ -3933,7 +5308,7 @@ # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } @@ -3944,7 +5319,7 @@ lt_dump_args_N=1; for lt_arg do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } @@ -3958,7 +5333,7 @@ *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} @@ -3968,7 +5343,7 @@ *) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} @@ -4043,13 +5418,13 @@ test -n \"\$absdir\" && thisdir=\"\$absdir\" " - if test "$fast_install" = yes; then + 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\`; \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" @@ -4066,7 +5441,7 @@ if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else - $ECHO \"\$relink_command_output\" >&2 + \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi @@ -4101,7 +5476,7 @@ fi # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + 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\" @@ -4121,7 +5496,7 @@ fi else # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$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 @@ -4140,7 +5515,7 @@ cat <<EOF /* $cwrappersource - temporary wrapper executable for $objdir/$outputname - Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION + Generated by $PROGRAM (GNU $PACKAGE) $VERSION The $output program cannot be directly executed until all the libtool libraries that it depends on are installed. @@ -4175,47 +5550,45 @@ #include <fcntl.h> #include <sys/stat.h> +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + /* declarations of non-ANSI functions */ -#if defined(__MINGW32__) +#if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif -#elif defined(__CYGWIN__) +#elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif -/* #elif defined (other platforms) ... */ +/* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) +#if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) +#elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv -#elif defined(__CYGWIN__) +#elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ +/* #elif defined other platforms ... */ #endif -#if defined(PATH_MAX) +#if defined PATH_MAX # define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) +#elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 @@ -4234,8 +5607,8 @@ # define PATH_SEPARATOR ':' #endif -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 @@ -4268,10 +5641,10 @@ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ + if (stale) { free (stale); stale = 0; } \ } while (0) -#if defined(LT_DEBUGWRAPPER) +#if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; @@ -4300,11 +5673,16 @@ EOF cat <<EOF -volatile const char * MAGIC_EXE = "$magic_exe"; +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) +# define externally_visible volatile +#else +# define externally_visible __attribute__((externally_visible)) volatile +#endif +externally_visible const char * MAGIC_EXE = "$magic_exe"; const char * LIB_PATH_VARNAME = "$shlibpath_var"; EOF - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then func_to_host_path "$temp_rpath" cat <<EOF const char * LIB_PATH_VALUE = "$func_to_host_path_result"; @@ -4328,7 +5706,7 @@ EOF fi - if test "$fast_install" = yes; then + if test yes = "$fast_install"; then cat <<EOF const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ EOF @@ -4357,12 +5735,12 @@ char *actual_cwrapper_name; char *target_name; char *lt_argv_zero; - intptr_t rval = 127; + int rval = 127; int i; program_name = (char *) xstrdup (base_name (argv[0])); - newargz = XMALLOC (char *, argc + 1); + newargz = XMALLOC (char *, (size_t) argc + 1); /* very simple arg parsing; don't want to rely on getopt * also, copy all non cwrapper options to newargz, except @@ -4371,10 +5749,10 @@ newargc=0; for (i = 1; i < argc; i++) { - if (strcmp (argv[i], dumpscript_opt) == 0) + if (STREQ (argv[i], dumpscript_opt)) { EOF - case "$host" in + case $host in *mingw* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" @@ -4385,12 +5763,12 @@ lt_dump_script (stdout); return 0; } - if (strcmp (argv[i], debug_opt) == 0) + if (STREQ (argv[i], debug_opt)) { lt_debug = 1; continue; } - if (strcmp (argv[i], ltwrapper_option_prefix) == 0) + if (STREQ (argv[i], ltwrapper_option_prefix)) { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and @@ -4413,7 +5791,7 @@ EOF cat <<EOF /* The GNU banner must be the first non-error debug message */ - lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); + lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); EOF cat <<"EOF" lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); @@ -4524,7 +5902,7 @@ cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ @@ -4569,7 +5947,7 @@ { const char *base; -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +#if defined HAVE_DOS_BASED_FILE_SYSTEM /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; @@ -4628,7 +6006,7 @@ const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; - int tmp_len; + size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", @@ -4638,7 +6016,7 @@ return NULL; /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +#if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); @@ -4656,7 +6034,7 @@ return concat_name; XFREE (concat_name); } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +#if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif @@ -4679,7 +6057,7 @@ for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; - p_len = q - p; + p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { @@ -4798,7 +6176,7 @@ if (patlen <= len) { str += len - patlen; - if (strcmp (str, pat) == 0) + if (STREQ (str, pat)) *str = '\0'; } return str; @@ -4863,7 +6241,7 @@ char *str = xstrdup (value); setenv (name, str, 1); #else - int len = strlen (name) + 1 + strlen (value) + 1; + 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) @@ -4880,8 +6258,8 @@ char *new_value; if (orig_value && *orig_value) { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); + 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) { @@ -4912,10 +6290,10 @@ { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { - new_value[len-1] = '\0'; + new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); @@ -5082,27 +6460,47 @@ # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { - $opt_debug + $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 () { - $opt_debug + $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 - # which system we are compiling for in order to pass an extra + # 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 which has undefined symbols, in which case not + # 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. @@ -5146,10 +6544,11 @@ module=no no_install=no objs= + os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no - preload=no + preload=false prev= prevarg= release= @@ -5161,7 +6560,7 @@ vinfo= vinfo_number=no weak_libs= - single_module="${wl}-single_module" + single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. @@ -5169,15 +6568,15 @@ do case $arg in -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" + 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 "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + 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 @@ -5210,7 +6609,7 @@ # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do - arg="$1" + arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result @@ -5227,21 +6626,21 @@ case $prev in bindir) - bindir="$arg" + bindir=$arg prev= continue ;; dlfiles|dlprefiles) - if test "$preload" = no; then + $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" - preload=yes - fi + preload=: + } case $arg in *.la | *.lo) ;; # We handle these cases below. force) - if test "$dlself" = no; then + if test no = "$dlself"; then dlself=needless export_dynamic=yes fi @@ -5249,9 +6648,9 @@ continue ;; self) - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless @@ -5261,7 +6660,7 @@ continue ;; *) - if test "$prev" = dlfiles; then + if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" @@ -5272,14 +6671,14 @@ esac ;; expsyms) - export_symbols="$arg" + export_symbols=$arg test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" + || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) - export_symbols_regex="$arg" + export_symbols_regex=$arg prev= continue ;; @@ -5297,7 +6696,13 @@ continue ;; inst_prefix) - inst_prefix_dir="$arg" + 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 ;; @@ -5321,21 +6726,21 @@ if test -z "$pic_object" || test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" + 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" + xdir=$func_dirname_result - if test "$pic_object" != none; then + if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" + pic_object=$xdir$pic_object - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue @@ -5346,7 +6751,7 @@ fi # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= @@ -5354,23 +6759,23 @@ # A PIC object. func_append libobjs " $pic_object" - arg="$pic_object" + arg=$pic_object fi # Non-PIC object. - if test "$non_pic_object" != none; then + if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" + 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" + non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else @@ -5378,7 +6783,7 @@ if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result @@ -5386,24 +6791,29 @@ func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else - func_fatal_error "\`$arg' is not a valid libtool object" + func_fatal_error "'$arg' is not a valid libtool object" fi fi done else - func_fatal_error "link input file \`$arg' does not exist" + 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" + precious_files_regex=$arg prev= continue ;; release) - release="-$arg" + release=-$arg prev= continue ;; @@ -5415,7 +6825,7 @@ func_fatal_error "only absolute run-paths are allowed" ;; esac - if test "$prev" = rpath; then + if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; @@ -5430,7 +6840,7 @@ continue ;; shrext) - shrext_cmds="$arg" + shrext_cmds=$arg prev= continue ;; @@ -5470,7 +6880,7 @@ esac fi # test -n "$prev" - prevarg="$arg" + prevarg=$arg case $arg in -all-static) @@ -5484,7 +6894,7 @@ -allow-undefined) # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" + func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) @@ -5516,7 +6926,7 @@ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi - if test "X$arg" = "X-export-symbols"; then + if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex @@ -5550,9 +6960,9 @@ 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'" + func_fatal_error "require no space between '-L' and '$1'" else - func_fatal_error "need path for \`-L' option" + func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" @@ -5563,8 +6973,8 @@ *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir ;; esac case "$deplibs " in @@ -5599,7 +7009,7 @@ ;; -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + 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) @@ -5607,11 +7017,11 @@ ;; *-*-os2*) # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework @@ -5620,16 +7030,16 @@ ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; esac - elif test "X$arg" = "X-lc_r"; then + elif test X-lc_r = "X$arg"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -5639,6 +7049,11 @@ continue ;; + -mllvm) + prev=mllvm + continue + ;; + -module) module=yes continue @@ -5668,7 +7083,7 @@ ;; -multi_module) - single_module="${wl}-multi_module" + single_module=$wl-multi_module continue ;; @@ -5682,8 +7097,8 @@ *-*-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" + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; @@ -5701,6 +7116,11 @@ continue ;; + -os2dllname) + prev=os2dllname + continue + ;; + -o) prev=output ;; -precious-files-regex) @@ -5788,14 +7208,14 @@ func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for flag in $args; do - IFS="$save_ifs" + 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" + IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; @@ -5804,15 +7224,15 @@ func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for flag in $args; do - IFS="$save_ifs" + 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" + IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; @@ -5835,7 +7255,7 @@ # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: @@ -5847,25 +7267,49 @@ # -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*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -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*|-flto*|-fwhopr*|-fuse-linker-plugin) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + 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" + arg=$func_quote_for_eval_result ;; *.$objext) @@ -5886,21 +7330,21 @@ if test -z "$pic_object" || test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" + 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" + xdir=$func_dirname_result - if test "$pic_object" != none; then + test none = "$pic_object" || { # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" + pic_object=$xdir$pic_object - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue @@ -5911,7 +7355,7 @@ fi # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= @@ -5919,23 +7363,23 @@ # A PIC object. func_append libobjs " $pic_object" - arg="$pic_object" - fi + arg=$pic_object + } # Non-PIC object. - if test "$non_pic_object" != none; then + if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" + 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" + non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else @@ -5943,7 +7387,7 @@ if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result @@ -5951,7 +7395,7 @@ func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else - func_fatal_error "\`$arg' is not a valid libtool object" + func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; @@ -5967,11 +7411,11 @@ # A libtool-controlled library. func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then + if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= - elif test "$prev" = dlprefiles; then + elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= @@ -5986,7 +7430,7 @@ # 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" + arg=$func_quote_for_eval_result ;; esac # arg @@ -5998,9 +7442,9 @@ done # argument parsing loop test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" + func_fatal_help "the '$prevarg' option requires an argument" - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + 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" @@ -6009,20 +7453,23 @@ oldlibs= # calculate the name of the file, without its directory func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" + 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\'\` + 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" + output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. @@ -6045,7 +7492,7 @@ # 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 + if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6053,7 +7500,7 @@ func_append libs " $deplib" done - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps @@ -6085,7 +7532,7 @@ case $file in *.la) ;; *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done @@ -6093,7 +7540,7 @@ prog) compile_deplibs= finalize_deplibs= - alldeplibs=no + alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" @@ -6105,32 +7552,32 @@ for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then + 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" + deplibs=$tmp_deplibs fi - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs deplibs= fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then + if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs @@ -6151,26 +7598,26 @@ esac done done - libs="$dlprefiles" + libs=$dlprefiles fi - if test "$pass" = dlopen; then + if test dlopen = "$pass"; then # Collect dlpreopened libraries - save_deplibs="$deplibs" + save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= - found=no + found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then + 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 "$linkmode" = lib ; then + if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; @@ -6180,13 +7627,13 @@ continue ;; -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" + 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 "$linkmode" = lib; then + 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" @@ -6194,31 +7641,22 @@ 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}" + lib=$searchdir/lib$name$search_ext if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes + if test .la = "$search_ext"; then + found=: else - found=no + found=false fi break 2 fi done done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library + if $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 "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then @@ -6226,19 +7664,19 @@ old_library= func_source "$lib" for l in $old_library $library_names; do - ll="$l" + ll=$l done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no + if test "X$ll" = "X$old_library"; then # only static version available + found=false func_dirname "$lib" "" "." - ladir="$func_dirname_result" + ladir=$func_dirname_result lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi @@ -6247,15 +7685,25 @@ *) ;; 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 "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then + if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; @@ -6268,18 +7716,18 @@ case $linkmode in lib) deplibs="$deplib $deplibs" - test "$pass" = conv && continue + 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 "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi - if test "$pass" = scan; then + if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" @@ -6290,13 +7738,13 @@ func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) - func_warning "\`-L' is ignored for archives/objects" + func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) - if test "$pass" = link; then + if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result @@ -6314,7 +7762,7 @@ lib=$func_resolve_sysroot_result ;; *.$libext) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi @@ -6325,21 +7773,26 @@ case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) - valid_a_lib=no + 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=yes + valid_a_lib=: fi ;; pass_all) - valid_a_lib=yes + valid_a_lib=: ;; esac - if test "$valid_a_lib" != yes; then + 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" @@ -6347,18 +7800,13 @@ echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) - if test "$pass" != link; then + if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" @@ -6369,10 +7817,10 @@ esac # linkmode ;; # *.$libext *.lo | *.$objext) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + 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" @@ -6385,22 +7833,20 @@ continue ;; %DEPLIBS%) - alldeplibs=yes + alldeplibs=: continue ;; esac # case $deplib - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi + $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_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." - ladir="$func_dirname_result" + ladir=$func_dirname_result dlname= dlopen= @@ -6430,19 +7876,19 @@ done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then + 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 "$pass" = conv; then + 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'" + 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" @@ -6450,15 +7896,15 @@ tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv @@ -6467,26 +7913,26 @@ # Get the name of the library we link against. linklib= if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then + { 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" + linklib=$l done fi if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" + func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then + 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 @@ -6500,40 +7946,40 @@ # We need an absolute path. case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + [\\/]* | [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 "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" + abs_ladir=$ladir fi ;; esac func_basename "$lib" - laname="$func_basename_result" + laname=$func_basename_result # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then + 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" + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" + dir=$ladir + absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi @@ -6542,11 +7988,11 @@ name=$func_stripname_result # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + 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 + case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both @@ -6590,9 +8036,9 @@ if test -z "$libdir"; then # Link the convenience library - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then + elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else @@ -6602,14 +8048,14 @@ fi - if test "$linkmode" = prog && test "$pass" != link; then + if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: fi tmp_libs= @@ -6621,14 +8067,14 @@ ;; esac # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then + 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 + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6638,15 +8084,15 @@ continue fi # $linkmode = prog... - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || + { { 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 + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in + case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac @@ -6675,9 +8121,9 @@ esac fi # $linkmode,$pass = prog,link... - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && + 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 @@ -6686,19 +8132,19 @@ link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then + if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then + { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in - *cygwin* | *mingw* | *cegcc*) + *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) - if test "$installed" = no; then + if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi @@ -6708,24 +8154,24 @@ # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" + dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" + dlopenmodule=$dlpremoduletest break fi done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo - if test "$linkmode" = prog; then + 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 "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then + 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. @@ -6753,43 +8199,43 @@ # figure out the soname set dummy $library_names shift - realname="$1" + 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" + soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in - *cygwin* | mingw* | *cegcc*) + *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result - versuffix="-$major" + versuffix=-$major ;; esac eval soname=\"$soname_spec\" else - soname="$realname" + soname=$realname fi # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" + soroot=$soname func_basename "$soroot" - soname="$func_basename_result" + 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_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_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 @@ -6797,58 +8243,58 @@ linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" - if test "$linkmode" = prog || test "$opt_mode" != relink; then + 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 "$hardcode_direct" = no; then - add="$dir/$linklib" + 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" ;; + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; + *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not + # 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 + $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 + 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" + add=$dir/$old_library fi elif test -n "$old_library"; then - add="$dir/$old_library" + add=$dir/$old_library fi fi esac - elif test "$hardcode_minus_L" = no; then + elif test no = "$hardcode_minus_L"; then case $host in - *-*-sunos*) add_shlibpath="$dir" ;; + *-*-sunos*) add_shlibpath=$dir ;; esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" + 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 "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$absdir" + 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 @@ -6857,10 +8303,10 @@ ;; esac fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name else lib_linked=no fi @@ -6868,7 +8314,7 @@ *) lib_linked=no ;; esac - if test "$lib_linked" != yes; then + if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi @@ -6878,15 +8324,15 @@ *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi - if test "$linkmode" = prog; then + 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 "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then + 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:" ;; @@ -6895,33 +8341,33 @@ fi fi - if test "$linkmode" = prog || test "$opt_mode" = relink; then + 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 "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then + 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 "$hardcode_automatic" = yes; then + 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" + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib else - add="$libdir/$linklib" + add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" + 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 @@ -6930,10 +8376,10 @@ ;; esac fi - add="-l$name" + add=-l$name fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else @@ -6941,43 +8387,43 @@ test -n "$add" && deplibs="$add $deplibs" fi fi - elif test "$linkmode" = prog; then + 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 "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" + 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 "$build_libtool_libs" = yes; then + elif test yes = "$build_libtool_libs"; then # Not a shared library - if test "$deplibs_check_method" != pass_all; then + 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 can not link to static lib archive $lib." + $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 "$module" = yes; then + 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 "*** 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." + echo "*** 'nm' from GNU binutils and a full rebuild may help." fi - if test "$build_old_libs" = no; then + if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else @@ -6990,11 +8436,11 @@ fi fi # link shared/static library? - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then + { 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 @@ -7008,12 +8454,12 @@ *) func_append temp_deplibs " $libdir";; esac done - dependency_libs="$temp_deplibs" + dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do @@ -7023,7 +8469,7 @@ func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; @@ -7032,12 +8478,12 @@ func_append tmp_libs " $func_resolve_sysroot_result" done - if test "$link_all_deplibs" != no; then + 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" ;; + -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result @@ -7045,12 +8491,12 @@ dir=$func_dirname_result # We need an absolute path. case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + [\\/]* | [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" + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir fi ;; esac @@ -7058,35 +8504,35 @@ 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 + 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 -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}}'` + 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}" + 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" + path=-L$absdir/$objdir ;; esac else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" + func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" + func_warning "'$deplib' seems to be moved" - path="-L$absdir" + path=-L$absdir fi ;; esac @@ -7098,23 +8544,23 @@ fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then + 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 "$pass" = dlpreopen; then + 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 "$pass" != dlopen; then - if test "$pass" != conv; then + 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 @@ -7124,12 +8570,12 @@ esac done newlib_search_path= - fi + } - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else + 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 @@ -7187,62 +8633,93 @@ 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 + for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) - i="" + i= ;; esac - if test -n "$i" ; then + if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" + if test prog = "$linkmode"; then + dlfiles=$newdlfiles fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles fi case $linkmode in oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" + 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" ;; + func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" + func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" + func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" + func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ - func_warning "\`-release' is ignored for archives" + func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" + func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no - oldlibs="$output" + oldlibs=$output func_append objs "$old_deplibs" ;; lib) - # Make sure we only generate libraries of the form `libNAME.la'. + # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" @@ -7251,10 +8728,10 @@ eval libname=\"$libname_spec\" ;; *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" - if test "$need_lib_prefix" != no; then + if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result @@ -7268,8 +8745,8 @@ esac if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + 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" @@ -7278,21 +8755,21 @@ fi fi - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" - install_libdir="$1" + install_libdir=$1 oldlibs= if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so + # 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" @@ -7301,20 +8778,20 @@ fi test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" + func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. - save_ifs="$IFS"; IFS=':' + save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift - IFS="$save_ifs" + IFS=$save_ifs test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" + func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts @@ -7322,45 +8799,45 @@ case $vinfo_number in yes) - number_major="$1" - number_minor="$2" - number_revision="$3" + number_major=$1 + number_minor=$2 + number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix - # which has an extra 1 added just for fun + # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor - darwin|linux|osf|windows|none) + darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result - age="$number_minor" - revision="$number_revision" + age=$number_minor + revision=$number_revision ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" + 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" + age=$number_minor + revision=$number_minor lt_irix_increment=no ;; *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" + func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) - current="$1" - revision="$2" - age="$3" + current=$1 + revision=$2 + age=$3 ;; esac @@ -7368,30 +8845,30 @@ 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" + 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" + 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" + 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" + 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. @@ -7406,26 +8883,36 @@ # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result - versuffix="$major.$age.$revision" + 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" + 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"; + major=.$current + versuffix=.$current.$revision ;; freebsd-elf) - major=".$current" - versuffix=".$current" + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision ;; irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then + if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 @@ -7436,69 +8923,74 @@ nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac - verstring="$verstring_prefix$major.$revision" + verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision - while test "$loop" -ne 0; do + 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" + verstring=$verstring_prefix$major.$iface:$verstring done - # Before this point, $major must not contain `.'. + # Before this point, $major must not contain '.'. major=.$major - versuffix="$major.$revision" + 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" + versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age - while test "$loop" -ne 0; do + 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" + verstring=$verstring:$iface.0 done # Make executables depend on our current version. - func_append verstring ":${current}.0" + func_append verstring ":$current.0" ;; qnx) - major=".$current" - versuffix=".$current" + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current ;; sunos) - major=".$current" - versuffix=".$current.$revision" + major=.$current + versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. + # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result - versuffix="-$major" + versuffix=-$major ;; *) - func_fatal_configuration "unknown library version type \`$version_type'" + func_fatal_configuration "unknown library version type '$version_type'" ;; esac @@ -7512,42 +9004,45 @@ verstring= ;; *) - verstring="0.0" + verstring=0.0 ;; esac - if test "$need_version" = no; then + if test no = "$need_version"; then versuffix= else - versuffix=".0.0" + versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then + if test yes,no = "$avoid_version,$need_version"; then major= versuffix= - verstring="" + verstring= fi # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes + 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" + allow_undefined_flag=$no_undefined_flag fi fi - func_generate_dlsyms "$libname" "$libname" "yes" + func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= + test " " = "$libobjs" && libobjs= - if test "$opt_mode" != relink; then + 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= @@ -7556,8 +9051,8 @@ case $p in *.$objext | *.gcno) ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then + $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 @@ -7573,11 +9068,11 @@ fi # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + 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` + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. @@ -7598,13 +9093,13 @@ *) func_append finalize_rpath " $libdir" ;; esac done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + 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" + old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in @@ -7614,7 +9109,7 @@ done # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" + old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in @@ -7623,7 +9118,7 @@ esac done - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) @@ -7647,7 +9142,7 @@ ;; *) # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then + if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; @@ -7663,9 +9158,9 @@ # 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="" + release= + versuffix= + major= newdeplibs= droppeddeps=no case $deplibs_check_method in @@ -7694,20 +9189,20 @@ -l*) func_stripname -l '' "$i" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" - i="" + i= ;; esac fi - if test -n "$i" ; then + if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes @@ -7737,20 +9232,20 @@ $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" - i="" + i= ;; esac fi - if test -n "$i" ; then + if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes @@ -7787,24 +9282,24 @@ -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= ;; esac fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi - test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` + test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - if test "$want_nocaseglob" = yes; then + if test yes = "$want_nocaseglob"; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob @@ -7822,25 +9317,25 @@ # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? - potlib="$potent_lib" + potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + [\\/]* | [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="" + a_deplib= break 2 fi done done fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." @@ -7848,7 +9343,7 @@ 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 + 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" @@ -7871,30 +9366,30 @@ -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= ;; esac fi - if test -n "$a_deplib" ; then + 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 + 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="" + a_deplib= break 2 fi done done fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." @@ -7902,7 +9397,7 @@ 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 + 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" @@ -7918,18 +9413,18 @@ done # Gone through all deplibs. ;; none | unknown | *) - newdeplibs="" + newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do + 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,,"` + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo - if test "X$deplibs_check_method" = "Xnone"; then + 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." @@ -7953,8 +9448,8 @@ ;; esac - if test "$droppeddeps" = yes; then - if test "$module" = yes; then + 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" @@ -7963,12 +9458,12 @@ 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 "*** 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." + echo "*** 'nm' from GNU binutils and a full rebuild may help." fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else @@ -7979,14 +9474,14 @@ echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." - if test "$allow_undefined" = no; then + 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 "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else @@ -8032,7 +9527,7 @@ *) func_append new_libs " $deplib" ;; esac done - deplibs="$new_libs" + deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= @@ -8040,25 +9535,25 @@ dlname= # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Remove ${wl} instances when linking with ld. + 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 "$hardcode_into_libs" = yes; then + if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$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" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8083,7 +9578,7 @@ # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then @@ -8097,8 +9592,8 @@ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + 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 @@ -8108,19 +9603,19 @@ eval library_names=\"$library_names_spec\" set dummy $library_names shift - realname="$1" + realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else - soname="$realname" + soname=$realname fi if test -z "$dlname"; then dlname=$soname fi - lib="$output_objdir/$realname" + lib=$output_objdir/$realname linknames= for link do @@ -8134,7 +9629,7 @@ 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" + export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi @@ -8143,31 +9638,31 @@ cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + 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" + orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes - fi + } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" + 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='~' + save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do - IFS="$save_ifs" + 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 @@ -8181,7 +9676,7 @@ try_normal_branch=no ;; esac - if test "$try_normal_branch" = yes \ + if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then @@ -8192,7 +9687,7 @@ output_la=$func_basename_result save_libobjs=$libobjs save_output=$output - output=${output_objdir}/${output_la}.nm + 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" @@ -8215,8 +9710,8 @@ break fi done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + 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 @@ -8224,16 +9719,16 @@ 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" + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + 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" + 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 + # '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. @@ -8252,11 +9747,11 @@ ;; esac done - deplibs="$tmp_deplibs" + deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && + 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. @@ -8267,7 +9762,7 @@ eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience @@ -8276,18 +9771,18 @@ fi fi - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + 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 "$opt_mode" = relink; then + 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 "$module" = yes && test -n "$module_cmds" ; then + 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 @@ -8305,7 +9800,7 @@ fi fi - if test "X$skipped_export" != "X:" && + 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 @@ -8338,8 +9833,8 @@ last_robj= k=1 - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript + 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 @@ -8351,14 +9846,14 @@ func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk + 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 "$compiler_needs_object" = yes; then + if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi @@ -8373,7 +9868,7 @@ else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext + output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result @@ -8385,13 +9880,13 @@ func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result - if test "X$objlist" = X || + 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 "$k" -eq 1 ; then + 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\" @@ -8401,10 +9896,10 @@ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi - last_robj=$output_objdir/$output_la-${k}.$objext + last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext + output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result @@ -8416,9 +9911,9 @@ # 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\" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" @@ -8426,9 +9921,9 @@ output= fi - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" + ${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. @@ -8437,16 +9932,16 @@ if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi - fi + } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { + IFS=$save_ifs + $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } @@ -8454,7 +9949,7 @@ lt_exit=$? # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -8463,7 +9958,7 @@ exit $lt_exit } done - IFS="$save_ifs" + 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"' @@ -8471,18 +9966,18 @@ fi fi - if ${skipped_export-false}; then + ${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" + 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" + 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 + # '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. @@ -8491,7 +9986,7 @@ export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi - fi + } libobjs=$output # Restore the value of output. @@ -8505,7 +10000,7 @@ # value of $libobjs for piecewise linking. # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then + 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 @@ -8527,7 +10022,7 @@ # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles @@ -8535,11 +10030,12 @@ test "X$libobjs" = "X " && libobjs= fi - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd in $cmds; do - IFS="$save_ifs" + IFS=$sp$nl eval cmd=\"$cmd\" - $opt_silent || { + IFS=$save_ifs + $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } @@ -8547,7 +10043,7 @@ lt_exit=$? # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -8556,10 +10052,10 @@ exit $lt_exit } done - IFS="$save_ifs" + IFS=$save_ifs # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + 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 @@ -8579,39 +10075,39 @@ done # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then + if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. - dlname="$soname" + dlname=$soname fi fi ;; obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" + 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" ;; + func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" + func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" + func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" + func_warning "'-version-info' is ignored for objects" test -n "$release" && \ - func_warning "\`-release' is ignored for objects" + 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" + func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" @@ -8619,7 +10115,7 @@ ;; *) libobj= - obj="$output" + obj=$output ;; esac @@ -8632,17 +10128,19 @@ # the extraction. reload_conv_objs= gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - + # if 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\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + 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" + gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience @@ -8651,12 +10149,12 @@ fi # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + 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" ### testsuite: skip nested quoting test + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - output="$obj" + output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. @@ -8668,7 +10166,7 @@ exit $EXIT_SUCCESS fi - if test "$build_libtool_libs" != yes; then + test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi @@ -8678,12 +10176,12 @@ # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS - fi + } - if test -n "$pic_flag" || test "$pic_mode" != default; then + 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" + output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi @@ -8700,16 +10198,14 @@ output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" + func_warning "'-version-info' is ignored for programs" test -n "$release" && \ - func_warning "\`-release' is ignored for programs" + func_warning "'-release' is ignored for programs" - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + $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]) @@ -8723,11 +10219,11 @@ *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then + 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" + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" ;; esac fi @@ -8763,7 +10259,7 @@ *) func_append new_libs " $deplib" ;; esac done - compile_deplibs="$new_libs" + compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" @@ -8787,7 +10283,7 @@ if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8810,7 +10306,7 @@ fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; @@ -8827,10 +10323,10 @@ # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi - compile_rpath="$rpath" + compile_rpath=$rpath rpath= hardcode_libdirs= @@ -8838,7 +10334,7 @@ if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8863,45 +10359,43 @@ # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi - finalize_rpath="$rpath" + finalize_rpath=$rpath - if test -n "$libobjs" && test "$build_old_libs" = yes; then + 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@" "no" + func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi - wrappers_required=yes + wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no + wrappers_required=false ;; *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi + test yes = "$build_libtool_libs" || wrappers_required=false ;; *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false fi ;; esac - if test "$wrappers_required" = no; then + $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" + link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 @@ -8914,12 +10408,12 @@ fi # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status - fi + } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" @@ -8949,9 +10443,9 @@ fi fi - if test "$no_install" = yes; then + if test yes = "$no_install"; then # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" + 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. @@ -8968,27 +10462,28 @@ exit $EXIT_SUCCESS fi - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi + 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'` @@ -9045,8 +10540,8 @@ 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" + 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 @@ -9067,7 +10562,7 @@ 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 + if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result @@ -9090,25 +10585,27 @@ # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience build_libtool_libs=no - else + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs @@ -9116,13 +10613,13 @@ fi # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + 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" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles @@ -9143,7 +10640,7 @@ : else echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs @@ -9152,7 +10649,7 @@ for obj in $save_oldobjs do func_basename "$obj" - objbase="$func_basename_result" + objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) @@ -9221,18 +10718,18 @@ else # the above command should be used before it gets too long oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then + 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\" + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist - if test "X$oldobjs" = "X" ; then + if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" @@ -9249,7 +10746,7 @@ case $output in *.la) old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" + test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior @@ -9264,31 +10761,31 @@ 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="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then + 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 "$installed" = yes; then + if test yes = "$installed"; then if test -z "$install_libdir"; then break fi - output="$output_objdir/$outputname"i + 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" + name=$func_basename_result func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + 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_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) @@ -9304,23 +10801,23 @@ *) func_append newdependency_libs " $deplib" ;; esac done - dependency_libs="$newdependency_libs" + 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` + 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_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done - dlfiles="$newdlfiles" + dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in @@ -9330,34 +10827,34 @@ # 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` + 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_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done - dlprefiles="$newdlprefiles" + dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done - dlfiles="$newdlfiles" + dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done - dlprefiles="$newdlprefiles" + dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin @@ -9373,10 +10870,9 @@ case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then + if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname + tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname @@ -9385,7 +10881,7 @@ esac $ECHO > $output "\ # $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. @@ -9399,7 +10895,7 @@ # The name of the static archive. old_library='$old_library' -# Linker flags that can not go in dependency_libs. +# Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. @@ -9425,7 +10921,7 @@ # Directory that this library needs to be installed in: libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then + if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi @@ -9440,27 +10936,29 @@ exit $EXIT_SUCCESS } -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi # func_mode_uninstall arg... func_mode_uninstall () { - $opt_debug - RM="$nonopt" + $debug_cmd + + RM=$nonopt files= - rmforce= + rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. - libtool_install_magic="$magic" + libtool_install_magic=$magic for arg do case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; + -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac @@ -9473,18 +10971,18 @@ for file in $files; do func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir else - odir="$dir/$objdir" + odir=$dir/$objdir fi func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then + if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; @@ -9499,11 +10997,11 @@ elif test -d "$file"; then exit_status=1 continue - elif test "$rmforce" = yes; then + elif $rmforce; then continue fi - rmfiles="$file" + rmfiles=$file case $name in *.la) @@ -9517,7 +11015,7 @@ done test -n "$old_library" && func_append rmfiles " $odir/$old_library" - case "$opt_mode" in + case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; @@ -9528,12 +11026,12 @@ uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + 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" 'test "$rmforce" = yes || exit_status=1' + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; @@ -9549,21 +11047,19 @@ func_source $dir/$name # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then + 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 "$non_pic_object" != none; then + if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) - if test "$opt_mode" = clean ; then + if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) @@ -9590,12 +11086,12 @@ # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/$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" + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" fi fi fi @@ -9604,7 +11100,7 @@ func_show_eval "$RM $rmfiles" 'exit_status=1' done - # Try to remove the ${objdir}s in the directories where we deleted files + # 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" @@ -9614,16 +11110,17 @@ exit $exit_status } -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi test -z "$opt_mode" && { - help="$generic_help" + help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" + func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" @@ -9634,7 +11131,7 @@ # The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting +# 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 @@ -9657,5 +11154,3 @@ # mode:shell-script # sh-indentation:2 # End: -# vi:sw=2 -
View file
libde265-1.0.2.tar.gz/m4/libtool.m4 -> libde265-1.0.3.tar.gz/m4/libtool.m4
Changed
@@ -1,8 +1,6 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# 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 @@ -10,36 +8,30 @@ # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. +# 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. +# 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 +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see <http://www.gnu.org/licenses/>. ]) -# serial 57 LT_INIT +# serial 58 LT_INIT # LT_PREREQ(VERSION) @@ -67,7 +59,7 @@ # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +[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 @@ -91,7 +83,7 @@ _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" +LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' @@ -111,26 +103,43 @@ 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) # ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +# 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], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +[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])'. +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} @@ -177,15 +186,16 @@ 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 which allow our +# 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 +if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) -if test -n "${ZSH_VERSION+set}" ; then +if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi @@ -198,7 +208,7 @@ # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then + if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -209,14 +219,14 @@ ofile=libtool can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except MSVC, +# 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" +with_gnu_ld=$lt_cv_prog_gnu_ld -old_CC="$CC" -old_CFLAGS="$CFLAGS" +old_CC=$CC +old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc @@ -269,14 +279,14 @@ # _LT_PROG_LTMAIN # --------------- -# Note that this code is called both from `configure', and `config.status' +# 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, +# '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" +ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN @@ -286,7 +296,7 @@ # 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' +# in macros and then make a single call at the end using the 'libtool' # label. @@ -421,8 +431,8 @@ # _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 +# 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"`']) @@ -446,7 +456,7 @@ # 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 +available_tags='_LT_TAGS'dnl ]) @@ -474,7 +484,7 @@ # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# 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], @@ -500,8 +510,8 @@ # 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 +# 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], @@ -547,7 +557,7 @@ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -560,7 +570,7 @@ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$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\\\\\\"" @@ -576,7 +586,7 @@ # 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 +# '#!' 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). @@ -598,7 +608,7 @@ _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl +test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT @@ -621,7 +631,7 @@ } >&AS_MESSAGE_LOG_FD lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, +'$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. @@ -643,7 +653,7 @@ This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." -while test $[#] != 0 +while test 0 != $[#] do case $[1] in --version | --v* | -V ) @@ -656,10 +666,10 @@ lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; +Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; +Try '$[0] --help' for more information.]) ;; esac shift done @@ -685,7 +695,7 @@ # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: -test "$silent" = yes && +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 @@ -705,27 +715,31 @@ _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our + # 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 + if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi - cfgfile="${ofile}T" + cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# 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 @@ -733,13 +747,24 @@ _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 "X${COLLECT_NAMES+set}" != Xset; then +if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -756,8 +781,6 @@ sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) - _LT_PROG_REPLACE_SHELLFNS - mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" @@ -775,7 +798,6 @@ [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS @@ -974,7 +996,7 @@ 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 + 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 @@ -992,7 +1014,7 @@ cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then + 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 @@ -1010,7 +1032,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], @@ -1032,7 +1054,7 @@ _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + 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 @@ -1042,32 +1064,32 @@ ]) case $host_os in rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _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' ;; + _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' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then + if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + 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}' + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= @@ -1087,29 +1109,29 @@ _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + 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" + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; + ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac - if test "$_lt_dar_can_shared" = "yes"; then + 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}" + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" +[ 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 @@ -1129,7 +1151,7 @@ # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then +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])], @@ -1147,7 +1169,7 @@ _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" + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) @@ -1167,8 +1189,8 @@ # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). +# 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 @@ -1196,10 +1218,10 @@ # Invoke $ECHO with all args, space-separated. func_echo_all () { - $ECHO "$*" + $ECHO "$*" } -case "$ECHO" in +case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; @@ -1225,16 +1247,17 @@ AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], +[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 #( +case $with_sysroot in #( yes) - if test "$GCC" = yes; then + if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( @@ -1244,14 +1267,14 @@ no|'') ;; #( *) - AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) +[dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- @@ -1259,31 +1282,33 @@ [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes +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 which ABI we are using. + # 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" + HPUX_IA64_MODE=32 ;; *ELF-64*) - HPUX_IA64_MODE="64" + HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) - # Find out which ABI we are using. + # 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 "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" @@ -1312,9 +1337,46 @@ 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 which ABI we are using. + # 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 @@ -1333,10 +1395,10 @@ ;; esac ;; - powerpc64le-*) + powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; - powerpc64-*) + powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) @@ -1355,10 +1417,10 @@ x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; - powerpcle-*) + powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; - powerpc-*) + powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) @@ -1376,19 +1438,20 @@ *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" + SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then + 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" + CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) - # Find out which ABI we are using. + # 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 @@ -1396,7 +1459,7 @@ case $lt_cv_prog_gnu_ld in yes*) case $host in - i?86-*-solaris*) + i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) @@ -1405,7 +1468,7 @@ 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" + LD=${LD-ld}_sol2 fi ;; *) @@ -1421,7 +1484,7 @@ ;; esac -need_locks="$enable_libtool_lock" +need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK @@ -1440,11 +1503,11 @@ [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then + 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 "$ac_status" -ne 0; then + if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi @@ -1452,7 +1515,7 @@ ]) ]) -if test "x$lt_cv_ar_at_file" = xno; then +if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file @@ -1483,7 +1546,7 @@ if test -n "$RANLIB"; then case $host_os in - openbsd*) + bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) @@ -1519,7 +1582,7 @@ [$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" + 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 @@ -1546,7 +1609,7 @@ $RM conftest* ]) -if test x"[$]$2" = xyes; then +if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) @@ -1568,7 +1631,7 @@ m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no - save_LDFLAGS="$LDFLAGS" + 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 @@ -1587,10 +1650,10 @@ fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS ]) -if test x"[$]$2" = xyes; then +if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) @@ -1611,7 +1674,7 @@ AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 - teststring="ABCD" + teststring=ABCD case $build_os in msdosdjgpp*) @@ -1651,7 +1714,7 @@ lt_cv_sys_max_cmd_len=8192; ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + 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` @@ -1702,22 +1765,22 @@ *) 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 + 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 + 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` \ + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough + test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring @@ -1733,7 +1796,7 @@ ;; esac ]) -if test -n $lt_cv_sys_max_cmd_len ; then +if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) @@ -1761,7 +1824,7 @@ # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : +if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -1808,9 +1871,9 @@ # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* 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)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -1836,7 +1899,7 @@ return status; }] _LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + 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 @@ -1857,7 +1920,7 @@ # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then +if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown @@ -1867,44 +1930,52 @@ case $host_os in beos*) - lt_cv_dlopen="load_add_on" + 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=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) - lt_cv_dlopen="dlopen" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) - # if libdl is installed we need to link against it + # 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=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"], + [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], + [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [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"]) + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) @@ -1913,21 +1984,21 @@ ;; esac - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else + 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 "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - save_LIBS="$LIBS" + save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], @@ -1937,7 +2008,7 @@ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) - if test "x$lt_cv_dlopen_self" = xyes; then + 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 @@ -1947,9 +2018,9 @@ ]) fi - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS ;; esac @@ -2041,8 +2112,8 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then +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 @@ -2052,8 +2123,8 @@ ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + 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 @@ -2080,8 +2151,8 @@ _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR @@ -2093,15 +2164,15 @@ _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + 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 "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + ## 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 @@ -2115,12 +2186,12 @@ fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then +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 "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi @@ -2144,7 +2215,7 @@ # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) - if test -n "$STRIP" ; then + if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) @@ -2162,6 +2233,47 @@ ])# _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 @@ -2172,17 +2284,18 @@ 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 "$GCC" = yes; then +if test yes = "$GCC"; then case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; + 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" ;; + 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 @@ -2198,28 +2311,35 @@ ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # 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` + 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" - else + 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; +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; + lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } @@ -2233,7 +2353,7 @@ # 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'` ;; + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else @@ -2242,7 +2362,7 @@ library_names_spec= libname_spec='lib$name' soname_spec= -shrext_cmds=".so" +shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= @@ -2259,14 +2379,17 @@ # 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' + 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' + soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) @@ -2274,41 +2397,91 @@ need_lib_prefix=no need_version=no hardcode_into_libs=yes - if test "$host_cpu" = ia64; then + 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}' + 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 + # 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 + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # 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. - if test "$aix_use_runtimelinking" = yes; then + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else + 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' - fi + 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 ;; @@ -2318,18 +2491,18 @@ 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}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + 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}' + library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; @@ -2337,8 +2510,8 @@ 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' + 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" @@ -2350,7 +2523,7 @@ cygwin* | mingw* | pw32* | cegcc*) version_type=windows - shrext_cmds=".dll" + shrext_cmds=.dll need_version=no need_lib_prefix=no @@ -2359,8 +2532,8 @@ # 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'\''`~ + 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~ @@ -2376,17 +2549,17 @@ 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' 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}' + 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}' + 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' @@ -2395,8 +2568,8 @@ *,cl*) # Native MSVC libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' case $build_os in mingw*) @@ -2423,7 +2596,7 @@ 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" + 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'` @@ -2436,8 +2609,8 @@ 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'\''`~ + 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' @@ -2450,7 +2623,7 @@ *) # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac @@ -2463,8 +2636,8 @@ 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' + 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`' @@ -2477,8 +2650,8 @@ 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' + 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 ;; @@ -2496,12 +2669,13 @@ version_type=freebsd-$objformat case $version_type in freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac @@ -2531,10 +2705,10 @@ 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes + shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; @@ -2552,14 +2726,15 @@ dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then + 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 - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -2567,8 +2742,8 @@ 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' + 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 ;; @@ -2577,8 +2752,8 @@ 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' + 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, ... @@ -2591,8 +2766,8 @@ 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' + 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 @@ -2603,7 +2778,7 @@ case $host_os in nonstopux*) version_type=nonstopux ;; *) - if test "$lt_cv_prog_gnu_ld" = yes; then + 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 @@ -2611,8 +2786,8 @@ 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}' + 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= @@ -2631,8 +2806,8 @@ 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}" + 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 ;; @@ -2641,13 +2816,33 @@ 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' + 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 @@ -2672,7 +2867,12 @@ # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # 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" @@ -2704,12 +2904,12 @@ 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' + 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' + 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 @@ -2719,7 +2919,7 @@ 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}' + 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 ;; @@ -2728,58 +2928,68 @@ 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' + 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*) +openbsd* | bitrig*) version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" + sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no else - shlibpath_overrides_runpath=yes + 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' - shrext_cmds=".dll" + version_type=windows + shrext_cmds=.dll + need_version=no need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' + # 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=LIBPATH + 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}' + 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" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) @@ -2790,8 +3000,8 @@ 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' + 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 @@ -2801,11 +3011,11 @@ sunos4*) version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes @@ -2813,8 +3023,8 @@ 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' + 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) @@ -2835,24 +3045,24 @@ ;; sysv4*MP*) - if test -d /usr/nec ;then + 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' + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf + 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' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then + 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' @@ -2870,7 +3080,7 @@ 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}' + 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 @@ -2878,8 +3088,8 @@ 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' + 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 ;; @@ -2888,20 +3098,30 @@ ;; esac AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no +test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then +if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +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 "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" + +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]) @@ -2934,39 +3154,41 @@ [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) +_LT_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 which can recognize shared library +# 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_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 + 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" + 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 -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" + 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 : @@ -2989,11 +3211,11 @@ break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else @@ -3011,7 +3233,7 @@ # _LT_PATH_MAGIC # -------------- -# find a file program which can recognize a shared library +# 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 @@ -3038,16 +3260,16 @@ AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], + [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld -if test "$GCC" = yes; then +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 + # 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` ;; @@ -3061,7 +3283,7 @@ 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" + test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. @@ -3072,37 +3294,37 @@ with_gnu_ld=unknown ;; esac -elif test "$with_gnu_ld" = yes; then +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 + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do - IFS="$lt_save_ifs" + 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" + lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break + test no != "$with_gnu_ld" && break ;; *) - test "$with_gnu_ld" != yes && break + test yes != "$with_gnu_ld" && break ;; esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs else - lt_cv_path_LD="$LD" # Let the user override the test with a path. + lt_cv_path_LD=$LD # Let the user override the test with a path. fi]) -LD="$lt_cv_path_LD" +LD=$lt_cv_path_LD if test -n "$LD"; then AC_MSG_RESULT($LD) else @@ -3156,13 +3378,13 @@ reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then + if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + 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 @@ -3173,6 +3395,43 @@ ])# _LT_CMD_RELOAD +# _LT_PATH_DD +# ----------- +# find a working dd +m4_defun([_LT_PATH_DD], +[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies @@ -3188,13 +3447,13 @@ # 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. +# 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. +# 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]]*) @@ -3221,8 +3480,7 @@ # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + 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 @@ -3318,8 +3576,8 @@ lt_cv_deplibs_check_method=pass_all ;; -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +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)$' @@ -3372,6 +3630,9 @@ tpf*) lt_cv_deplibs_check_method=pass_all ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; esac ]) @@ -3412,33 +3673,38 @@ 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" + lt_cv_path_NM=$NM else - lt_nm_to_check="${ac_tool_prefix}nm" + 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 + 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" + 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 + 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: + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) + # 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 + break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" - break + break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but @@ -3449,21 +3715,21 @@ esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" +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 /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) - DUMPBIN="$DUMPBIN -symbols" + DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: @@ -3471,8 +3737,8 @@ esac fi AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi test -z "$NM" && NM=nm @@ -3518,8 +3784,8 @@ case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL + # 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 @@ -3531,7 +3797,7 @@ ;; *) # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) @@ -3558,13 +3824,28 @@ lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then +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 @@ -3576,11 +3857,11 @@ # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) - AC_CHECK_LIB(m, cos, LIBM="-lm") + AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) @@ -3599,7 +3880,7 @@ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; @@ -3651,7 +3932,7 @@ symcode='[[ABCDGISTW]]' ;; hpux*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; @@ -3684,14 +3965,44 @@ 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 -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" +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 -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +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= @@ -3709,21 +4020,24 @@ # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. + # 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=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" {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'" @@ -3763,11 +4077,11 @@ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#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__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else @@ -3793,7 +4107,7 @@ { { "@PROGRAM@", (void *) 0 }, _LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; @@ -3813,9 +4127,9 @@ mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" + 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 + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS @@ -3836,7 +4150,7 @@ rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then + if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= @@ -3863,12 +4177,16 @@ [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 @@ -3884,17 +4202,18 @@ m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then + 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 "$host_cpu" = ia64; then + 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*) @@ -3905,8 +4224,8 @@ ;; 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'. + # 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 @@ -3922,6 +4241,11 @@ # (--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 @@ -3971,7 +4295,7 @@ case $host_os in aix[[4-9]]*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else @@ -4012,14 +4336,14 @@ case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_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' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default @@ -4056,7 +4380,7 @@ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. + # 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' @@ -4201,17 +4525,18 @@ fi ], [ - if test "$GCC" = yes; then + 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 "$host_cpu" = ia64; then + 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*) @@ -4222,8 +4547,8 @@ ;; 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'. + # 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 @@ -4240,6 +4565,11 @@ # (--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*) @@ -4310,7 +4640,7 @@ case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else @@ -4318,11 +4648,30 @@ 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*) @@ -4338,7 +4687,7 @@ ;; 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' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) @@ -4349,7 +4698,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. + # 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' @@ -4374,6 +4723,12 @@ _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) @@ -4471,7 +4826,7 @@ ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi @@ -4500,7 +4855,7 @@ fi ]) case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: + # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; @@ -4566,17 +4921,21 @@ case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". + # -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) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _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)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _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" + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in @@ -4625,9 +4984,9 @@ # 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'. + # 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 @@ -4643,7 +5002,7 @@ # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. - if test "$GCC" != yes; then + if test yes != "$GCC"; then with_gnu_ld=no fi ;; @@ -4651,7 +5010,7 @@ # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; - openbsd*) + openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) @@ -4664,7 +5023,7 @@ # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility @@ -4686,24 +5045,24 @@ esac fi - if test "$lt_use_gnu_ld_interface" = yes; then + if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' + 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' + _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' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no - case `$LD -v 2>&1` in + 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 ... @@ -4716,7 +5075,7 @@ case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then + if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 @@ -4735,7 +5094,7 @@ 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_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) @@ -4751,7 +5110,7 @@ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _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 @@ -4761,7 +5120,7 @@ # _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(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 @@ -4769,61 +5128,89 @@ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + _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(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' + _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' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no - if test "$host_os" = linux-dietlibc; then + 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 "$tmp_diet" = no + && 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' + _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' + _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' ;; @@ -4834,42 +5221,47 @@ 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(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(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' + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + 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' + 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(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + 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' + 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 @@ -4883,8 +5275,8 @@ _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' + _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 ;; @@ -4902,8 +5294,8 @@ _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' + _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 @@ -4915,7 +5307,7 @@ _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** 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 @@ -4930,9 +5322,9 @@ # 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' + _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 @@ -4949,15 +5341,15 @@ *) 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' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + 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)= @@ -4973,7 +5365,7 @@ # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + 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 @@ -4981,34 +5373,57 @@ ;; aix[[4-9]]*) - if test "$host_cpu" = ia64; then + 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="" + no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". + # -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) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _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)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _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 - # need to do runtime linking. + # 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 $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + 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 @@ -5027,13 +5442,21 @@ _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,' + _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 "$GCC" = yes; then + 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` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -5052,62 +5475,80 @@ ;; esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' fi - _LT_TAGVAR(link_all_deplibs, $1)=no + # 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 "$host_cpu" = ia64; then + 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 "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + 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' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then + 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 "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + _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 "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + 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" + _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" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + _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' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + _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 ;; @@ -5116,7 +5557,7 @@ 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_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) @@ -5146,16 +5587,17 @@ # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + _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 @@ -5164,18 +5606,18 @@ # 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' + 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 @@ -5184,7 +5626,7 @@ # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + 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. @@ -5234,33 +5676,33 @@ ;; hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + 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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _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_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' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + 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 "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + 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' + _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 @@ -5268,25 +5710,25 @@ ;; hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then + 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' + _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+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' + _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' + _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' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ @@ -5294,14 +5736,14 @@ # (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)='$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']) + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + 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 @@ -5312,7 +5754,7 @@ *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _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. @@ -5323,16 +5765,16 @@ ;; irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + 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" + [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; }]], @@ -5345,21 +5787,32 @@ end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + 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 + _LT_TAGVAR(link_all_deplibs, $1)=no 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' + _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_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* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out @@ -5374,7 +5827,7 @@ 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_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; @@ -5382,27 +5835,19 @@ *nto* | *qnx*) ;; - openbsd*) + 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__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + 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' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac + _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 @@ -5413,33 +5858,53 @@ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + 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 "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + 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' + _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_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + 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_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' + $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' @@ -5450,24 +5915,24 @@ solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + 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' + $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_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' + $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' + 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' + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi @@ -5477,11 +5942,11 @@ 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 understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + 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 @@ -5491,10 +5956,10 @@ ;; sunos4*) - if test "x$host_vendor" = xsequent; then + 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' + _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 @@ -5543,43 +6008,43 @@ ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + 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' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # 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(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_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' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + 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' + _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 ;; @@ -5594,17 +6059,17 @@ ;; esac - if test x$host_vendor = xsni; then + if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld @@ -5621,7 +6086,7 @@ # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - if test "$enable_shared" = yes && test "$GCC" = yes; then + 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. @@ -5701,12 +6166,12 @@ _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 + [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 + [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 + "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 @@ -5747,10 +6212,10 @@ # ------------------------ # 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'. +# the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" +lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. @@ -5790,18 +6255,18 @@ LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB - # Report which library types will actually be built + # 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 "$can_build_shared" = "no" && enable_shared=no + 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 "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' @@ -5809,8 +6274,12 @@ ;; aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + 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 @@ -5818,13 +6287,13 @@ AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP -CC="$lt_save_CC" +CC=$lt_save_CC ])# _LT_LANG_C_CONFIG @@ -5832,14 +6301,14 @@ # -------------------------- # 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'. +# the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then +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 @@ -5881,7 +6350,7 @@ # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then +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;" @@ -5923,35 +6392,35 @@ if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately - if test "$GXX" = yes; then + 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 "$GXX" = yes; then + 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 "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + 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' + _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}' + 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' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi @@ -5987,18 +6456,30 @@ _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) - if test "$host_cpu" = ia64; then + 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="" + no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # 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 @@ -6008,6 +6489,13 @@ ;; 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 @@ -6026,13 +6514,21 @@ _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,' + _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 "$GXX" = yes; then + 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` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -6050,64 +6546,84 @@ fi esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + 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 "$host_cpu" = ia64; then + 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 "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + 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' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then + 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' + # 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(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + _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 "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + 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" + _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" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + _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' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + _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 ;; @@ -6117,7 +6633,7 @@ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _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 @@ -6145,57 +6661,58 @@ # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + _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' + 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(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + _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 @@ -6206,6 +6723,34 @@ _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++*) @@ -6241,14 +6786,14 @@ ;; haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _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_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _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 @@ -6260,7 +6805,7 @@ _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _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. @@ -6269,11 +6814,11 @@ # 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"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + 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 @@ -6283,15 +6828,15 @@ ;; hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + 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' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi @@ -6317,13 +6862,13 @@ 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' + _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+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' + _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 @@ -6334,20 +6879,20 @@ # 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"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then + 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' + _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+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' + _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 @@ -6362,22 +6907,22 @@ 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' + _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' + _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' + _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 @@ -6386,17 +6931,17 @@ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + 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' + _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_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; @@ -6409,8 +6954,8 @@ # 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' + _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. @@ -6419,10 +6964,10 @@ # 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"' + 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' + _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. @@ -6436,59 +6981,59 @@ # 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' + _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' + _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' + _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`"' + 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' + 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' + 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' + 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' + _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' + _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' + _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' @@ -6502,18 +7047,18 @@ # 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' + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(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' + 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 ;; *) @@ -6521,10 +7066,10 @@ *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(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(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 @@ -6582,22 +7127,17 @@ _LT_TAGVAR(ld_shlibs, $1)=yes ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) + 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__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + _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 @@ -6613,9 +7153,9 @@ # 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_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_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using @@ -6633,17 +7173,17 @@ 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)=' $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_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' + 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 @@ -6658,21 +7198,21 @@ # 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"' + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + 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 -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' + _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_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists @@ -6718,9 +7258,9 @@ # 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_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' + $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 @@ -6728,7 +7268,7 @@ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. + # 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' ;; @@ -6745,30 +7285,30 @@ ;; 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' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if 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 $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _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 -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $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 + # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_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 -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $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 @@ -6776,11 +7316,11 @@ 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' + _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' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi @@ -6789,52 +7329,52 @@ ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _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 -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' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # 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(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_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' + _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(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(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" + '"$_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' + _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 ;; @@ -6865,10 +7405,10 @@ esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -6895,7 +7435,7 @@ lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes +fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG @@ -6917,13 +7457,14 @@ AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + 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 @@ -7007,13 +7548,13 @@ pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in + case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. - if test $p = "-L" || - test $p = "-R"; then + if test x-L = "$p" || + test x-R = "$p"; then prev=$p continue fi @@ -7029,16 +7570,16 @@ case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in + 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}" + _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}" + _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 @@ -7046,9 +7587,9 @@ esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" + _LT_TAGVAR(postdeps, $1)=$prev$p else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= @@ -7063,15 +7604,15 @@ continue fi - if test "$pre_test_object_deps_done" = no; then + if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" + _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" + _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi @@ -7102,51 +7643,6 @@ _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; esac ]) @@ -7155,7 +7651,7 @@ 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!^ !!'` + _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]) @@ -7175,10 +7671,10 @@ # -------------------------- # 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'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then +if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi @@ -7215,7 +7711,7 @@ # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then +if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t @@ -7237,7 +7733,7 @@ _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. - lt_save_CC="$CC" + lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} @@ -7251,21 +7747,25 @@ AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no + 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 "$enable_shared" = yes && enable_static=no + 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 "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + 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 @@ -7273,11 +7773,11 @@ AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -7294,9 +7794,9 @@ fi # test -n "$compiler" GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG @@ -7306,11 +7806,11 @@ # ------------------------- # 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'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) -if test -z "$FC" || test "X$FC" = "Xno"; then +if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi @@ -7347,7 +7847,7 @@ # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then +if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t @@ -7369,7 +7869,7 @@ _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. - lt_save_CC="$CC" + lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} @@ -7385,21 +7885,25 @@ AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no + 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 "$enable_shared" = yes && enable_static=no + 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 "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + 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 @@ -7407,11 +7911,11 @@ AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + 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" + _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 @@ -7431,7 +7935,7 @@ GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes +fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG @@ -7441,7 +7945,7 @@ # -------------------------- # 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'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE @@ -7475,7 +7979,7 @@ CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" +_LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. @@ -7512,7 +8016,7 @@ # -------------------------- # 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'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE @@ -7546,7 +8050,7 @@ CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" +_LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. @@ -7583,7 +8087,7 @@ # ------------------------- # 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'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE @@ -7599,7 +8103,7 @@ 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" +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 @@ -7609,7 +8113,7 @@ _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. -lt_save_CC="$CC" +lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= @@ -7638,7 +8142,7 @@ [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) @@ -7749,7 +8253,7 @@ # 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 + test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in @@ -7766,9 +8270,9 @@ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break + 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 + if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi @@ -7792,27 +8296,7 @@ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false @@ -7836,102 +8320,9 @@ ])# _LT_CHECK_SHELL_FEATURES -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- -# Determine which file name conversion functions should be used by +# 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],
View file
libde265-1.0.2.tar.gz/m4/ltoptions.m4 -> libde265-1.0.3.tar.gz/m4/ltoptions.m4
Changed
@@ -1,14 +1,14 @@ # Helper functions for option handling. -*- Autoconf -*- # -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 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 7 ltoptions.m4 +# 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])]) @@ -29,7 +29,7 @@ [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 + [m4_warning([Unknown $1 option '$2'])])[]dnl ]) @@ -75,13 +75,15 @@ 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 '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_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 @@ -112,7 +114,7 @@ [_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.]) +put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -148,7 +150,7 @@ _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.]) +put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -157,9 +159,9 @@ # _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'. +# 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], @@ -172,14 +174,14 @@ *) enable_shared=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) @@ -211,9 +213,9 @@ # _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'. +# 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], @@ -226,14 +228,14 @@ *) enable_static=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) @@ -265,9 +267,9 @@ # _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'. +# 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], @@ -280,14 +282,14 @@ *) 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," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) @@ -304,14 +306,14 @@ [_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.]) +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.]) +the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -319,11 +321,64 @@ 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' +# 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'. +# 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@:>@], @@ -334,19 +389,17 @@ *) pic_mode=default # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC @@ -359,7 +412,7 @@ [_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.]) +put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility:
View file
libde265-1.0.2.tar.gz/m4/ltsugar.m4 -> libde265-1.0.3.tar.gz/m4/ltsugar.m4
Changed
@@ -1,6 +1,7 @@ # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# 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 @@ -33,7 +34,7 @@ # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. +# 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])], @@ -44,7 +45,7 @@ # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# 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
View file
libde265-1.0.2.tar.gz/m4/ltversion.m4 -> libde265-1.0.3.tar.gz/m4/ltversion.m4
Changed
@@ -1,6 +1,6 @@ # ltversion.m4 -- version numbers -*- Autoconf -*- # -# Copyright (C) 2004 Free Software Foundation, Inc. +# 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 @@ -9,15 +9,15 @@ # @configure_input@ -# serial 3337 ltversion.m4 +# serial 4179 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' +[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) ])
View file
libde265-1.0.2.tar.gz/m4/lt~obsolete.m4 -> libde265-1.0.3.tar.gz/m4/lt~obsolete.m4
Changed
@@ -1,6 +1,7 @@ # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# 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 @@ -11,7 +12,7 @@ # These exist entirely to fool aclocal when bootstrapping libtool. # -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# 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. # @@ -25,7 +26,7 @@ # 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. +# 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
View file
libde265-1.0.2.tar.gz/missing -> libde265-1.0.3.tar.gz/missing
Changed
@@ -3,7 +3,7 @@ scriptversion=2013-10-28.13; # UTC -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. # This program is free software; you can redistribute it and/or modify
View file
libde265-1.0.2.tar.gz/sherlock265/Makefile.in -> libde265-1.0.3.tar.gz/sherlock265/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -85,8 +95,6 @@ @HAVE_SWSCALE_TRUE@am__append_3 = $(SWSCALE_CFLAGS) @HAVE_SWSCALE_TRUE@am__append_4 = $(SWSCALE_LIBS) subdir = sherlock265 -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp COPYING README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -97,6 +105,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -197,6 +206,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp COPYING \ + README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -249,6 +260,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -331,6 +343,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -387,7 +400,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sherlock265/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sherlock265/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -825,6 +837,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS +.PRECIOUS: Makefile + moc_VideoWidget.cpp: VideoWidget.hh $(QTMOC) $(DEFINES) $(INCPATH) VideoWidget.hh -o moc_VideoWidget.cpp
View file
libde265-1.0.2.tar.gz/sherlock265/VideoDecoder.cc -> libde265-1.0.3.tar.gz/sherlock265/VideoDecoder.cc
Changed
@@ -173,19 +173,37 @@ { // --- convert to RGB --- + de265_chroma chroma = de265_get_chroma_format(img); + + int map[3]; + Image<Pixel> visu; - visu.Create(img->get_width(), img->get_height(), Colorspace_YUV, Chroma_420); + if (chroma == de265_chroma_420) { + visu.Create(img->get_width(), img->get_height(), Colorspace_YUV, Chroma_420); + map[0]=0; + map[1]=1; + map[2]=2; + } + else { + visu.Create(img->get_width(), img->get_height(), Colorspace_RGB, Chroma_444); + map[0]=1; + map[1]=2; + map[2]=0; + } for (int y=0;y<img->get_height(0);y++) { - memcpy(visu.AskFrameY()[y], img->get_image_plane_at_pos(0, 0,y), img->get_width(0)); + memcpy(visu.AskFrame(BitmapChannel(map[0]))[y], + img->get_image_plane_at_pos(0, 0,y), img->get_width(0)); } for (int y=0;y<img->get_height(1);y++) { - memcpy(visu.AskFrameU()[y], img->get_image_plane_at_pos(1, 0,y), img->get_width(1)); + memcpy(visu.AskFrame(BitmapChannel(map[1]))[y], + img->get_image_plane_at_pos(1, 0,y), img->get_width(1)); } for (int y=0;y<img->get_height(2);y++) { - memcpy(visu.AskFrameV()[y], img->get_image_plane_at_pos(2, 0,y), img->get_width(2)); + memcpy(visu.AskFrame(BitmapChannel(map[2]))[y], + img->get_image_plane_at_pos(2, 0,y), img->get_width(2)); } Image<Pixel> debugvisu;
View file
libde265-1.0.2.tar.gz/tools/Makefile.am -> libde265-1.0.3.tar.gz/tools/Makefile.am
Changed
@@ -43,4 +43,3 @@ bjoentegaard_LDFLAGS = bjoentegaard_LDADD = ../libde265/libde265.la -lstdc++ bjoentegaard_SOURCES = bjoentegaard.cc -
View file
libde265-1.0.2.tar.gz/tools/Makefile.in -> libde265-1.0.3.tar.gz/tools/Makefile.in
Changed
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -85,8 +95,6 @@ @HAVE_VIDEOGFX_TRUE@am__append_1 = $(VIDEOGFX_CFLAGS) @HAVE_VIDEOGFX_TRUE@am__append_2 = $(VIDEOGFX_LIBS) subdir = tools -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ @@ -97,6 +105,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -205,6 +214,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -257,6 +267,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -339,6 +350,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -398,7 +410,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -819,6 +830,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.