build system updated
This commit is contained in:
		
							
								
								
									
										136
									
								
								INSTALL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								INSTALL
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
				
			|||||||
 | 
					Install Software
 | 
				
			||||||
 | 
					================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are prebuilt software packages in the repositories, look in
 | 
				
			||||||
 | 
					https://repository.mrw.sh for your operating system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note: PublicKey has changed on Novmber 1st 2015, please import the new
 | 
				
			||||||
 | 
					key.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Linux
 | 
				
			||||||
 | 
					-----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are package repositories for most distributions at https://repository.mrw.sh.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Ubuntu and Debian
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To accept my signature, install my key:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wget -O- https://repository.mrw.sh/PublicKey \
 | 
				
			||||||
 | 
					            | sudo apt-key add -
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can install all software using your package manager (`apt`), first install the repository:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sudo apt-get install -y wget software-properties-common apt-transport-https
 | 
				
			||||||
 | 
					        sudo apt-add-repository https://repository.mrw.sh
 | 
				
			||||||
 | 
					        sudo apt-get update -y
 | 
				
			||||||
 | 
					Then you can install any project you wish, e.g. [`webtester`](https://mrw.sh/development/webtester):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sudo apt-get install webtester -y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### OpenSUSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To accept my signature, install my key:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wget https://repository.mrw.sh/PublicKey
 | 
				
			||||||
 | 
					        rpm --import PublicKey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use your packagemanager (`zypper` or _YaST_). First install the repostitory:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        zypper ar https://repository.mrw.sh/opensuse/marc-waeckerlin.repo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then install packages from the repository, e.g. [`webtester`](https://mrw.sh/development/webtester):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        zypper install webtester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In case of trouble: Check if your version of OpenSUSE is supported,
 | 
				
			||||||
 | 
					use `lsb_release -rs` to get the version of your OpenSUSE:
 | 
				
			||||||
 | 
					https://drepository.mrw.sh/opensuse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Fedora
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To accept my signature, install my key:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wget https://repository.mrw.sh/PublicKey
 | 
				
			||||||
 | 
					        rpm --import PublicKey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use your packagemanager (`dnf`). First install the repository:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dnf install 'dnf-command(config-manager)'
 | 
				
			||||||
 | 
					        dnf config-manager --add-repo https://repository.mrw.sh/fedora/marc-waeckerlin.repo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then install packages from the repository, e.g. [`webtester`](https://mrw.sh/development/webtester):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dnf install webtester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In case of trouble: Check if your version of Fedora is supported, use `lsb_release -rs` to get the version of your Fedora: https://repository.mrw.sh/fedora
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### CentOS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To accept my signature, install my key:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wget https://repository.mrw.sh/PublicKey
 | 
				
			||||||
 | 
					        rpm --import PublicKey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use your packagemanager (`yum`). First install the repository:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        yum install wget
 | 
				
			||||||
 | 
					        wget -O/etc/yum.repos.d/marc-waeckerlin.repo https://repository.mrw.sh/centos/marc-waeckerlin.repo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then install packages from the repository, e.g. [`webtester`](https://mrw.sh/development/webtester):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        yum install webtester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In case of trouble: Check if your version of CentOS is supported, use lsb_release -rs to get the version of your CentOS: https://repository.mrw.sh/centos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Mageia
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To accept my signature, install my key:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wget https://repository.mrw.sh/PublicKey
 | 
				
			||||||
 | 
					        rpm --import PublicKey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use your packagemanager (`dnf`). First install the repository:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dnf install 'dnf-command(config-manager)'
 | 
				
			||||||
 | 
					        dnf config-manager --add-repo https://repository.mrw.sh/mageia/marc-waeckerlin.repo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then install packages from the repository, e.g. [`webtester`](https://mrw.sh/development/webtester):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dnf install webtester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Other Linux Distributions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Either use the nearest possible distribution, or use alien to convert from another distribution to your preferred package format, or compile the project yourself (see below).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Windows
 | 
				
			||||||
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Download from https://repository.mrw.sh/windows
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MacOSX
 | 
				
			||||||
 | 
					------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You need e.g. Mac Ports to compile. Install the following dependencies:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sudo port install subversion svn2cl doxygen graphviz cppunit libtool boost log4cxx qt5-mac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fix libtool-bug:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sudo ln -s /opt/local/bin/glibtoolize /opt/local/bin/libtoolize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Compile from Source
 | 
				
			||||||
 | 
					-------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For all unsupported operating systems, including MacOSX.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To compile, please download the tar-sources from: https://repository.mrw.sh/sources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then untar the package and use the common commands, e.g. for version `1.0.2` of a project named project, that means:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        tar xzf project-1.0.2.tar.gz
 | 
				
			||||||
 | 
					        cd project-1.0.2
 | 
				
			||||||
 | 
					        ./bootstrap.sh
 | 
				
			||||||
 | 
					        ./configure
 | 
				
			||||||
 | 
					        make
 | 
				
			||||||
 | 
					        sudo make install
 | 
				
			||||||
@@ -130,14 +130,6 @@ AC_DEFUN([AX_CHECK_QT], [
 | 
				
			|||||||
      QT_PLUGIN_PATH="${QTDIR}/plugins"
 | 
					      QT_PLUGIN_PATH="${QTDIR}/plugins"
 | 
				
			||||||
    elif test -d "${QTDIR}/share/qt5/plugins; then
 | 
					    elif test -d "${QTDIR}/share/qt5/plugins; then
 | 
				
			||||||
      QT_PLUGIN_PATH="${QTDIR}/share/qt5/plugins"
 | 
					      QT_PLUGIN_PATH="${QTDIR}/share/qt5/plugins"
 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      AC_MSG_ERROR([QT_PLUGIN_PATH not found
 | 
					 | 
				
			||||||
 - not in: ${qt_libdir}/plugins
 | 
					 | 
				
			||||||
 - not in: ${qt_libdir}/qt5/plugins
 | 
					 | 
				
			||||||
 - not in: ${qt_host_bins}/../plugins
 | 
					 | 
				
			||||||
 - not in: ${QTDIR}/plugins
 | 
					 | 
				
			||||||
 - not in: ${QTDIR}/share/qt5/plugins
 | 
					 | 
				
			||||||
])
 | 
					 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    MOC_FLAGS+=" -DHAVE_$1=1 ${[$1]5_CFLAGS}"
 | 
					    MOC_FLAGS+=" -DHAVE_$1=1 ${[$1]5_CFLAGS}"
 | 
				
			||||||
    [$1]_CPPFLAGS="${[$1]5_CFLAGS}"
 | 
					    [$1]_CPPFLAGS="${[$1]5_CFLAGS}"
 | 
				
			||||||
@@ -192,14 +184,6 @@ AC_DEFUN([AX_CHECK_QT], [
 | 
				
			|||||||
        QT_PLUGIN_PATH="${QTDIR}/plugins"
 | 
					        QT_PLUGIN_PATH="${QTDIR}/plugins"
 | 
				
			||||||
      elif test -d "${QTDIR}/share/qt5/plugins; then
 | 
					      elif test -d "${QTDIR}/share/qt5/plugins; then
 | 
				
			||||||
        QT_PLUGIN_PATH="${QTDIR}/share/qt5/plugins"
 | 
					        QT_PLUGIN_PATH="${QTDIR}/share/qt5/plugins"
 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
        AC_MSG_ERROR([QT_PLUGIN_PATH not found
 | 
					 | 
				
			||||||
 - not in: ${qt_libdir}/plugins
 | 
					 | 
				
			||||||
 - not in: ${qt_libdir}/qt5/plugins
 | 
					 | 
				
			||||||
 - not in: ${qt_host_bins}/../plugins
 | 
					 | 
				
			||||||
 - not in: ${QTDIR}/plugins
 | 
					 | 
				
			||||||
 - not in: ${QTDIR}/share/qt5/plugins
 | 
					 | 
				
			||||||
])
 | 
					 | 
				
			||||||
      fi
 | 
					      fi
 | 
				
			||||||
      MOC_FLAGS+=" -DHAVE_$1=1 ${$1_CFLAGS}"
 | 
					      MOC_FLAGS+=" -DHAVE_$1=1 ${$1_CFLAGS}"
 | 
				
			||||||
      [$1]_CPPFLAGS="${[$1]_CFLAGS}"
 | 
					      [$1]_CPPFLAGS="${[$1]_CFLAGS}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										948
									
								
								ax_cxx_compile_stdcxx.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										948
									
								
								ax_cxx_compile_stdcxx.m4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,948 @@
 | 
				
			|||||||
 | 
					# ===========================================================================
 | 
				
			||||||
 | 
					#  https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
 | 
				
			||||||
 | 
					# ===========================================================================
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# SYNOPSIS
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#   AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# DESCRIPTION
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#   Check for baseline language coverage in the compiler for the specified
 | 
				
			||||||
 | 
					#   version of the C++ standard.  If necessary, add switches to CXX and
 | 
				
			||||||
 | 
					#   CXXCPP to enable support.  VERSION may be '11' (for the C++11 standard)
 | 
				
			||||||
 | 
					#   or '14' (for the C++14 standard).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#   The second argument, if specified, indicates whether you insist on an
 | 
				
			||||||
 | 
					#   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
 | 
				
			||||||
 | 
					#   -std=c++11).  If neither is specified, you get whatever works, with
 | 
				
			||||||
 | 
					#   preference for an extended mode.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#   The third argument, if specified 'mandatory' or if left unspecified,
 | 
				
			||||||
 | 
					#   indicates that baseline support for the specified C++ standard is
 | 
				
			||||||
 | 
					#   required and that the macro should error out if no mode with that
 | 
				
			||||||
 | 
					#   support is found.  If specified 'optional', then configuration proceeds
 | 
				
			||||||
 | 
					#   regardless, after defining HAVE_CXX${VERSION} if and only if a
 | 
				
			||||||
 | 
					#   supporting mode is found.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# LICENSE
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
 | 
				
			||||||
 | 
					#   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
 | 
				
			||||||
 | 
					#   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
 | 
				
			||||||
 | 
					#   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
 | 
				
			||||||
 | 
					#   Copyright (c) 2015 Paul Norman <penorman@mac.com>
 | 
				
			||||||
 | 
					#   Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
 | 
				
			||||||
 | 
					#   Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#   Copying and distribution of this file, with or without modification, are
 | 
				
			||||||
 | 
					#   permitted in any medium without royalty provided the copyright notice
 | 
				
			||||||
 | 
					#   and this notice are preserved.  This file is offered as-is, without any
 | 
				
			||||||
 | 
					#   warranty.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#serial 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
 | 
				
			||||||
 | 
					dnl  (serial version number 13).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
 | 
				
			||||||
 | 
					  m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
 | 
				
			||||||
 | 
					        [$1], [14], [ax_cxx_compile_alternatives="14 1y"],
 | 
				
			||||||
 | 
					        [$1], [17], [ax_cxx_compile_alternatives="17 1z"],
 | 
				
			||||||
 | 
					        [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
 | 
				
			||||||
 | 
					  m4_if([$2], [], [],
 | 
				
			||||||
 | 
					        [$2], [ext], [],
 | 
				
			||||||
 | 
					        [$2], [noext], [],
 | 
				
			||||||
 | 
					        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
 | 
				
			||||||
 | 
					  m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
 | 
				
			||||||
 | 
					        [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
 | 
				
			||||||
 | 
					        [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
 | 
				
			||||||
 | 
					        [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
 | 
				
			||||||
 | 
					  AC_LANG_PUSH([C++])dnl
 | 
				
			||||||
 | 
					  ac_success=no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  m4_if([$2], [noext], [], [dnl
 | 
				
			||||||
 | 
					  if test x$ac_success = xno; then
 | 
				
			||||||
 | 
					    for alternative in ${ax_cxx_compile_alternatives}; do
 | 
				
			||||||
 | 
					      switch="-std=gnu++${alternative}"
 | 
				
			||||||
 | 
					      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
 | 
				
			||||||
 | 
					      AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
 | 
				
			||||||
 | 
					                     $cachevar,
 | 
				
			||||||
 | 
					        [ac_save_CXX="$CXX"
 | 
				
			||||||
 | 
					         CXX="$CXX $switch"
 | 
				
			||||||
 | 
					         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
 | 
				
			||||||
 | 
					          [eval $cachevar=yes],
 | 
				
			||||||
 | 
					          [eval $cachevar=no])
 | 
				
			||||||
 | 
					         CXX="$ac_save_CXX"])
 | 
				
			||||||
 | 
					      if eval test x\$$cachevar = xyes; then
 | 
				
			||||||
 | 
					        CXX="$CXX $switch"
 | 
				
			||||||
 | 
					        if test -n "$CXXCPP" ; then
 | 
				
			||||||
 | 
					          CXXCPP="$CXXCPP $switch"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        ac_success=yes
 | 
				
			||||||
 | 
					        break
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					  fi])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  m4_if([$2], [ext], [], [dnl
 | 
				
			||||||
 | 
					  if test x$ac_success = xno; then
 | 
				
			||||||
 | 
					    dnl HP's aCC needs +std=c++11 according to:
 | 
				
			||||||
 | 
					    dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
 | 
				
			||||||
 | 
					    dnl Cray's crayCC needs "-h std=c++11"
 | 
				
			||||||
 | 
					    for alternative in ${ax_cxx_compile_alternatives}; do
 | 
				
			||||||
 | 
					      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
 | 
				
			||||||
 | 
					        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
 | 
				
			||||||
 | 
					        AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
 | 
				
			||||||
 | 
					                       $cachevar,
 | 
				
			||||||
 | 
					          [ac_save_CXX="$CXX"
 | 
				
			||||||
 | 
					           CXX="$CXX $switch"
 | 
				
			||||||
 | 
					           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
 | 
				
			||||||
 | 
					            [eval $cachevar=yes],
 | 
				
			||||||
 | 
					            [eval $cachevar=no])
 | 
				
			||||||
 | 
					           CXX="$ac_save_CXX"])
 | 
				
			||||||
 | 
					        if eval test x\$$cachevar = xyes; then
 | 
				
			||||||
 | 
					          CXX="$CXX $switch"
 | 
				
			||||||
 | 
					          if test -n "$CXXCPP" ; then
 | 
				
			||||||
 | 
					            CXXCPP="$CXXCPP $switch"
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
 | 
					          ac_success=yes
 | 
				
			||||||
 | 
					          break
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					      done
 | 
				
			||||||
 | 
					      if test x$ac_success = xyes; then
 | 
				
			||||||
 | 
					        break
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					  fi])
 | 
				
			||||||
 | 
					  AC_LANG_POP([C++])
 | 
				
			||||||
 | 
					  if test x$ax_cxx_compile_cxx$1_required = xtrue; then
 | 
				
			||||||
 | 
					    if test x$ac_success = xno; then
 | 
				
			||||||
 | 
					      AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  if test x$ac_success = xno; then
 | 
				
			||||||
 | 
					    HAVE_CXX$1=0
 | 
				
			||||||
 | 
					    AC_MSG_NOTICE([No compiler with C++$1 support was found])
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    HAVE_CXX$1=1
 | 
				
			||||||
 | 
					    AC_DEFINE(HAVE_CXX$1,1,
 | 
				
			||||||
 | 
					              [define if the compiler supports basic C++$1 syntax])
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  AC_SUBST(HAVE_CXX$1)
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl  Test body for checking C++11 support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
 | 
				
			||||||
 | 
					  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl  Test body for checking C++14 support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
 | 
				
			||||||
 | 
					  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
 | 
				
			||||||
 | 
					  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
 | 
				
			||||||
 | 
					  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
 | 
				
			||||||
 | 
					  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
 | 
				
			||||||
 | 
					  _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl  Tests for new features in C++11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// If the compiler admits that it is not ready for C++11, why torture it?
 | 
				
			||||||
 | 
					// Hopefully, this will speed up the test.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __cplusplus
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#error "This is not a C++ compiler"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#elif __cplusplus < 201103L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#error "This is not a C++11 compiler"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace cxx11
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_static_assert
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template <typename T>
 | 
				
			||||||
 | 
					    struct check
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static_assert(sizeof(int) <= sizeof(T), "not big enough");
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_final_override
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct Base
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      virtual void f() {}
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct Derived : public Base
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      virtual void f() override {}
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_double_right_angle_brackets
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename T >
 | 
				
			||||||
 | 
					    struct check {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    typedef check<void> single_type;
 | 
				
			||||||
 | 
					    typedef check<check<void>> double_type;
 | 
				
			||||||
 | 
					    typedef check<check<check<void>>> triple_type;
 | 
				
			||||||
 | 
					    typedef check<check<check<check<void>>>> quadruple_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_decltype
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int
 | 
				
			||||||
 | 
					    f()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int a = 1;
 | 
				
			||||||
 | 
					      decltype(a) b = 2;
 | 
				
			||||||
 | 
					      return a + b;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_type_deduction
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename T1, typename T2 >
 | 
				
			||||||
 | 
					    struct is_same
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static const bool value = false;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename T >
 | 
				
			||||||
 | 
					    struct is_same<T, T>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static const bool value = true;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename T1, typename T2 >
 | 
				
			||||||
 | 
					    auto
 | 
				
			||||||
 | 
					    add(T1 a1, T2 a2) -> decltype(a1 + a2)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return a1 + a2;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int
 | 
				
			||||||
 | 
					    test(const int c, volatile int v)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(0)>::value == true, "");
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(c)>::value == false, "");
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(v)>::value == false, "");
 | 
				
			||||||
 | 
					      auto ac = c;
 | 
				
			||||||
 | 
					      auto av = v;
 | 
				
			||||||
 | 
					      auto sumi = ac + av + 'x';
 | 
				
			||||||
 | 
					      auto sumf = ac + av + 1.0;
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(ac)>::value == true, "");
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(av)>::value == true, "");
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(sumi)>::value == true, "");
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(sumf)>::value == false, "");
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
 | 
				
			||||||
 | 
					      return (sumf > 0.0) ? sumi : add(c, v);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_noexcept
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int f() { return 0; }
 | 
				
			||||||
 | 
					    int g() noexcept { return 0; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static_assert(noexcept(f()) == false, "");
 | 
				
			||||||
 | 
					    static_assert(noexcept(g()) == true, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_constexpr
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename CharT >
 | 
				
			||||||
 | 
					    unsigned long constexpr
 | 
				
			||||||
 | 
					    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename CharT >
 | 
				
			||||||
 | 
					    unsigned long constexpr
 | 
				
			||||||
 | 
					    strlen_c(const CharT *const s) noexcept
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return strlen_c_r(s, 0UL);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static_assert(strlen_c("") == 0UL, "");
 | 
				
			||||||
 | 
					    static_assert(strlen_c("1") == 1UL, "");
 | 
				
			||||||
 | 
					    static_assert(strlen_c("example") == 7UL, "");
 | 
				
			||||||
 | 
					    static_assert(strlen_c("another\0example") == 7UL, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_rvalue_references
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < int N >
 | 
				
			||||||
 | 
					    struct answer
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static constexpr int value = N;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    answer<1> f(int&)       { return answer<1>(); }
 | 
				
			||||||
 | 
					    answer<2> f(const int&) { return answer<2>(); }
 | 
				
			||||||
 | 
					    answer<3> f(int&&)      { return answer<3>(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void
 | 
				
			||||||
 | 
					    test()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int i = 0;
 | 
				
			||||||
 | 
					      const int c = 0;
 | 
				
			||||||
 | 
					      static_assert(decltype(f(i))::value == 1, "");
 | 
				
			||||||
 | 
					      static_assert(decltype(f(c))::value == 2, "");
 | 
				
			||||||
 | 
					      static_assert(decltype(f(0))::value == 3, "");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_uniform_initialization
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct test
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static const int zero {};
 | 
				
			||||||
 | 
					      static const int one {1};
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static_assert(test::zero == 0, "");
 | 
				
			||||||
 | 
					    static_assert(test::one == 1, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_lambdas
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void
 | 
				
			||||||
 | 
					    test1()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      auto lambda1 = [](){};
 | 
				
			||||||
 | 
					      auto lambda2 = lambda1;
 | 
				
			||||||
 | 
					      lambda1();
 | 
				
			||||||
 | 
					      lambda2();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int
 | 
				
			||||||
 | 
					    test2()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      auto a = [](int i, int j){ return i + j; }(1, 2);
 | 
				
			||||||
 | 
					      auto b = []() -> int { return '0'; }();
 | 
				
			||||||
 | 
					      auto c = [=](){ return a + b; }();
 | 
				
			||||||
 | 
					      auto d = [&](){ return c; }();
 | 
				
			||||||
 | 
					      auto e = [a, &b](int x) mutable {
 | 
				
			||||||
 | 
					        const auto identity = [](int y){ return y; };
 | 
				
			||||||
 | 
					        for (auto i = 0; i < a; ++i)
 | 
				
			||||||
 | 
					          a += b--;
 | 
				
			||||||
 | 
					        return x + identity(a + b);
 | 
				
			||||||
 | 
					      }(0);
 | 
				
			||||||
 | 
					      return a + b + c + d + e;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int
 | 
				
			||||||
 | 
					    test3()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const auto nullary = [](){ return 0; };
 | 
				
			||||||
 | 
					      const auto unary = [](int x){ return x; };
 | 
				
			||||||
 | 
					      using nullary_t = decltype(nullary);
 | 
				
			||||||
 | 
					      using unary_t = decltype(unary);
 | 
				
			||||||
 | 
					      const auto higher1st = [](nullary_t f){ return f(); };
 | 
				
			||||||
 | 
					      const auto higher2nd = [unary](nullary_t f1){
 | 
				
			||||||
 | 
					        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      return higher1st(nullary) + higher2nd(nullary)(unary);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_variadic_templates
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template <int...>
 | 
				
			||||||
 | 
					    struct sum;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template <int N0, int... N1toN>
 | 
				
			||||||
 | 
					    struct sum<N0, N1toN...>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static constexpr auto value = N0 + sum<N1toN...>::value;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template <>
 | 
				
			||||||
 | 
					    struct sum<>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static constexpr auto value = 0;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static_assert(sum<>::value == 0, "");
 | 
				
			||||||
 | 
					    static_assert(sum<1>::value == 1, "");
 | 
				
			||||||
 | 
					    static_assert(sum<23>::value == 23, "");
 | 
				
			||||||
 | 
					    static_assert(sum<1, 2>::value == 3, "");
 | 
				
			||||||
 | 
					    static_assert(sum<5, 5, 11>::value == 21, "");
 | 
				
			||||||
 | 
					    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
 | 
				
			||||||
 | 
					  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
 | 
				
			||||||
 | 
					  // because of this.
 | 
				
			||||||
 | 
					  namespace test_template_alias_sfinae
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct foo {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<typename T>
 | 
				
			||||||
 | 
					    using member = typename T::member_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<typename T>
 | 
				
			||||||
 | 
					    void func(...) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<typename T>
 | 
				
			||||||
 | 
					    void func(member<T>*) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void test();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void test() { func<foo>(0); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}  // namespace cxx11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // __cplusplus >= 201103L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					]])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl  Tests for new features in C++14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// If the compiler admits that it is not ready for C++14, why torture it?
 | 
				
			||||||
 | 
					// Hopefully, this will speed up the test.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __cplusplus
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#error "This is not a C++ compiler"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#elif __cplusplus < 201402L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#error "This is not a C++14 compiler"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace cxx14
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_polymorphic_lambdas
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int
 | 
				
			||||||
 | 
					    test()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const auto lambda = [](auto&&... args){
 | 
				
			||||||
 | 
					        const auto istiny = [](auto x){
 | 
				
			||||||
 | 
					          return (sizeof(x) == 1UL) ? 1 : 0;
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        const int aretiny[] = { istiny(args)... };
 | 
				
			||||||
 | 
					        return aretiny[0];
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      return lambda(1, 1L, 1.0f, '1');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_binary_literals
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constexpr auto ivii = 0b0000000000101010;
 | 
				
			||||||
 | 
					    static_assert(ivii == 42, "wrong value");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_generalized_constexpr
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename CharT >
 | 
				
			||||||
 | 
					    constexpr unsigned long
 | 
				
			||||||
 | 
					    strlen_c(const CharT *const s) noexcept
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      auto length = 0UL;
 | 
				
			||||||
 | 
					      for (auto p = s; *p; ++p)
 | 
				
			||||||
 | 
					        ++length;
 | 
				
			||||||
 | 
					      return length;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static_assert(strlen_c("") == 0UL, "");
 | 
				
			||||||
 | 
					    static_assert(strlen_c("x") == 1UL, "");
 | 
				
			||||||
 | 
					    static_assert(strlen_c("test") == 4UL, "");
 | 
				
			||||||
 | 
					    static_assert(strlen_c("another\0test") == 7UL, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_lambda_init_capture
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int
 | 
				
			||||||
 | 
					    test()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      auto x = 0;
 | 
				
			||||||
 | 
					      const auto lambda1 = [a = x](int b){ return a + b; };
 | 
				
			||||||
 | 
					      const auto lambda2 = [a = lambda1(x)](){ return a; };
 | 
				
			||||||
 | 
					      return lambda2();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_digit_separators
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constexpr auto ten_million = 100'000'000;
 | 
				
			||||||
 | 
					    static_assert(ten_million == 100000000, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_return_type_deduction
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    auto f(int& x) { return x; }
 | 
				
			||||||
 | 
					    decltype(auto) g(int& x) { return x; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename T1, typename T2 >
 | 
				
			||||||
 | 
					    struct is_same
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static constexpr auto value = false;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template < typename T >
 | 
				
			||||||
 | 
					    struct is_same<T, T>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      static constexpr auto value = true;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int
 | 
				
			||||||
 | 
					    test()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      auto x = 0;
 | 
				
			||||||
 | 
					      static_assert(is_same<int, decltype(f(x))>::value, "");
 | 
				
			||||||
 | 
					      static_assert(is_same<int&, decltype(g(x))>::value, "");
 | 
				
			||||||
 | 
					      return x;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}  // namespace cxx14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // __cplusplus >= 201402L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					]])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl  Tests for new features in C++17
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// If the compiler admits that it is not ready for C++17, why torture it?
 | 
				
			||||||
 | 
					// Hopefully, this will speed up the test.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __cplusplus
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#error "This is not a C++ compiler"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#elif __cplusplus < 201703L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#error "This is not a C++17 compiler"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <initializer_list>
 | 
				
			||||||
 | 
					#include <utility>
 | 
				
			||||||
 | 
					#include <type_traits>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace cxx17
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_constexpr_lambdas
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constexpr int foo = [](){return 42;}();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test::nested_namespace::definitions
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_fold_expression
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<typename... Args>
 | 
				
			||||||
 | 
					    int multiply(Args... args)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return (args * ... * 1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<typename... Args>
 | 
				
			||||||
 | 
					    bool all(Args... args)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return (args && ...);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_extended_static_assert
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static_assert (true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_auto_brace_init_list
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    auto foo = {5};
 | 
				
			||||||
 | 
					    auto bar {5};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
 | 
				
			||||||
 | 
					    static_assert(std::is_same<int, decltype(bar)>::value);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_typename_in_template_template_parameter
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<template<typename> typename X> struct D;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_fallthrough_nodiscard_maybe_unused_attributes
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int f1()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return 42;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [[nodiscard]] int f2()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      [[maybe_unused]] auto unused = f1();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      switch (f1())
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					      case 17:
 | 
				
			||||||
 | 
					        f1();
 | 
				
			||||||
 | 
					        [[fallthrough]];
 | 
				
			||||||
 | 
					      case 42:
 | 
				
			||||||
 | 
					        f1();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return f1();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_extended_aggregate_initialization
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct base1
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int b1, b2 = 42;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct base2
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      base2() {
 | 
				
			||||||
 | 
					        b3 = 42;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      int b3;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct derived : base1, base2
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        int d;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    derived d1 {{1, 2}, {}, 4};  // full initialization
 | 
				
			||||||
 | 
					    derived d2 {{}, {}, 4};      // value-initialized bases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_general_range_based_for_loop
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct iter
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      int& operator* ()
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        return i;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const int& operator* () const
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        return i;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      iter& operator++()
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        ++i;
 | 
				
			||||||
 | 
					        return *this;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct sentinel
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int i;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool operator== (const iter& i, const sentinel& s)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return i.i == s.i;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool operator!= (const iter& i, const sentinel& s)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return !(i == s);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct range
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      iter begin() const
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        return {0};
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      sentinel end() const
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        return {5};
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void f()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      range r {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      for (auto i : r)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        [[maybe_unused]] auto v = i;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_lambda_capture_asterisk_this_by_value
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct t
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int i;
 | 
				
			||||||
 | 
					      int foo()
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        return [*this]()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          return i;
 | 
				
			||||||
 | 
					        }();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_enum_class_construction
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    enum class byte : unsigned char
 | 
				
			||||||
 | 
					    {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    byte foo {42};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_constexpr_if
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template <bool cond>
 | 
				
			||||||
 | 
					    int f ()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if constexpr(cond)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        return 13;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        return 42;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_selection_statement_with_initializer
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int f()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return 13;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int f2()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (auto i = f(); i > 0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        return 3;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      switch (auto i = f(); i + 4)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					      case 17:
 | 
				
			||||||
 | 
					        return 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      default:
 | 
				
			||||||
 | 
					        return 1;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_template_argument_deduction_for_class_templates
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template <typename T1, typename T2>
 | 
				
			||||||
 | 
					    struct pair
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      pair (T1 p1, T2 p2)
 | 
				
			||||||
 | 
					        : m1 {p1},
 | 
				
			||||||
 | 
					          m2 {p2}
 | 
				
			||||||
 | 
					      {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      T1 m1;
 | 
				
			||||||
 | 
					      T2 m2;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void f()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      [[maybe_unused]] auto p = pair{13, 42u};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_non_type_auto_template_parameters
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template <auto n>
 | 
				
			||||||
 | 
					    struct B
 | 
				
			||||||
 | 
					    {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    B<5> b1;
 | 
				
			||||||
 | 
					    B<'a'> b2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_structured_bindings
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int arr[2] = { 1, 2 };
 | 
				
			||||||
 | 
					    std::pair<int, int> pr = { 1, 2 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    auto f1() -> int(&)[2]
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return arr;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    auto f2() -> std::pair<int, int>&
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return pr;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct S
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int x1 : 2;
 | 
				
			||||||
 | 
					      volatile double y1;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    S f3()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return {};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    auto [ x1, y1 ] = f1();
 | 
				
			||||||
 | 
					    auto& [ xr1, yr1 ] = f1();
 | 
				
			||||||
 | 
					    auto [ x2, y2 ] = f2();
 | 
				
			||||||
 | 
					    auto& [ xr2, yr2 ] = f2();
 | 
				
			||||||
 | 
					    const auto [ x3, y3 ] = f3();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_exception_spec_type_system
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct Good {};
 | 
				
			||||||
 | 
					    struct Bad {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void g1() noexcept;
 | 
				
			||||||
 | 
					    void g2();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<typename T>
 | 
				
			||||||
 | 
					    Bad
 | 
				
			||||||
 | 
					    f(T*, T*);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<typename T1, typename T2>
 | 
				
			||||||
 | 
					    Good
 | 
				
			||||||
 | 
					    f(T1*, T2*);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace test_inline_variables
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<class T> void f(T)
 | 
				
			||||||
 | 
					    {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<class T> inline T g(T)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return T{};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<> inline void f<>(int)
 | 
				
			||||||
 | 
					    {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<> int g<>(int)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return 5;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}  // namespace cxx17
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // __cplusplus < 201703L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					]])
 | 
				
			||||||
@@ -170,9 +170,11 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
 | 
				
			|||||||
  AX_SUBST(NUMBERS)
 | 
					  AX_SUBST(NUMBERS)
 | 
				
			||||||
  AX_SUBST(HOME)
 | 
					  AX_SUBST(HOME)
 | 
				
			||||||
  if test -f README.md; then
 | 
					  if test -f README.md; then
 | 
				
			||||||
 | 
					    README_FILE=README.md
 | 
				
			||||||
    README=$(tail -n +3 README.md)
 | 
					    README=$(tail -n +3 README.md)
 | 
				
			||||||
    DESCRIPTION=$(head -1 README.md | sed 's,^#\+ *,,;s, *#\+$,,')
 | 
					    DESCRIPTION=$(head -1 README.md | sed 's,^#\+ *,,;s, *#\+$,,')
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
 | 
					    README_FILE=README
 | 
				
			||||||
    README=$(tail -n +3 README)
 | 
					    README=$(tail -n +3 README)
 | 
				
			||||||
    DESCRIPTION=$(head -1 README)
 | 
					    DESCRIPTION=$(head -1 README)
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
@@ -182,6 +184,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
 | 
				
			|||||||
  else
 | 
					  else
 | 
				
			||||||
    README_HTML="${README}"
 | 
					    README_HTML="${README}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					  AX_SUBST(README_FILE)
 | 
				
			||||||
  AX_SUBST(README)
 | 
					  AX_SUBST(README)
 | 
				
			||||||
  _AM_SUBST_NOTMAKE([README])
 | 
					  _AM_SUBST_NOTMAKE([README])
 | 
				
			||||||
  AX_SUBST(README_ESCAPED)
 | 
					  AX_SUBST(README_ESCAPED)
 | 
				
			||||||
@@ -218,8 +221,17 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
 | 
				
			|||||||
  AX_SUBST(AUTHOR_URL)
 | 
					  AX_SUBST(AUTHOR_URL)
 | 
				
			||||||
  AX_SUBST(AUTHOR_MAIL)
 | 
					  AX_SUBST(AUTHOR_MAIL)
 | 
				
			||||||
  AX_SUBST(PACKAGER)
 | 
					  AX_SUBST(PACKAGER)
 | 
				
			||||||
  #PROJECT_URL="${PROJECT_URL:-${AUTHOR_URL}}"
 | 
					  PROJECT_URL="${PROJECT_URL:-${AUTHOR_URL}}"
 | 
				
			||||||
  SOURCE_DOWNLOAD="${SOURCE_DOWNLOAD:-${AUTHOR_URL}/downloads/${PACKAGE_NAME}}"
 | 
					  for path in . .. ../.. ../../..; do
 | 
				
			||||||
 | 
					    if test -d ${path}/.svn; then
 | 
				
			||||||
 | 
					      PROJECT_URL="$(LANG= svn info | sed -n 's,^Repository Root: ,,p')"
 | 
				
			||||||
 | 
					      break
 | 
				
			||||||
 | 
					    elif test -d ${path}/.git; then
 | 
				
			||||||
 | 
					      PROJECT_URL="$(git remote get-url origin)"
 | 
				
			||||||
 | 
					      break
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  done
 | 
				
			||||||
 | 
					  SOURCE_DOWNLOAD="${SOURCE_DOWNLOAD:-${PROJECT_URL}}"
 | 
				
			||||||
  AX_SUBST(PROJECT_URL)
 | 
					  AX_SUBST(PROJECT_URL)
 | 
				
			||||||
  AX_SUBST(SOURCE_DOWNLOAD)
 | 
					  AX_SUBST(SOURCE_DOWNLOAD)
 | 
				
			||||||
  VENDOR=$((lsb_release -is 2>/dev/null || echo unknown) | tr ' ' '_')
 | 
					  VENDOR=$((lsb_release -is 2>/dev/null || echo unknown) | tr ' ' '_')
 | 
				
			||||||
@@ -320,7 +332,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
 | 
				
			|||||||
  AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-standard-project-targets], [makefile.in])
 | 
					  AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-standard-project-targets], [makefile.in])
 | 
				
			||||||
  test -f makefile.in && cat >> makefile.in <<EOF
 | 
					  test -f makefile.in && cat >> makefile.in <<EOF
 | 
				
			||||||
#### Begin: Appended by $0
 | 
					#### Begin: Appended by $0
 | 
				
			||||||
EXTRA_DIST += bootstrap.sh ax_init_standard_project.m4 ax_cxx_compile_stdcxx_11.m4 \
 | 
					EXTRA_DIST += bootstrap.sh ax_init_standard_project.m4 ax_cxx_compile_stdcxx.m4 \
 | 
				
			||||||
              ax_check_qt.m4 resolve-debbuilddeps.sh resolve-rpmbuilddeps.sh \
 | 
					              ax_check_qt.m4 resolve-debbuilddeps.sh resolve-rpmbuilddeps.sh \
 | 
				
			||||||
              build-resource-file.sh mac-create-app-bundle.sh
 | 
					              build-resource-file.sh mac-create-app-bundle.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -338,9 +350,9 @@ EOF
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# use this in configure.ac to support C++
 | 
					# use this in configure.ac to support C++
 | 
				
			||||||
AC_DEFUN([AX_USE_CXX], [
 | 
					AC_DEFUN([AX_USE_CXX], [
 | 
				
			||||||
  m4_include(ax_cxx_compile_stdcxx_11.m4)
 | 
					  m4_include(ax_cxx_compile_stdcxx.m4)
 | 
				
			||||||
  AC_LANG(C++)
 | 
					  AC_LANG(C++)
 | 
				
			||||||
  AX_CXX_COMPILE_STDCXX_14(noext, optional)
 | 
					  AX_CXX_COMPILE_STDCXX([17], [noext], [optional])
 | 
				
			||||||
  AC_PROG_CXX
 | 
					  AC_PROG_CXX
 | 
				
			||||||
  AC_PROG_CPP
 | 
					  AC_PROG_CPP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -379,6 +391,20 @@ maintainer-clean-cxx-targets:
 | 
				
			|||||||
EOF
 | 
					EOF
 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# require specific C++ version
 | 
				
			||||||
 | 
					AC_DEFUN([AX_USE_CXX_11], [
 | 
				
			||||||
 | 
					  AX_USE_CXX
 | 
				
			||||||
 | 
					  AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					AC_DEFUN([AX_USE_CXX_14], [
 | 
				
			||||||
 | 
					  AX_USE_CXX
 | 
				
			||||||
 | 
					  AX_CXX_COMPILE_STDCXX([14], [noext], [mandatory])
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					AC_DEFUN([AX_USE_CXX_17], [
 | 
				
			||||||
 | 
					  AX_USE_CXX
 | 
				
			||||||
 | 
					  AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory])
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# use this in configure.ac to support old school C
 | 
					# use this in configure.ac to support old school C
 | 
				
			||||||
AC_DEFUN([AX_USE_C], [
 | 
					AC_DEFUN([AX_USE_C], [
 | 
				
			||||||
  AC_LANG(C)
 | 
					  AC_LANG(C)
 | 
				
			||||||
@@ -625,7 +651,6 @@ AC_DEFUN([AX_USE_DOXYGEN], [
 | 
				
			|||||||
  AC_CHECK_PROG(have_doxygen, doxygen, yes, no)
 | 
					  AC_CHECK_PROG(have_doxygen, doxygen, yes, no)
 | 
				
			||||||
  AC_CHECK_PROG(have_dot, dot, yes, no)
 | 
					  AC_CHECK_PROG(have_dot, dot, yes, no)
 | 
				
			||||||
  AC_CHECK_PROG(have_mscgen, mscgen, yes, no)
 | 
					  AC_CHECK_PROG(have_mscgen, mscgen, yes, no)
 | 
				
			||||||
  AM_CONDITIONAL(NEED_PLANTUML, test "$have_doxygen" = "yes" -a "1.8.11" != $((echo "1.8.11"; doxygen -v 2>/dev/null) | sort -V | head -1))
 | 
					 | 
				
			||||||
  PDF_DOC=${PACKAGE_NAME}-${PACKAGE_VERSION}.pdf
 | 
					  PDF_DOC=${PACKAGE_NAME}-${PACKAGE_VERSION}.pdf
 | 
				
			||||||
  AC_SUBST(PDF_DOC)
 | 
					  AC_SUBST(PDF_DOC)
 | 
				
			||||||
  if test "$have_doxygen" = "no"; then
 | 
					  if test "$have_doxygen" = "no"; then
 | 
				
			||||||
@@ -650,28 +675,12 @@ AC_DEFUN([AX_USE_DOXYGEN], [
 | 
				
			|||||||
  AX_ADD_MAKEFILE_TARGET_DEP([.PHONY], [pdf gen-uml-images], [doc/makefile.in])
 | 
					  AX_ADD_MAKEFILE_TARGET_DEP([.PHONY], [pdf gen-uml-images], [doc/makefile.in])
 | 
				
			||||||
  test -f doc/makefile.in && cat >> doc/makefile.in <<EOF
 | 
					  test -f doc/makefile.in && cat >> doc/makefile.in <<EOF
 | 
				
			||||||
#### Begin: Appended by $0
 | 
					#### Begin: Appended by $0
 | 
				
			||||||
doc: doxyfile @NEED_PLANTUML_TRUE@ gen-uml-images
 | 
					doc: doxyfile
 | 
				
			||||||
	@NEED_PLANTUML_TRUE@ doxyadd() { grep -q "\$\$[1] += \$\$[2]" doxyfile || sed -i '/^'"\$\$[1]"' *=/a'"\$\$[1]"' += '"\$\$[2]" doxyfile; }; \\
 | 
					 | 
				
			||||||
	@NEED_PLANTUML_TRUE@ doxyadd ALIASES '"startuml{1}=@image html \\\\1\\\\n@image latex \\\\1\\\\n\\\\if DontIgnorePlantUMLCode"'; \\
 | 
					 | 
				
			||||||
	@NEED_PLANTUML_TRUE@ doxyadd ALIASES '"enduml=\\\\endif"'; \\
 | 
					 | 
				
			||||||
	@NEED_PLANTUML_TRUE@ doxyadd IMAGE_PATH '"gen-uml-images"';
 | 
					 | 
				
			||||||
	doxygen doxyfile
 | 
						doxygen doxyfile
 | 
				
			||||||
@PEDANTIC_TRUE@	test \! -s doxygen.errors
 | 
					@PEDANTIC_TRUE@	test \! -s doxygen.errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NEED_PLANTUML_TRUE@EXTRA_DIST = ${EXTRA_DIST} plantuml.jar
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@gen-uml-images:
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@	test -d gen-uml-images || mkdir gen-uml-images
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@	eval \$\$(sed -n 's, *INPUT *\\(+\\?\\)= *\\(.*\\),INPUT\\1=" \\2",gp' doxyfile); \\
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@	eval \$\$(sed -n 's, *FILE_PATTERNS *\\(+\\?\\)= *\\(.*\\),FILE_PATTERNS\\1=" \\2",gp' doxyfile); \\
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@	SOURCES="**.("\$\$(echo \$\${FILE_PATTERNS} | sed 's,*.,,g;s, ,|,g')")"; \\
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@	for src in \$\$INPUT; do \\
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@	  java  -Djava.awt.headless=true -jar \${top_srcdir}/doc/plantuml.jar -v -o \$\$(pwd)/gen-uml-images "\$\$src/\$\$SOURCES"; \\
 | 
					 | 
				
			||||||
@NEED_PLANTUML_TRUE@	done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clean-documentation:
 | 
					clean-documentation:
 | 
				
			||||||
	-rm doxygen.errors @PDF_DOC@
 | 
						-rm doxygen.errors @PDF_DOC@
 | 
				
			||||||
	@NEED_PLANTUML_TRUE@ -rm -rf gen-uml-images
 | 
					 | 
				
			||||||
distclean-documentation:
 | 
					distclean-documentation:
 | 
				
			||||||
	-rm -r html
 | 
						-rm -r html
 | 
				
			||||||
	-rm  @PACKAGE_NAME@.doxytag
 | 
						-rm  @PACKAGE_NAME@.doxytag
 | 
				
			||||||
@@ -858,7 +867,7 @@ AC_DEFUN([AX_PKG_REQUIRE], [
 | 
				
			|||||||
  DEV_DIST_PKG=
 | 
					  DEV_DIST_PKG=
 | 
				
			||||||
  pkg=m4_default([$2], [$1])
 | 
					  pkg=m4_default([$2], [$1])
 | 
				
			||||||
  $6
 | 
					  $6
 | 
				
			||||||
  dep_pkg=${DEV_DEB_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-dev}
 | 
					  deb_pkg=${DEV_DEB_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-dev}
 | 
				
			||||||
  rpm_pkg=${DEV_RPM_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-devel}
 | 
					  rpm_pkg=${DEV_RPM_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-devel}
 | 
				
			||||||
  if test -n "$4"; then
 | 
					  if test -n "$4"; then
 | 
				
			||||||
    for f in $pkg $4; do
 | 
					    for f in $pkg $4; do
 | 
				
			||||||
@@ -953,8 +962,8 @@ AC_DEFUN([AX_PKG_CHECK], [
 | 
				
			|||||||
#    $2 = pathes to search for
 | 
					#    $2 = pathes to search for
 | 
				
			||||||
AC_DEFUN([AX_REQUIRE_HEADER], [
 | 
					AC_DEFUN([AX_REQUIRE_HEADER], [
 | 
				
			||||||
  AC_CHECK_HEADER($1, [], [
 | 
					  AC_CHECK_HEADER($1, [], [
 | 
				
			||||||
    if test -n "$2"; then
 | 
					 | 
				
			||||||
    found=0
 | 
					    found=0
 | 
				
			||||||
 | 
					    if test -n "$2"; then
 | 
				
			||||||
      for d in $2; do
 | 
					      for d in $2; do
 | 
				
			||||||
        if test -f "${d}/$1"; then
 | 
					        if test -f "${d}/$1"; then
 | 
				
			||||||
          AC_MSG_NOTICE([found file ${d}/$1])
 | 
					          AC_MSG_NOTICE([found file ${d}/$1])
 | 
				
			||||||
@@ -1083,24 +1092,21 @@ AC_DEFUN([AX_DEB_DEPEND_IFEXISTS], [
 | 
				
			|||||||
#  - parameter:
 | 
					#  - parameter:
 | 
				
			||||||
#     $1 = package name
 | 
					#     $1 = package name
 | 
				
			||||||
AC_DEFUN([AX_DEB_BUILD_DEPEND], [
 | 
					AC_DEFUN([AX_DEB_BUILD_DEPEND], [
 | 
				
			||||||
  pkg="$1"
 | 
					  DEB_BUILD_DEPEND="${DEB_BUILD_DEPEND}, $1"
 | 
				
			||||||
  DEB_BUILD_DEPEND="${DEB_BUILD_DEPEND}, ${pkg}"
 | 
					 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# require package in debian/control.in append @DEB_DEPEND@ to Depends
 | 
					# require package in debian/control.in append @DEB_DEPEND@ to Depends
 | 
				
			||||||
#  - parameter:
 | 
					#  - parameter:
 | 
				
			||||||
#     $1 = package name
 | 
					#     $1 = package name
 | 
				
			||||||
AC_DEFUN([AX_DEB_DEPEND], [
 | 
					AC_DEFUN([AX_DEB_DEPEND], [
 | 
				
			||||||
  pkg="$1"
 | 
					  DEB_DEPEND="${DEB_DEPEND}, $1"
 | 
				
			||||||
  DEB_DEPEND="${DEB_DEPEND}, ${pkg}"
 | 
					 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# require package in debian/control.in append @DEB_DEPEND@ to Depends
 | 
					# require package in debian/control.in append @DEB_DEPEND@ to Depends
 | 
				
			||||||
#  - parameter:
 | 
					#  - parameter:
 | 
				
			||||||
#     $1 = package name
 | 
					#     $1 = package name
 | 
				
			||||||
AC_DEFUN([AX_DEB_SECTION], [
 | 
					AC_DEFUN([AX_DEB_SECTION], [
 | 
				
			||||||
  pkg="$1"
 | 
					  DEB_SECTION="$1"
 | 
				
			||||||
  DEB_SECTION="${pkg}"
 | 
					 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# call after setting debian dependencies
 | 
					# call after setting debian dependencies
 | 
				
			||||||
@@ -1132,19 +1138,17 @@ AC_DEFUN([AX_RPM_DEPEND_IFEXISTS], [
 | 
				
			|||||||
#  - parameter:
 | 
					#  - parameter:
 | 
				
			||||||
#     $1 = package name
 | 
					#     $1 = package name
 | 
				
			||||||
AC_DEFUN([AX_RPM_BUILD_DEPEND], [
 | 
					AC_DEFUN([AX_RPM_BUILD_DEPEND], [
 | 
				
			||||||
  pkg="$1"
 | 
					  RPM_BUILD_DEPEND="${RPM_BUILD_DEPEND}, $1"
 | 
				
			||||||
  RPM_BUILD_DEPEND="${RPM_BUILD_DEPEND}, ${pkg}"
 | 
					 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# require package in .spec.in append @RPM_DEPEND@ to Depends
 | 
					# require package in .spec.in append @RPM_DEPEND@ to Depends
 | 
				
			||||||
#  - parameter:
 | 
					#  - parameter:
 | 
				
			||||||
#     $1 = package name
 | 
					#     $1 = package name
 | 
				
			||||||
AC_DEFUN([AX_RPM_DEPEND], [
 | 
					AC_DEFUN([AX_RPM_DEPEND], [
 | 
				
			||||||
  pkg="$1"
 | 
					 | 
				
			||||||
  if test -z "${RPM_DEPEND}"; then
 | 
					  if test -z "${RPM_DEPEND}"; then
 | 
				
			||||||
    RPM_DEPEND="${pkg}"
 | 
					    RPM_DEPEND="$1"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    RPM_DEPEND="${RPM_DEPEND}, ${pkg}"
 | 
					    RPM_DEPEND="${RPM_DEPEND}, $1"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1152,8 +1156,7 @@ AC_DEFUN([AX_RPM_DEPEND], [
 | 
				
			|||||||
#  - parameter:
 | 
					#  - parameter:
 | 
				
			||||||
#     $1 = package name
 | 
					#     $1 = package name
 | 
				
			||||||
AC_DEFUN([AX_RPM_GROUP], [
 | 
					AC_DEFUN([AX_RPM_GROUP], [
 | 
				
			||||||
  pkg="$1"
 | 
					  RPM_GROUP="$1"
 | 
				
			||||||
  RPM_GROUP="${pkg}"
 | 
					 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# call after setting rpmian dependencies
 | 
					# call after setting rpmian dependencies
 | 
				
			||||||
@@ -1194,6 +1197,15 @@ AC_DEFUN([AX_ALL_BUILD_DEPEND], [
 | 
				
			|||||||
  RPM_BUILD_DEPEND="${RPM_BUILD_DEPEND}, ${pkg}"
 | 
					  RPM_BUILD_DEPEND="${RPM_BUILD_DEPEND}, ${pkg}"
 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# require package in .spec.in and control.in, append to runtime depends
 | 
				
			||||||
 | 
					#  - parameter:
 | 
				
			||||||
 | 
					#     $1 = package name
 | 
				
			||||||
 | 
					AC_DEFUN([AX_ALL_DEPEND], [
 | 
				
			||||||
 | 
					  pkg="$1"
 | 
				
			||||||
 | 
					  DEB_DEPEND="${DEB_DEPEND}, ${pkg}"
 | 
				
			||||||
 | 
					  RPM_DEPEND="${RPM_DEPEND}, ${pkg}"
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# require package in .spec.in append @ALL_BUILD_DEPEND@ to Build-Depends
 | 
					# require package in .spec.in append @ALL_BUILD_DEPEND@ to Build-Depends
 | 
				
			||||||
#  - parameter:
 | 
					#  - parameter:
 | 
				
			||||||
#     $1 = package name
 | 
					#     $1 = package name
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								bootstrap.sh
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								bootstrap.sh
									
									
									
									
									
								
							@@ -129,9 +129,8 @@ GENERATED FILES
 | 
				
			|||||||
    * ${MY_NAME}
 | 
					    * ${MY_NAME}
 | 
				
			||||||
    * autogen.sh - just the basics to initialize auto tools and create configure
 | 
					    * autogen.sh - just the basics to initialize auto tools and create configure
 | 
				
			||||||
    * ax_init_standard_project.m4 - auxiliary macro definition file
 | 
					    * ax_init_standard_project.m4 - auxiliary macro definition file
 | 
				
			||||||
    * ax_cxx_compile_stdcxx_11.m4 - auxiliary macro definition file
 | 
					    * ax_cxx_compile_stdcxx.m4 - auxiliary macro definition file
 | 
				
			||||||
    * ax_check_qt.m4 - auxiliary macro definition file
 | 
					    * ax_check_qt.m4 - auxiliary macro definition file
 | 
				
			||||||
    * makefile_test.inc.am - makefile to be included in tests
 | 
					 | 
				
			||||||
    * resolve-debbuilddeps.sh - script to install debian package dependencies
 | 
					    * resolve-debbuilddeps.sh - script to install debian package dependencies
 | 
				
			||||||
    * resolve-rpmbuilddeps.sh - script to install RPM package dependencies
 | 
					    * resolve-rpmbuilddeps.sh - script to install RPM package dependencies
 | 
				
			||||||
    * build-in-docker.sh - script to build the project encapsulated in a docker container
 | 
					    * build-in-docker.sh - script to build the project encapsulated in a docker container
 | 
				
			||||||
@@ -274,7 +273,7 @@ FILES
 | 
				
			|||||||
      * Enable C++ testing using CppUnit: AX_USE_CPPUNIT
 | 
					      * Enable C++ testing using CppUnit: AX_USE_CPPUNIT
 | 
				
			||||||
      * Enable other tests: AX_BUILD_TEST
 | 
					      * Enable other tests: AX_BUILD_TEST
 | 
				
			||||||
      * Enable C++ examples, i.e. for libraries: AX_BUILD_EXAMPLES
 | 
					      * Enable C++ examples, i.e. for libraries: AX_BUILD_EXAMPLES
 | 
				
			||||||
      * Check for C++11 support: AX_CXX_COMPILE_STDCXX_11 (see ax_cxx_compile_stdcxx_11.m4)
 | 
					      * Require C++17 support: AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory]) (see ax_cxx_compile_stdcxx.m4)
 | 
				
			||||||
      * Require a QT module: AX_REQUIRE_QT (see ax_check_qt.m4)
 | 
					      * Require a QT module: AX_REQUIRE_QT (see ax_check_qt.m4)
 | 
				
			||||||
      * Optionally use a QT module: AX_CHECK_QT  (see ax_check_qt.m4)
 | 
					      * Optionally use a QT module: AX_CHECK_QT  (see ax_check_qt.m4)
 | 
				
			||||||
      * Require a module: AX_PKG_REQUIRE (see ax_init_standard_project.m4)
 | 
					      * Require a module: AX_PKG_REQUIRE (see ax_init_standard_project.m4)
 | 
				
			||||||
@@ -450,7 +449,7 @@ checkdir() {
 | 
				
			|||||||
    if ! test -d "$1"; then # create path
 | 
					    if ! test -d "$1"; then # create path
 | 
				
			||||||
        run mkdir -p "$1"
 | 
					        run mkdir -p "$1"
 | 
				
			||||||
        if test -n "${VCS}" -a $novcs -eq 0 && ! contains "$1" "${excludevcs[@]}"; then
 | 
					        if test -n "${VCS}" -a $novcs -eq 0 && ! contains "$1" "${excludevcs[@]}"; then
 | 
				
			||||||
            run ${VCS} add "$1"
 | 
					            run --no-check ${VCS} add "$1"
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -498,7 +497,7 @@ to() {
 | 
				
			|||||||
    run chmod $mode $1
 | 
					    run chmod $mode $1
 | 
				
			||||||
    if test $exists -eq 0; then
 | 
					    if test $exists -eq 0; then
 | 
				
			||||||
        if test -n "${VCS}" -a $novcs -eq 0 && ! contains "$1" "${excludevcs[@]}"; then
 | 
					        if test -n "${VCS}" -a $novcs -eq 0 && ! contains "$1" "${excludevcs[@]}"; then
 | 
				
			||||||
            run ${VCS} add "$1"
 | 
					            run --no-check ${VCS} add "$1"
 | 
				
			||||||
            if test "${VCS}" = "svn"; then
 | 
					            if test "${VCS}" = "svn"; then
 | 
				
			||||||
                run svn propset svn:keywords "Id" "$1"
 | 
					                run svn propset svn:keywords "Id" "$1"
 | 
				
			||||||
            fi
 | 
					            fi
 | 
				
			||||||
@@ -523,10 +522,14 @@ copy() {
 | 
				
			|||||||
    if test "${1%/*}" != "$1"; then
 | 
					    if test "${1%/*}" != "$1"; then
 | 
				
			||||||
        test -d "${1%/*}" || svn mkdir "${1%/*}"
 | 
					        test -d "${1%/*}" || svn mkdir "${1%/*}"
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					    if ! test -e "${source}"; then
 | 
				
			||||||
 | 
					        ignored "$1" not found
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
    run cp "${source}" "$1"
 | 
					    run cp "${source}" "$1"
 | 
				
			||||||
    if test $exists -eq 0; then
 | 
					    if test $exists -eq 0; then
 | 
				
			||||||
        if test -n "${VCS}" -a $novcs -eq 0 && ! contains "$1" "${excludevcs[@]}"; then
 | 
					        if test -n "${VCS}" -a $novcs -eq 0 && ! contains "$1" "${excludevcs[@]}"; then
 | 
				
			||||||
            run ${VCS} add "$1"
 | 
					            run --no-check ${VCS} add "$1"
 | 
				
			||||||
            if test "${VCS}" = "svn"; then
 | 
					            if test "${VCS}" = "svn"; then
 | 
				
			||||||
                run svn propset svn:keywords "Id" "$1"
 | 
					                run svn propset svn:keywords "Id" "$1"
 | 
				
			||||||
            fi
 | 
					            fi
 | 
				
			||||||
@@ -575,7 +578,7 @@ vcs2cl() {
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
    if test $exists -eq 0; then
 | 
					    if test $exists -eq 0; then
 | 
				
			||||||
        if test -n "${VCS}" -a $novcs -eq 0 && ! contains "ChangeLog" "${excludevcs[@]}"; then
 | 
					        if test -n "${VCS}" -a $novcs -eq 0 && ! contains "ChangeLog" "${excludevcs[@]}"; then
 | 
				
			||||||
            run ${VCS} add ChangeLog
 | 
					            run --no-check ${VCS} add ChangeLog
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -591,9 +594,8 @@ fi
 | 
				
			|||||||
# Initialize the environment:
 | 
					# Initialize the environment:
 | 
				
			||||||
copy ${MY_NAME}
 | 
					copy ${MY_NAME}
 | 
				
			||||||
copy ax_init_standard_project.m4
 | 
					copy ax_init_standard_project.m4
 | 
				
			||||||
copy ax_cxx_compile_stdcxx_11.m4
 | 
					copy ax_cxx_compile_stdcxx.m4
 | 
				
			||||||
copy ax_check_qt.m4
 | 
					copy ax_check_qt.m4
 | 
				
			||||||
copy makefile_test.inc.am
 | 
					 | 
				
			||||||
copy resolve-debbuilddeps.sh
 | 
					copy resolve-debbuilddeps.sh
 | 
				
			||||||
copy resolve-rpmbuilddeps.sh
 | 
					copy resolve-rpmbuilddeps.sh
 | 
				
			||||||
copy build-in-docker.sh
 | 
					copy build-in-docker.sh
 | 
				
			||||||
@@ -1352,7 +1354,7 @@ ${HEADER}AM_CPPFLAGS = -I\${top_srcdir}/src -I\${top_builddir}/src
 | 
				
			|||||||
AM_LDFLAGS = -L\${abs_top_builddir}/src/.libs
 | 
					AM_LDFLAGS = -L\${abs_top_builddir}/src/.libs
 | 
				
			||||||
LDADD = -l${PACKAGE_NAME#lib}
 | 
					LDADD = -l${PACKAGE_NAME#lib}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exampledir = ${docdir}/examples
 | 
					exampledir = \${docdir}/examples
 | 
				
			||||||
example_DATA = 
 | 
					example_DATA = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAINTAINERCLEANFILES = makefile.in
 | 
					MAINTAINERCLEANFILES = makefile.in
 | 
				
			||||||
@@ -1505,9 +1507,10 @@ if testtag AX_USE_DOXYGEN; then
 | 
				
			|||||||
    if ! checkfile doc/doxyfile.in || \
 | 
					    if ! checkfile doc/doxyfile.in || \
 | 
				
			||||||
        contains doc/doxyfile.in "${rebuildfiles[@]}"; then
 | 
					        contains doc/doxyfile.in "${rebuildfiles[@]}"; then
 | 
				
			||||||
        run doxygen -g doc/doxyfile.in
 | 
					        run doxygen -g doc/doxyfile.in
 | 
				
			||||||
 | 
					        sed -i ':a;/\\$/{s///;N;s/ *\n */ /g;ba}' doc/doxyfile.in
 | 
				
			||||||
        if test $exists -eq 0; then
 | 
					        if test $exists -eq 0; then
 | 
				
			||||||
            if test -n "${VCS}" -a $novcs -eq 0 && ! contains "doc/doxyfile" "${excludevcs[@]}"; then
 | 
					            if test -n "${VCS}" -a $novcs -eq 0 && ! contains "doc/doxyfile" "${excludevcs[@]}"; then
 | 
				
			||||||
                run ${VCS} add doc/doxyfile.in
 | 
					                run --no-check ${VCS} add doc/doxyfile.in
 | 
				
			||||||
                if test "${VCS}" = "svn"; then
 | 
					                if test "${VCS}" = "svn"; then
 | 
				
			||||||
                    run svn propset svn:keywords "Id" doc/doxyfile.in
 | 
					                    run svn propset svn:keywords "Id" doc/doxyfile.in
 | 
				
			||||||
                fi
 | 
					                fi
 | 
				
			||||||
@@ -1548,6 +1551,7 @@ if testtag AX_USE_DOXYGEN; then
 | 
				
			|||||||
        doxyreplace WARN_IF_UNDOCUMENTED NO
 | 
					        doxyreplace WARN_IF_UNDOCUMENTED NO
 | 
				
			||||||
        doxyreplace WARN_LOGFILE doxygen.errors
 | 
					        doxyreplace WARN_LOGFILE doxygen.errors
 | 
				
			||||||
        doxyreplace INPUT "@top_srcdir@/src"
 | 
					        doxyreplace INPUT "@top_srcdir@/src"
 | 
				
			||||||
 | 
					        doxyadd INPUT "@top_srcdir@/@README_FILE@"
 | 
				
			||||||
        if testtag AX_USE_SCRIPTS; then
 | 
					        if testtag AX_USE_SCRIPTS; then
 | 
				
			||||||
            doxyadd INPUT "@top_srcdir@/scripts"
 | 
					            doxyadd INPUT "@top_srcdir@/scripts"
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
@@ -1562,6 +1566,7 @@ if testtag AX_USE_DOXYGEN; then
 | 
				
			|||||||
            doxyadd EXCLUDE "@top_srcdir@/nodejs/node_modules"
 | 
					            doxyadd EXCLUDE "@top_srcdir@/nodejs/node_modules"
 | 
				
			||||||
	    doxyadd EXCLUDE "@top_srcdir@/nodejs/public/javascripts/ext"
 | 
						    doxyadd EXCLUDE "@top_srcdir@/nodejs/public/javascripts/ext"
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
 | 
					        doxyreplace USE_MDFILE_AS_MAINPAGE "@top_srcdir@/@README_FILE@"
 | 
				
			||||||
        doxyreplace FILE_PATTERNS '*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.idl *.ddl *.odl *.h *.hh *.hxx *.hpp *.h++ *.cs *.d *.php *.php4 *.php5 *.phtml *.inc *.m *.markdown *.md *.mm *.dox *.py *.f90 *.f *.for *.tcl *.vhd *.vhdl *.ucf *.qsf *.as *.js *.wt *.sql'
 | 
					        doxyreplace FILE_PATTERNS '*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.idl *.ddl *.odl *.h *.hh *.hxx *.hpp *.h++ *.cs *.d *.php *.php4 *.php5 *.phtml *.inc *.m *.markdown *.md *.mm *.dox *.py *.f90 *.f *.for *.tcl *.vhd *.vhdl *.ucf *.qsf *.as *.js *.wt *.sql'
 | 
				
			||||||
        doxyreplace RECURSIVE YES
 | 
					        doxyreplace RECURSIVE YES
 | 
				
			||||||
        doxyreplace EXCLUDE_PATTERNS "moc_* uic_* qrc_* version.[ch]xx"
 | 
					        doxyreplace EXCLUDE_PATTERNS "moc_* uic_* qrc_* version.[ch]xx"
 | 
				
			||||||
@@ -1571,9 +1576,7 @@ if testtag AX_USE_DOXYGEN; then
 | 
				
			|||||||
        doxyreplace HTML_DYNAMIC_SECTIONS YES
 | 
					        doxyreplace HTML_DYNAMIC_SECTIONS YES
 | 
				
			||||||
        doxyreplace DISABLE_INDEX NO
 | 
					        doxyreplace DISABLE_INDEX NO
 | 
				
			||||||
        doxyreplace GENERATE_TREEVIEW YES 
 | 
					        doxyreplace GENERATE_TREEVIEW YES 
 | 
				
			||||||
        if testtag AX_BUILD_EXAMPLES; then
 | 
					        doxyreplace EXAMPLE_PATH @top_srcdir@
 | 
				
			||||||
            doxyreplace EXAMPLE_PATH @top_srcdir@/examples
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        doxyreplace EXAMPLE_RECURSIVE YES
 | 
					        doxyreplace EXAMPLE_RECURSIVE YES
 | 
				
			||||||
        doxyreplace FILTER_PATTERNS '*.wt=doxygen-webtester.sed *.sql=@top_srcdir@/sql-to-dot.sed'
 | 
					        doxyreplace FILTER_PATTERNS '*.wt=doxygen-webtester.sed *.sql=@top_srcdir@/sql-to-dot.sed'
 | 
				
			||||||
        doxyreplace SOURCE_BROWSER YES
 | 
					        doxyreplace SOURCE_BROWSER YES
 | 
				
			||||||
@@ -1605,8 +1608,8 @@ if testtag AX_USE_DEBIAN_PACKAGING; then
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 -- @PACKAGER@  @BUILD_DATE@
 | 
					 -- @PACKAGER@  @BUILD_DATE@
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
    RUN_DEPENDS="$(if testtag AX_USE_NODEJS; then echo -n ", nodejs, npm"; fi)"
 | 
					    RUN_DEPENDS="$(if testtag AX_USE_NODEJS; then echo -n ", nodejs, npm,"; fi)"
 | 
				
			||||||
    BUILD_DEPENDS="debhelper, fakeroot, ${VCSDEPENDS_DEB} pkg-config, automake, libtool, autotools-dev, pandoc, lsb-release$(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz, mscgen, default-jre-headless|default-jre"; fi; if testtag AX_USE_PERLDOC; then echo -n ", libpod-tree-perl"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n ", qt5-default | libqt4-core | libqtcore4, qt5-qmake | qt4-qmake, qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools"; fi)"
 | 
					    BUILD_DEPENDS="gnupg, debhelper, fakeroot, ${VCSDEPENDS_DEB} pkg-config, automake, libtool, libltdl-dev, autotools-dev, pandoc, lsb-release$(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz, mscgen, default-jre-headless|default-jre"; fi; if testtag AX_USE_PERLDOC; then echo -n ", libpod-tree-perl"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n ", qt5-default | libqt4-core | libqtcore4, qt5-qmake | qt4-qmake, qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools, qttools5-dev | qt4-dev,"; fi)"
 | 
				
			||||||
    to debian/control.in <<EOF
 | 
					    to debian/control.in <<EOF
 | 
				
			||||||
Source: @PACKAGE_NAME@
 | 
					Source: @PACKAGE_NAME@
 | 
				
			||||||
Priority: extra
 | 
					Priority: extra
 | 
				
			||||||
@@ -1646,6 +1649,9 @@ usr/lib/lib*.so
 | 
				
			|||||||
usr/lib/pkgconfig/*
 | 
					usr/lib/pkgconfig/*
 | 
				
			||||||
usr/lib/*.la
 | 
					usr/lib/*.la
 | 
				
			||||||
usr/share/doc/${PACKAGE_NAME}/html
 | 
					usr/share/doc/${PACKAGE_NAME}/html
 | 
				
			||||||
 | 
					$(if testtag AX_BUILD_EXAMPLES; then
 | 
				
			||||||
 | 
					  echo usr/share/doc/${PACKAGE_NAME}/examples
 | 
				
			||||||
 | 
					fi)
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
    to --mode "u=rwx,g=rwx,o=rx" debian/rules <<EOF
 | 
					    to --mode "u=rwx,g=rwx,o=rx" debian/rules <<EOF
 | 
				
			||||||
${HEADER}%:
 | 
					${HEADER}%:
 | 
				
			||||||
@@ -1871,7 +1877,7 @@ desktop_DATA = @PACKAGE_DESKTOP@
 | 
				
			|||||||
dist_pkgdata_DATA = @PACKAGE_ICON@
 | 
					dist_pkgdata_DATA = @PACKAGE_ICON@
 | 
				
			||||||
dist_noinst_DATA = ax_check_qt.m4 bootstrap.sh				\\
 | 
					dist_noinst_DATA = ax_check_qt.m4 bootstrap.sh				\\
 | 
				
			||||||
                   resolve-rpmbuilddeps.sh autogen.sh			\\
 | 
					                   resolve-rpmbuilddeps.sh autogen.sh			\\
 | 
				
			||||||
                    ax_cxx_compile_stdcxx_11.m4 build-in-docker.sh	\\
 | 
					                    ax_cxx_compile_stdcxx.m4 build-in-docker.sh	        \\
 | 
				
			||||||
                    build-resource-file.sh				\\
 | 
					                    build-resource-file.sh				\\
 | 
				
			||||||
                    ax_init_standard_project.m4				\\
 | 
					                    ax_init_standard_project.m4				\\
 | 
				
			||||||
                    mac-create-app-bundle.sh resolve-debbuilddeps.sh    \\
 | 
					                    mac-create-app-bundle.sh resolve-debbuilddeps.sh    \\
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,8 +6,8 @@ myarch=$(dpkg --print-architecture)
 | 
				
			|||||||
if test "${arch}" = "amd64"; then
 | 
					if test "${arch}" = "amd64"; then
 | 
				
			||||||
    myarch="amd64|i386"
 | 
					    myarch="amd64|i386"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
mode="deb"
 | 
					mode=
 | 
				
			||||||
img="mwaeckerlin/ubuntu:latest"
 | 
					img=
 | 
				
			||||||
repos=()
 | 
					repos=()
 | 
				
			||||||
keys=()
 | 
					keys=()
 | 
				
			||||||
dns=()
 | 
					dns=()
 | 
				
			||||||
@@ -81,15 +81,17 @@ while test $# -gt 0; do
 | 
				
			|||||||
            echo
 | 
					            echo
 | 
				
			||||||
            exit 0
 | 
					            exit 0
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
        (-m|--mode) shift;
 | 
					        (-m|--mode)
 | 
				
			||||||
 | 
					            shift;
 | 
				
			||||||
            mode="$1"
 | 
					            mode="$1"
 | 
				
			||||||
 | 
					            if test -z "$img"; then
 | 
				
			||||||
                case "$mode" in
 | 
					                case "$mode" in
 | 
				
			||||||
                (deb|apt) img="mwaeckerlin/ubuntu:latest";;
 | 
					                    (deb|apt) img="mwaeckerlin/debbuildenv";;
 | 
				
			||||||
                    (rpm|zypper) img="opensuse:latest";;
 | 
					                    (rpm|zypper) img="opensuse:latest";;
 | 
				
			||||||
                    (yum) img="centos:latest";;
 | 
					                    (yum) img="centos:latest";;
 | 
				
			||||||
                    (dnf) img="fedora:latest";;
 | 
					                    (dnf) img="fedora:latest";;
 | 
				
			||||||
                    (win)
 | 
					                    (win)
 | 
				
			||||||
                    img="mwaeckerlin/ubuntu:latest"; host="${host:---host=i686-w64-mingw32}"
 | 
					                        img="mwaeckerlin/debbuildenv"; host="${host:---host=i686-w64-mingw32}"
 | 
				
			||||||
                        targets="all install"
 | 
					                        targets="all install"
 | 
				
			||||||
                        flags+=("--prefix=/workdir/usr")
 | 
					                        flags+=("--prefix=/workdir/usr")
 | 
				
			||||||
                        packages+=("mingw-w64")
 | 
					                        packages+=("mingw-w64")
 | 
				
			||||||
@@ -99,6 +101,7 @@ while test $# -gt 0; do
 | 
				
			|||||||
                        exit 1
 | 
					                        exit 1
 | 
				
			||||||
                        ;;
 | 
					                        ;;
 | 
				
			||||||
                esac
 | 
					                esac
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
        (-i|--image) shift;
 | 
					        (-i|--image) shift;
 | 
				
			||||||
            img="$1"
 | 
					            img="$1"
 | 
				
			||||||
@@ -200,11 +203,25 @@ function ifthenelse() {
 | 
				
			|||||||
    arg="$1"
 | 
					    arg="$1"
 | 
				
			||||||
    shift
 | 
					    shift
 | 
				
			||||||
    cmd="$*"
 | 
					    cmd="$*"
 | 
				
			||||||
    DISTRIBUTOR=$(docker exec ${DOCKER_ID} lsb_release -si | sed 's, .*,,' | tr [:upper:] [:lower:])
 | 
					    DISTRIBUTOR=$(docker exec ${DOCKER_ID} lsb_release -si | sed 's, .*,,;s,.*,\L&,g')
 | 
				
			||||||
    CODENAME=$(docker exec ${DOCKER_ID} lsb_release -cs)
 | 
					    CODENAME=$(docker exec ${DOCKER_ID} lsb_release -cs)
 | 
				
			||||||
    ARCH=$((docker exec ${DOCKER_ID} which dpkg > /dev/null 2> /dev/null && docker exec ${DOCKER_ID} dpkg --print-architecture) || echo amd64)
 | 
					    ARCH=$((docker exec ${DOCKER_ID} which dpkg > /dev/null 2> /dev/null && docker exec ${DOCKER_ID} dpkg --print-architecture) || echo amd64)
 | 
				
			||||||
 | 
					    case "$DISTRIBUTOR" in
 | 
				
			||||||
 | 
					        (opensuse) # code name may be not available, then set leap or tumbleweed
 | 
				
			||||||
 | 
					            if test "$CODENAME" = "n/a"; then
 | 
				
			||||||
 | 
					                CODENAME=$(docker exec ${DOCKER_ID} lsb_release -ds | sed "s,\($(docker exec ${DOCKER_ID} lsb_release -si | sed 's, ,\\|,g')\) *,,"';s, .*,,g;s,",,g;s,.*,\L&,g')
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					        (fedora|mageia) # numeric code name
 | 
				
			||||||
 | 
					            CODENAME=$(docker exec ${DOCKER_ID} lsb_release -rs)
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					        (centos) # only look at major number in centos
 | 
				
			||||||
 | 
					            CODENAME=$(docker exec ${DOCKER_ID} lsb_release -rs | sed 's,\..*,,')
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					    esac
 | 
				
			||||||
    if test "${arg/:::/}" = "${arg}"; then
 | 
					    if test "${arg/:::/}" = "${arg}"; then
 | 
				
			||||||
        docker exec ${DOCKER_ID} bash -c "${cmd//ARG/${arg//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
 | 
					        cmd_tmp="${cmd//ARG/${arg//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
 | 
				
			||||||
 | 
					        docker exec ${DOCKER_ID} bash -c "${cmd_tmp//@CODENAME@/${CODENAME}}"
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        os="${arg%%:::*}"
 | 
					        os="${arg%%:::*}"
 | 
				
			||||||
        thenpart="${arg#*:::}"
 | 
					        thenpart="${arg#*:::}"
 | 
				
			||||||
@@ -215,11 +232,13 @@ function ifthenelse() {
 | 
				
			|||||||
        fi
 | 
					        fi
 | 
				
			||||||
        if [[ "${DISTRIBUTOR}-${CODENAME}-${ARCH}" =~ ${os} ]]; then
 | 
					        if [[ "${DISTRIBUTOR}-${CODENAME}-${ARCH}" =~ ${os} ]]; then
 | 
				
			||||||
            if test -n "${thenpart}"; then
 | 
					            if test -n "${thenpart}"; then
 | 
				
			||||||
                docker exec ${DOCKER_ID} bash -c "${cmd//ARG/${thenpart//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
 | 
					                cmd_tmp="${cmd//ARG/${thenpart//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
 | 
				
			||||||
 | 
					                docker exec ${DOCKER_ID} bash -c "${cmd_tmp//@CODENAME@/${CODENAME}}"
 | 
				
			||||||
            fi
 | 
					            fi
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            if test -n "${elsepart}"; then
 | 
					            if test -n "${elsepart}"; then
 | 
				
			||||||
                docker exec ${DOCKER_ID} bash -c "${cmd//ARG/${elsepart//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
 | 
					                cmd_tmp="${cmd//ARG/${elsepart//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
 | 
				
			||||||
 | 
					                docker exec ${DOCKER_ID} bash -c "${cmd_tmp//@CODENAME@/${CODENAME}}"
 | 
				
			||||||
            fi
 | 
					            fi
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
@@ -227,6 +246,9 @@ function ifthenelse() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
set -x
 | 
					set -x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if test -z "$img"; then
 | 
				
			||||||
 | 
					    img="mwaeckerlin/debbuildenv"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
docker pull $img
 | 
					docker pull $img
 | 
				
			||||||
DOCKER_ID=$(docker create ${dns[@]} ${dirs[@]} ${envs[@]} -w /workdir $img sleep infinity)
 | 
					DOCKER_ID=$(docker create ${dns[@]} ${dirs[@]} ${envs[@]} -w /workdir $img sleep infinity)
 | 
				
			||||||
trap 'traperror '"${DOCKER_ID}"' "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' SIGINT INT TERM EXIT
 | 
					trap 'traperror '"${DOCKER_ID}"' "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' SIGINT INT TERM EXIT
 | 
				
			||||||
@@ -241,38 +263,52 @@ if ! docker exec ${DOCKER_ID} getent passwd $(id -u) > /dev/null 2>&1; then
 | 
				
			|||||||
    docker exec ${DOCKER_ID} useradd -m -u $(id -u) -g $(id -g) -d"${HOME}" $(id -un)
 | 
					    docker exec ${DOCKER_ID} useradd -m -u $(id -u) -g $(id -g) -d"${HOME}" $(id -un)
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
docker exec ${DOCKER_ID} chown $(id -u):$(id -g) "${HOME}"
 | 
					docker exec ${DOCKER_ID} chown $(id -u):$(id -g) "${HOME}"
 | 
				
			||||||
case $mode in
 | 
					if test -z "$mode"; then
 | 
				
			||||||
 | 
					    case "$targets" in
 | 
				
			||||||
 | 
					        (*deb*) mode=deb;;
 | 
				
			||||||
 | 
					        (*rpm*) mode=rpm;;
 | 
				
			||||||
 | 
					        (*) case "$img" in
 | 
				
			||||||
 | 
					                (*deb*|*ubuntu*|*debian*|*mint*) mode=deb;;
 | 
				
			||||||
 | 
					                (*rpm*|*fedora*|*centos*|*mageia*) mode=rpm;;
 | 
				
			||||||
 | 
					                (*mingw*|*win*) mode=win;;
 | 
				
			||||||
 | 
					                (*) mode=deb;;
 | 
				
			||||||
 | 
					            esac;;
 | 
				
			||||||
 | 
					    esac
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					case "$mode" in
 | 
				
			||||||
    (deb|apt|win)
 | 
					    (deb|apt|win)
 | 
				
			||||||
 | 
					        OPTIONS='-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew -y --force-yes --no-install-suggests --no-install-recommends'
 | 
				
			||||||
 | 
					        PREVENT='libpam-systemd policykit.* colord dconf-service'
 | 
				
			||||||
 | 
					        docker exec ${DOCKER_ID} apt-get update ${OPTIONS}
 | 
				
			||||||
 | 
					        docker exec ${DOCKER_ID} apt-mark hold ${PREVENT}
 | 
				
			||||||
 | 
					        #docker exec ${DOCKER_ID} apt-get upgrade ${OPTIONS}
 | 
				
			||||||
 | 
					        docker exec ${DOCKER_ID} apt-get install ${OPTIONS} ${PREVENT// /- }- python-software-properties software-properties-common apt-transport-https dpkg-dev lsb-release wget || \
 | 
				
			||||||
 | 
					            docker exec ${DOCKER_ID} apt-get install ${OPTIONS} ${PREVENT// /- }- software-properties-common apt-transport-https dpkg-dev lsb-release wget || \
 | 
				
			||||||
 | 
					            docker exec ${DOCKER_ID} apt-get install ${OPTIONS} ${PREVENT// /- }- python-software-properties apt-transport-https dpkg-dev lsb-release wget;
 | 
				
			||||||
        if [[ "${img}" =~ "ubuntu" ]]; then
 | 
					        if [[ "${img}" =~ "ubuntu" ]]; then
 | 
				
			||||||
 | 
					            docker exec ${DOCKER_ID} apt-get install ${OPTIONS} ${PREVENT// /- }- locales
 | 
				
			||||||
            docker exec ${DOCKER_ID} locale-gen ${LANG}
 | 
					            docker exec ${DOCKER_ID} locale-gen ${LANG}
 | 
				
			||||||
            docker exec ${DOCKER_ID} update-locale LANG=${LANG}
 | 
					            docker exec ${DOCKER_ID} update-locale LANG=${LANG}
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
        OPTIONS='-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew -y --force-yes --no-install-suggests --no-install-recommends'
 | 
					 | 
				
			||||||
        PREVENT='libpam-systemd policykit.* colord dconf-service'
 | 
					 | 
				
			||||||
        for f in ${PREVENT}; do
 | 
					        for f in ${PREVENT}; do
 | 
				
			||||||
            docker exec ${DOCKER_ID} bash -c "echo 'Package: ${f}' >> /etc/apt/preferences"
 | 
					            docker exec ${DOCKER_ID} bash -c "echo 'Package: ${f}' >> /etc/apt/preferences"
 | 
				
			||||||
            docker exec ${DOCKER_ID} bash -c "echo 'Pin-Priority: -100' >> /etc/apt/preferences"
 | 
					            docker exec ${DOCKER_ID} bash -c "echo 'Pin-Priority: -100' >> /etc/apt/preferences"
 | 
				
			||||||
            docker exec ${DOCKER_ID} bash -c "echo >> /etc/apt/preferences"
 | 
					            docker exec ${DOCKER_ID} bash -c "echo >> /etc/apt/preferences"
 | 
				
			||||||
        done
 | 
					        done
 | 
				
			||||||
        docker exec ${DOCKER_ID} apt-get update ${OPTIONS}
 | 
					        if test -n "${keys[*]}"; then # fix dependency bug in cosmic and stretch
 | 
				
			||||||
        docker exec ${DOCKER_ID} apt-mark hold ${PREVENT}
 | 
					            docker exec ${DOCKER_ID} apt-get install ${OPTIONS} ${PREVENT// /- }- gnupg
 | 
				
			||||||
        docker exec ${DOCKER_ID} apt-get upgrade ${OPTIONS}
 | 
					 | 
				
			||||||
        docker exec ${DOCKER_ID} apt-get install ${OPTIONS} ${PREVENT// /- }- python-software-properties software-properties-common apt-transport-https dpkg-dev lsb-release wget || \
 | 
					 | 
				
			||||||
            docker exec ${DOCKER_ID} apt-get install ${OPTIONS} ${PREVENT// /- }- software-properties-common apt-transport-https dpkg-dev lsb-release wget || \
 | 
					 | 
				
			||||||
            docker exec ${DOCKER_ID} apt-get install ${OPTIONS} ${PREVENT// /- }- python-software-properties apt-transport-https dpkg-dev lsb-release wget;
 | 
					 | 
				
			||||||
            for key in "${keys[@]}"; do
 | 
					            for key in "${keys[@]}"; do
 | 
				
			||||||
                wget -O- "$key" \
 | 
					                wget -O- "$key" \
 | 
				
			||||||
                    | docker exec -i ${DOCKER_ID} apt-key add -
 | 
					                    | docker exec -i ${DOCKER_ID} apt-key add -
 | 
				
			||||||
            done
 | 
					            done
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
        for repo in "${repos[@]}"; do
 | 
					        for repo in "${repos[@]}"; do
 | 
				
			||||||
            ifthenelse "${repo}" "apt-add-repository 'ARG'"
 | 
					            ifthenelse "${repo}" "apt-add-repository 'ARG'"
 | 
				
			||||||
        done
 | 
					        done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        docker exec ${DOCKER_ID} apt-get update ${OPTIONS}
 | 
					        docker exec ${DOCKER_ID} apt-get update ${OPTIONS}
 | 
				
			||||||
        for package in "${packages[@]}"; do
 | 
					        for package in "${packages[@]}"; do
 | 
				
			||||||
            ifthenelse "${package}" "apt-get install ${OPTIONS} ${PREVENT} ARG"
 | 
					            ifthenelse "${package}" "apt-get install ${OPTIONS} ${PREVENT// /- }- ARG"
 | 
				
			||||||
        done
 | 
					        done
 | 
				
			||||||
        for command in "${commands[@]}"; do
 | 
					        for command in "${commands[@]}"; do
 | 
				
			||||||
            ifthenelse "${command}" "ARG"
 | 
					            ifthenelse "${command}" "ARG"
 | 
				
			||||||
@@ -281,7 +317,7 @@ case $mode in
 | 
				
			|||||||
        ;;
 | 
					        ;;
 | 
				
			||||||
    (rpm|yum|dnf|zypper|urpmi)
 | 
					    (rpm|yum|dnf|zypper|urpmi)
 | 
				
			||||||
        if [[ "$img" =~ "centos" ]]; then
 | 
					        if [[ "$img" =~ "centos" ]]; then
 | 
				
			||||||
            docker exec ${DOCKER_ID} yum install -y redhat-lsb
 | 
					            docker exec ${DOCKER_ID} yum install -y redhat-lsb epel-release
 | 
				
			||||||
            docker exec -i ${DOCKER_ID} bash -c 'cat > /etc/yum.repos.d/wandisco-svn.repo' <<EOF
 | 
					            docker exec -i ${DOCKER_ID} bash -c 'cat > /etc/yum.repos.d/wandisco-svn.repo' <<EOF
 | 
				
			||||||
[WandiscoSVN]
 | 
					[WandiscoSVN]
 | 
				
			||||||
name=Wandisco SVN Repo
 | 
					name=Wandisco SVN Repo
 | 
				
			||||||
@@ -293,7 +329,7 @@ gpgcheck=0
 | 
				
			|||||||
EOF
 | 
					EOF
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
        INSTALL_TOOL=$((docker exec ${DOCKER_ID} test -x /usr/bin/zypper && echo zypper install -y) ||  (docker exec ${DOCKER_ID} test -x /usr/bin/dnf && echo dnf install -y) || (docker exec ${DOCKER_ID} test -x /usr/bin/yum && echo yum install -y) || (docker exec ${DOCKER_ID} test -x /usr/sbin/urpmi && echo urpmi --auto))
 | 
					        INSTALL_TOOL=$((docker exec ${DOCKER_ID} test -x /usr/bin/zypper && echo zypper install -y) ||  (docker exec ${DOCKER_ID} test -x /usr/bin/dnf && echo dnf install -y) || (docker exec ${DOCKER_ID} test -x /usr/bin/yum && echo yum install -y) || (docker exec ${DOCKER_ID} test -x /usr/sbin/urpmi && echo urpmi --auto))
 | 
				
			||||||
        if test "$INSTALL_TOOL" = "urpmi --auto"; then
 | 
					        if test "$INSTALL_TOOL" = "urpmi --auto" -o "$INSTALL_TOOL" = "zypper install -y"; then
 | 
				
			||||||
            LSB_RELEASE=lsb-release
 | 
					            LSB_RELEASE=lsb-release
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            LSB_RELEASE=/usr/bin/lsb_release
 | 
					            LSB_RELEASE=/usr/bin/lsb_release
 | 
				
			||||||
@@ -309,8 +345,8 @@ EOF
 | 
				
			|||||||
            docker exec -i ${DOCKER_ID} rm rpm-key
 | 
					            docker exec -i ${DOCKER_ID} rm rpm-key
 | 
				
			||||||
        done
 | 
					        done
 | 
				
			||||||
        for repo in "${repos[@]}"; do
 | 
					        for repo in "${repos[@]}"; do
 | 
				
			||||||
            INSTALL_REPO=$((docker exec ${DOCKER_ID} test -x /usr/bin/zypper && echo zypper ar) || (docker exec ${DOCKER_ID} test -x /usr/bin/dnf && echo dnf config-manager --add-repo) || (docker exec ${DOCKER_ID} test -x /usr/bin/yum && echo wget -O/etc/yum.repos.d/additional$i.repo) || (docker exec ${DOCKER_ID} test -x /usr/sbin/urpmi && echo false))
 | 
					            INSTALL_REPO=$((docker exec ${DOCKER_ID} test -x /usr/bin/zypper && echo zypper ar) || (docker exec ${DOCKER_ID} test -x /usr/bin/dnf && echo dnf config-manager --add-repo) || (docker exec ${DOCKER_ID} test -x /usr/bin/yum && echo yum-config-manager --add-repo) || (docker exec ${DOCKER_ID} test -x /usr/sbin/urpmi && echo false))
 | 
				
			||||||
            ifthenelse "${repo}" "${INSTALL_REPO} 'ARG'"
 | 
					            ifthenelse "${repo}" "${INSTALL_REPO} ARG"
 | 
				
			||||||
            ((++i))
 | 
					            ((++i))
 | 
				
			||||||
        done
 | 
					        done
 | 
				
			||||||
        for package in "${packages[@]}"; do
 | 
					        for package in "${packages[@]}"; do
 | 
				
			||||||
@@ -328,3 +364,17 @@ for f in "${flags[@]}"; do
 | 
				
			|||||||
done
 | 
					done
 | 
				
			||||||
          
 | 
					          
 | 
				
			||||||
docker exec -u $(id -u):$(id -g) ${DOCKER_ID} ./bootstrap.sh -t "${targets}" ${host} "${FLAGS[@]}"
 | 
					docker exec -u $(id -u):$(id -g) ${DOCKER_ID} ./bootstrap.sh -t "${targets}" ${host} "${FLAGS[@]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# last check: try to install built deb or rpm files (if not already cleaned up)
 | 
				
			||||||
 | 
					# not supported in trusty and jessie
 | 
				
			||||||
 | 
					if test "$mode" = deb -a "${img//trusty/}" = "${img}" -a "${img//jessie/}" = "${img}"; then
 | 
				
			||||||
 | 
					   if test "${targets//deb/}" != "${targets}" && ls *.deb > /dev/null 2> /dev/null; then
 | 
				
			||||||
 | 
					       docker exec ${DOCKER_ID} bash -c "apt-get install ${OPTIONS} ${PREVENT// /- }- /workdir/*.deb"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if test "$mode" = rpm -a "${targets//rpm/}" != "${targets}"; then
 | 
				
			||||||
 | 
					    if ls *.rpm > /dev/null 2> /dev/null; then
 | 
				
			||||||
 | 
					        docker exec ${DOCKER_ID} bash -c "${INSTALL_TOOL} /workdir/*.rpm"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo "done."
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								doc/plantuml.jar
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								doc/plantuml.jar
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -59,7 +59,7 @@ while [ $found -ne 0 ]; do
 | 
				
			|||||||
    cd "${target}"
 | 
					    cd "${target}"
 | 
				
			||||||
    for file in $(find . -type f); do
 | 
					    for file in $(find . -type f); do
 | 
				
			||||||
        for lib in $(otool -L ${file} | tail -n +2 \
 | 
					        for lib in $(otool -L ${file} | tail -n +2 \
 | 
				
			||||||
            | egrep '/usr/local/|/opt/local/|'"${HOME}" \
 | 
					            | egrep '/usr/local/|/opt/local/|/opt/X11/|'"${HOME}" \
 | 
				
			||||||
            | grep -v $file | awk '{print $1}'); do
 | 
					            | grep -v $file | awk '{print $1}'); do
 | 
				
			||||||
            found=1
 | 
					            found=1
 | 
				
			||||||
            test -f ${lib##*/} \
 | 
					            test -f ${lib##*/} \
 | 
				
			||||||
@@ -86,20 +86,19 @@ if test -n "${QTDIR}"; then
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Step 5: copy or create info.plist
 | 
					# Step 5: copy local or create new info.plist
 | 
				
			||||||
infoplist=$(find ${apptarget}/Contents/Resources -name Info.plist)
 | 
					if test -f Info.plist; then
 | 
				
			||||||
if test -f "${infoplist}"; then
 | 
					    cp -a Info.plist ${apptarget}/Contents/Info.plist
 | 
				
			||||||
    cp -a "${infoplist}" ${apptarget}/Contents/Info.plist
 | 
					 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
    cat > ${apptarget}/Contents/Info.plist <<EOF
 | 
					    cat > ${apptarget}/Contents/Info.plist <<EOF
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
<plist version="1.0">
 | 
					<plist version="1.0">
 | 
				
			||||||
  <dict>
 | 
					  <qdict>
 | 
				
			||||||
    <key>CFBundleIdentifier</key>
 | 
					    <key>CFBundleIdentifier</key>
 | 
				
			||||||
    <string>${project}</string>
 | 
					    <string>${project}</string>
 | 
				
			||||||
    <key>CFBundleExecutable</key>
 | 
					    <key>CFBundleExecutable</key>
 | 
				
			||||||
    <string>${executablefile##/}</string>
 | 
					    <string>${executablefile##*/}</string>
 | 
				
			||||||
  </dict>
 | 
					  </dict>
 | 
				
			||||||
</plist>
 | 
					</plist>
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,12 +97,12 @@ fi
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
if test -n "${SCHROOTNAME}"; then
 | 
					if test -n "${SCHROOTNAME}"; then
 | 
				
			||||||
    FILES=$(LANG= schroot -c ${SCHROOTNAME} -- rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec  2>&1 | sed -n 's, is needed by.*,,p')
 | 
					    FILES=$(LANG= schroot -c ${SCHROOTNAME} -- rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec  2>&1 | sed -n 's, is needed by.*,,p')
 | 
				
			||||||
    if test -n "${FILES}${DEPS}"; then
 | 
					    if test -n "${FILES// /}${DEPS// /}"; then
 | 
				
			||||||
        schroot -c ${SCHROOTNAME} -u root -- ${INSTALL_TOOL}  ${FILES} ${DEPS}
 | 
					        schroot -c ${SCHROOTNAME} -u root -- ${INSTALL_TOOL}  ${FILES} ${DEPS}
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
    FILES=$(LANG= rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec 2>&1 | sed -n 's, is needed by.*,,p')
 | 
					    FILES=$(LANG= rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec 2>&1 | sed -n 's, is needed by.*,,p')
 | 
				
			||||||
    if test -n "${FILES}${DEPS}"; then
 | 
					    if test -n "${FILES// /}${DEPS// /}"; then
 | 
				
			||||||
        ${INSTALL_TOOL} ${FILES} ${DEPS}
 | 
					        ${INSTALL_TOOL} ${FILES} ${DEPS}
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
@@ -112,7 +112,7 @@ if test -n "${SCHROOTNAME}"; then
 | 
				
			|||||||
else
 | 
					else
 | 
				
			||||||
    FILES=$(LANG= rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec 2>&1 | sed -n 's, is needed by.*,,p')
 | 
					    FILES=$(LANG= rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec 2>&1 | sed -n 's, is needed by.*,,p')
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
if test -n "${FILES}"; then
 | 
					if test -n "${FILES// /}"; then
 | 
				
			||||||
    echo "**** ERROR: Cannot install: " $FILES
 | 
					    echo "**** ERROR: Cannot install: " $FILES
 | 
				
			||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user