pyside2 (5.11.2-1+rpi1) buster-staging; urgency=medium
authorPeter Michael Green <plugwash@raspbian.org>
Sun, 23 Dec 2018 23:25:45 +0000 (23:25 +0000)
committerPeter Michael Green <plugwash@raspbian.org>
Sun, 23 Dec 2018 23:25:45 +0000 (23:25 +0000)
  * Remove armhf from qtwebengine architecture lists.
  * Fix clean target.

[dgit import unpatched pyside2 5.11.2-1+rpi1]

103 files changed:
1  2 
debian/changelog
debian/compat
debian/control
debian/copyright
debian/libpyside2-5.11.install
debian/libpyside2-5.11.lintian-overrides
debian/libpyside2-dev.install
debian/libpyside2-py3-5.11.install
debian/libpyside2-py3-5.11.lintian-overrides
debian/libshiboken2-5.11.install
debian/libshiboken2-5.11.lintian-overrides
debian/libshiboken2-dev.install
debian/libshiboken2-py3-5.11.install
debian/libshiboken2-py3-5.11.lintian-overrides
debian/patches/drop-git-requirement.patch
debian/patches/fix-spelling-errors.patch
debian/patches/remove-privacy-breach-in-doc.patch
debian/patches/series
debian/patches/update-patchelf.patch
debian/pyside2-tools.install
debian/pyside2-tools.manpages
debian/python-pyside2-doc.docs
debian/python-pyside2-doc.examples
debian/python-pyside2.qt3dcore.install
debian/python-pyside2.qt3dinput.install
debian/python-pyside2.qt3dlogic.install
debian/python-pyside2.qt3drender.install
debian/python-pyside2.qtcharts.install
debian/python-pyside2.qtconcurrent.install
debian/python-pyside2.qtcore.install
debian/python-pyside2.qtgui.install
debian/python-pyside2.qthelp.install
debian/python-pyside2.qtlocation.install
debian/python-pyside2.qtmultimedia.install
debian/python-pyside2.qtmultimediawidgets.install
debian/python-pyside2.qtnetwork.install
debian/python-pyside2.qtopengl.install
debian/python-pyside2.qtpositioning.install
debian/python-pyside2.qtprintsupport.install
debian/python-pyside2.qtqml.install
debian/python-pyside2.qtquick.install
debian/python-pyside2.qtquickwidgets.install
debian/python-pyside2.qtscript.install
debian/python-pyside2.qtscripttools.install
debian/python-pyside2.qtsensors.install
debian/python-pyside2.qtsql.install
debian/python-pyside2.qtsvg.install
debian/python-pyside2.qttest.install
debian/python-pyside2.qttexttospeech.install
debian/python-pyside2.qtuitools.install
debian/python-pyside2.qtwebchannel.install
debian/python-pyside2.qtwebenginecore.install
debian/python-pyside2.qtwebenginewidgets.install
debian/python-pyside2.qtwebsockets.install
debian/python-pyside2.qtwidgets.install
debian/python-pyside2.qtx11extras.install
debian/python-pyside2.qtxml.install
debian/python-pyside2.qtxmlpatterns.install
debian/python-pyside2uic.install
debian/python3-pyside2.qt3dcore.install
debian/python3-pyside2.qt3dinput.install
debian/python3-pyside2.qt3dlogic.install
debian/python3-pyside2.qt3drender.install
debian/python3-pyside2.qtcharts.install
debian/python3-pyside2.qtconcurrent.install
debian/python3-pyside2.qtcore.install
debian/python3-pyside2.qtgui.install
debian/python3-pyside2.qthelp.install
debian/python3-pyside2.qtlocation.install
debian/python3-pyside2.qtmultimedia.install
debian/python3-pyside2.qtmultimediawidgets.install
debian/python3-pyside2.qtnetwork.install
debian/python3-pyside2.qtopengl.install
debian/python3-pyside2.qtpositioning.install
debian/python3-pyside2.qtprintsupport.install
debian/python3-pyside2.qtqml.install
debian/python3-pyside2.qtquick.install
debian/python3-pyside2.qtquickwidgets.install
debian/python3-pyside2.qtscript.install
debian/python3-pyside2.qtscripttools.install
debian/python3-pyside2.qtsensors.install
debian/python3-pyside2.qtsql.install
debian/python3-pyside2.qtsvg.install
debian/python3-pyside2.qttest.install
debian/python3-pyside2.qttexttospeech.install
debian/python3-pyside2.qtuitools.install
debian/python3-pyside2.qtwebchannel.install
debian/python3-pyside2.qtwebenginecore.install
debian/python3-pyside2.qtwebenginewidgets.install
debian/python3-pyside2.qtwebsockets.install
debian/python3-pyside2.qtwidgets.install
debian/python3-pyside2.qtx11extras.install
debian/python3-pyside2.qtxml.install
debian/python3-pyside2.qtxmlpatterns.install
debian/python3-pyside2uic.install
debian/rules
debian/set-paths
debian/shiboken2-doc.install
debian/shiboken2.install
debian/shiboken2.manpages
debian/source/format
debian/source/options
debian/watch

index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..1f3411ab45a6d19d8ddd1e7292c62a616d905c40
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,60 @@@
++pyside2 (5.11.2-1+rpi1) buster-staging; urgency=medium
++
++  * Remove armhf from qtwebengine architecture lists.
++  * Fix clean target.
++
++ -- Peter Michael Green <plugwash@raspbian.org>  Sun, 23 Dec 2018 23:25:45 +0000
++
++pyside2 (5.11.2-1) unstable; urgency=medium
++
++  [ Raphaël Hertzog ]
++  * New upstream version 5.11.2
++  * Remove patches merged upstream
++  * Merge fix-PAGESIZE.patch into update-patchelf.patch
++  * Add patchelf to Build-Depends
++  * Bump Standards-Version to 4.2.1
++
++  [ Frédéric Bonnard ]
++  * Fix hardcoded PAGESIZE for patchelf.cc. Closes: #909265
++
++ -- Raphaël Hertzog <hertzog@debian.org>  Fri, 28 Sep 2018 15:09:34 +0200
++
++pyside2 (5.11.0-4) unstable; urgency=medium
++
++  * Use default llvm-dev and libclang-dev (Closes: #906168)
++  * Add Cmake config files for Python3 (Closes: #906020)
++  * Fix debian/libpyside2-5.11.install for triplets that are not *-linux-gnu
++    (thanks to Adrian Bunk)
++  * Add an upstream patch to fix build on armel/armhf
++
++ -- Sophie Brun <sophie@freexian.com>  Mon, 27 Aug 2018 12:53:29 +0200
++
++pyside2 (5.11.0-3) unstable; urgency=medium
++
++  * More fixes for builds building only arch any or only arch all.
++  * Really fix the build with dpkg-buildpackage -A.
++
++ -- Raphaël Hertzog <hertzog@debian.org>  Tue, 31 Jul 2018 21:33:04 +0200
++
++pyside2 (5.11.0-2) unstable; urgency=medium
++
++  [ Raphaël Hertzog ]
++  * Fix build with dpkg-buildpackage -A. Closes: #904892
++  * Fix python-pyside2 dependencies. Replace python-pyside2.widgets by
++    python-pyside2.qtwidgets.
++
++  [ Sophie Brun ]
++  * Drop useless "Testsuite: autopkgtest-pkg-python".
++  * Enable parallel build.
++  * Limit QtWebEngine packages to amd64 arm64 armhf i386 mipsel.
++  * Remove unused lintian-overrides.
++  * Use python2 only in pyside2-tools.
++  * Remove big metapackages python-pyside2 and python3-pyside2.
++
++ -- Raphaël Hertzog <hertzog@debian.org>  Tue, 31 Jul 2018 16:37:40 +0200
++
++pyside2 (5.11.0-1) unstable; urgency=medium
++
++  * Initial release (Closes: #877871)
++
++ -- Sophie Brun <sophie@freexian.com>  Thu, 26 Jul 2018 17:47:45 +0200
diff --cc debian/compat
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b4de3947675361a7770d29b8982c407b0ec6b2a0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++11
diff --cc debian/control
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..f55eddcf4be029efa302f9be463949d16f949b32
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,984 @@@
++Source: pyside2
++Section: python
++Priority: optional
++Maintainer: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
++Uploaders: Sophie Brun <sophie@freexian.com>,
++           Raphaël Hertzog <hertzog@debian.org>
++Build-Depends: chrpath,
++               cmake (>= 3.1),
++               debhelper (>= 11),
++               dh-exec,
++               dh-python,
++               libclang-dev,
++               libqt5charts5-dev,
++               libqt5opengl5-dev,
++               libqt5sensors5-dev,
++               libqt5svg5-dev,
++               libqt5texttospeech5-dev,
++               libqt5webchannel5-dev,
++               libqt5webkit5-dev,
++               libqt5websockets5-dev,
++               libqt5x11extras5-dev,
++               libqt5xmlpatterns5-dev,
++               libxml2-dev,
++               libxslt1-dev,
++               llvm-dev,
++             patchelf,
++               pyqt5-dev (>=5.6),
++               python-all-dev,
++               python-setuptools,
++               python-wheel,
++               python3-all-dev,
++               python3-setuptools,
++               python3-sphinx,
++               python3-sphinx-rtd-theme,
++               python3-wheel,
++               qt3d-assimpsceneimport-plugin,
++               qt3d-defaultgeometryloader-plugin,
++               qt3d-gltfsceneio-plugin,
++               qt3d-scene2d-plugin,
++               qt3d5-dev,
++               qt5-qmake,
++               qt5-qmake-bin,
++               qtbase5-dev,
++               qtbase5-private-dev,
++               qtchooser,
++               qtdeclarative5-dev,
++               qtdeclarative5-private-dev,
++               qtlocation5-dev,
++               qtmultimedia5-dev,
++               qtpositioning5-dev,
++               qtscript5-dev,
++               qttools5-dev,
++               qtwebengine5-dev [amd64 arm64 i386 mipsel]
++Standards-Version: 4.2.1
++Homepage: https://wiki.qt.io/Qt_for_Python
++Vcs-Git: https://salsa.debian.org/qt-kde-team/qt/pyside2.git
++Vcs-Browser: https://salsa.debian.org/qt-kde-team/qt/pyside2
++
++Package: python-pyside2-doc
++Architecture: all
++Section: doc
++Depends: ${misc:Depends}, ${sphinxdoc:Depends}
++Description: Python bindings for Qt5 (common documentation)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains the common documentation package.
++
++Package: libpyside2-5.11
++Section: libs
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python 2 bindings for Qt5 (base files)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python2 base file used by all modules.
++
++Package: libpyside2-py3-5.11
++Section: libs
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python 3 bindings for Qt5 (base files)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python3 base file used by all modules.
++
++Package: libpyside2-dev
++Section: libdevel
++Architecture: any
++Depends: ${misc:Depends}, ${shlibs:Depends}, libpyside2-5.11 (= ${binary:Version}),
++ libpyside2-py3-5.11 (= ${binary:Version}), pyqt5-dev
++Description: Python bindings for Qt5 (development files)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package provides the development headers for the libpyside2 library.
++
++Package: python-pyside2.qtcore
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Suggests: python-pyside2-doc
++Description: Python bindings for Qt5 core module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtCore module.
++
++Package: python3-pyside2.qtcore
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Suggests: python-pyside2-doc
++Description: Python bindings for Qt5 core module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtCore module.
++
++Package: shiboken2
++Section: devel
++Architecture: any
++Depends: ${misc:Depends}, ${shlibs:Depends}
++Description: CPython bindings generator for C++ libraries
++ Shiboken2 is a bindings generator for C++ libraries that outputs CPython
++ source code. It collects information from library headers, and then
++ merges modifications and handwritten code defined in the typesystem
++ description.
++ .
++ Shiboken2 is the binding generator used to create the PySide2 bindings.
++
++Package: libshiboken2-5.11
++Section: libs
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: CPython bindings generator for C++ libraries (Python2 shared library)
++ Shiboken2 is a bindings generator for C++ libraries that outputs CPython
++ source code. It collects information from library headers, and then
++ merges modifications and handwritten code defined in the typesystem
++ description.
++ .
++ Shiboken2 is the binding generator used to create the PySide2 bindings.
++ .
++ This package contains the shared Python 2 library used by shiboken2.
++
++Package: libshiboken2-py3-5.11
++Section: libs
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: CPython bindings generator for C++ libraries (Python3 shared library)
++ Shiboken2 is a bindings generator for C++ libraries that outputs CPython
++ source code. It collects information from library headers, and then
++ merges modifications and handwritten code defined in the typesystem
++ description.
++ .
++ Shiboken2 is the binding generator used to create the PySide2 bindings.
++ .
++ This package contains the shared Python 3 library used by shiboken2.
++
++Package: libshiboken2-dev
++Section: libdevel
++Architecture: any
++Depends: ${misc:Depends}, ${shlibs:Depends}, libshiboken2-5.11 (= ${binary:Version}),
++ libshiboken2-py3-5.11 (= ${binary:Version}), python-dev
++Description: CPython bindings generator for C++ libraries (development files)
++ Shiboken2 is a bindings generator for C++ libraries that outputs CPython
++ source code. It collects information from library headers, and then
++ merges modifications and handwritten code defined in the typesystem
++ description.
++ .
++ Shiboken2 is the binding generator used to create the PySide2 bindings.
++ .
++ This package provides the development headers for the libshiboken2 library.
++
++Package: shiboken2-doc
++Architecture: all
++Section: doc
++Depends: ${misc:Depends}, ${sphinxdoc:Depends}
++Description: CPython bindings generator for C++ libraries (common documentation)
++ Shiboken2 is a bindings generator for C++ libraries that outputs CPython
++ source code. It collects information from library headers, and then
++ merges modifications and handwritten code defined in the typesystem
++ description.
++ .
++ Shiboken2 is the binding generator used to create the PySide2 bindings.
++ .
++ This package contains the common documentation.
++
++Package: pyside2-tools
++Architecture: any
++Depends: ${misc:Depends}, ${shlibs:Depends}, python-pyside2uic, ${python:Depends}
++Description: development tools for PySide2 (uic, rcc, lupdate)
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ PySide2 ships Python bindings for the Qt5 framework. This package ships
++ the following accompanying tools:
++  * pyside2-rcc - PySide resource compiler
++  * pyside2-uic - Python User Interface Compiler for PySide
++  * pyside2-lupdate - update Qt Linguist translation files for PySide
++
++Package: python-pyside2uic
++Architecture: all
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: User Interface Compiler for PySide2 (Python 2)
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ PySide2 ships Python bindings for the Qt5 framework.
++ .
++ This package contains the Python User Interface Compiler for PySide2 in
++ Python 2.
++
++Package: python3-pyside2uic
++Architecture: all
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: User Interface Compiler for PySide2 (Python 3)
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ PySide2 ships Python bindings for the Qt5 framework.
++ .
++ This package contains the Python User Interface Compiler for PySide2 in
++ Python 3.
++
++Package: python-pyside2.qtwidgets
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Widgets module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtWidgets module.
++
++Package: python3-pyside2.qtwidgets
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Widgets module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtWidgets module.
++
++Package: python-pyside2.qt3drender
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 3DRender module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the Qt3DRender module.
++
++Package: python3-pyside2.qt3drender
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 3DRender module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the Qt3DRender module.
++
++Package: python-pyside2.qtquick
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Quick module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtQuick module.
++
++Package: python3-pyside2.qtquick
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Quick module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtQuick module.
++
++Package: python-pyside2.qtpositioning
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Positioning module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtPositioning module.
++
++Package: python3-pyside2.qtpositioning
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Positioning module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtPositioning module.
++
++Package: python-pyside2.qtx11extras
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 X11Extras module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtX11Extras module.
++
++Package: python3-pyside2.qtx11extras
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 X11Extras module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtX11Extras module.
++
++Package: python-pyside2.qtqml
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Qml module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtQml module.
++
++Package: python3-pyside2.qtqml
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Qml module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtQml module.
++
++Package: python-pyside2.qtwebenginecore
++Architecture: amd64 arm64 i386 mipsel
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 WebEngineCore module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtWebEngineCore module.
++
++Package: python3-pyside2.qtwebenginecore
++Architecture: amd64 arm64 i386 mipsel
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 WebEngineCore module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtWebEngineCore module.
++
++Package: python-pyside2.qttexttospeech
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 TextToSpeech module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtTextToSpeech module.
++
++Package: python3-pyside2.qttexttospeech
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 TextToSpeech module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtTextToSpeech module.
++
++Package: python-pyside2.qthelp
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Help module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtHelp module.
++
++Package: python3-pyside2.qthelp
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Help module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtHelp module.
++
++Package: python-pyside2.qtscripttools
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 ScriptTools module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtScriptTools module.
++
++Package: python3-pyside2.qtscripttools
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 ScriptTools module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtScriptTools module.
++
++Package: python-pyside2.qtnetwork
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Network module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtNetwork module.
++
++Package: python3-pyside2.qtnetwork
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Network module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtNetwork module.
++
++Package: python-pyside2.qtmultimediawidgets
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 MultimediaWidgets module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtMultimediaWidgets module.
++
++Package: python3-pyside2.qtmultimediawidgets
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 MultimediaWidgets module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtMultimediaWidgets module.
++
++Package: python-pyside2.qtlocation
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Location module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtLocation module.
++
++Package: python3-pyside2.qtlocation
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Location module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtLocation module.
++
++Package: python-pyside2.qt3dlogic
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 3DLogic module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the Qt3DLogic module.
++
++Package: python3-pyside2.qt3dlogic
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 3DLogic module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the Qt3DLogic module.
++
++Package: python-pyside2.qtsensors
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Sensors module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtSensors module.
++
++Package: python3-pyside2.qtsensors
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Sensors module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtSensors module.
++
++Package: python-pyside2.qtmultimedia
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Multimedia module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtMultimedia module.
++
++Package: python3-pyside2.qtmultimedia
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Multimedia module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtMultimedia module.
++
++Package: python-pyside2.qtscript
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Script module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtScript module.
++
++Package: python3-pyside2.qtscript
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Script module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtScript module.
++
++Package: python-pyside2.qtwebchannel
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 WebChannel module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtWebChannel module.
++
++Package: python3-pyside2.qtwebchannel
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 WebChannel module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtWebChannel module.
++
++Package: python-pyside2.qtprintsupport
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 PrintSupport module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtPrintSupport module.
++
++Package: python3-pyside2.qtprintsupport
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 PrintSupport module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtPrintSupport module.
++
++Package: python-pyside2.qtquickwidgets
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 QuickWidgets module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtQuickWidgets module.
++
++Package: python3-pyside2.qtquickwidgets
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 QuickWidgets module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtQuickWidgets module.
++
++Package: python-pyside2.qt3dinput
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 3DInput module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the Qt3DInput module.
++
++Package: python3-pyside2.qt3dinput
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 3DInput module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the Qt3DInput module.
++
++Package: python-pyside2.qtxml
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Xml module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtXml module.
++
++Package: python3-pyside2.qtxml
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Xml module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtXml module.
++
++Package: python-pyside2.qttest
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Test module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtTest module.
++
++Package: python3-pyside2.qttest
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Test module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtTest module.
++
++Package: python-pyside2.qtwebenginewidgets
++Architecture: amd64 arm64 i386 mipsel
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 WebEngineWidgets module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtWebEngineWidgets module.
++
++Package: python3-pyside2.qtwebenginewidgets
++Architecture: amd64 arm64 i386 mipsel
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 WebEngineWidgets module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtWebEngineWidgets module.
++
++Package: python-pyside2.qtconcurrent
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Concurrent module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtConcurrent module.
++
++Package: python3-pyside2.qtconcurrent
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Concurrent module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtConcurrent module.
++
++Package: python-pyside2.qtxmlpatterns
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 XmlPatterns module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtXmlPatterns module.
++
++Package: python3-pyside2.qtxmlpatterns
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 XmlPatterns module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtXmlPatterns module.
++
++Package: python-pyside2.qtcharts
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Charts module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtCharts module.
++
++Package: python3-pyside2.qtcharts
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Charts module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtCharts module.
++
++Package: python-pyside2.qtuitools
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 UiTools module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtUiTools module.
++
++Package: python3-pyside2.qtuitools
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 UiTools module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtUiTools module.
++
++Package: python-pyside2.qtopengl
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 OpenGL module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtOpenGL module.
++
++Package: python3-pyside2.qtopengl
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 OpenGL module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtOpenGL module.
++
++Package: python-pyside2.qt3dcore
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 3DCore module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the Qt3DCore module.
++
++Package: python3-pyside2.qt3dcore
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 3DCore module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the Qt3DCore module.
++
++Package: python-pyside2.qtsql
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Sql module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtSql module.
++
++Package: python3-pyside2.qtsql
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Sql module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtSql module.
++
++Package: python-pyside2.qtgui
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Gui module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtGui module.
++
++Package: python3-pyside2.qtgui
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Gui module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtGui module.
++
++Package: python-pyside2.qtsvg
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Svg module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtSvg module.
++
++Package: python3-pyside2.qtsvg
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 Svg module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtSvg module.
++
++Package: python-pyside2.qtwebsockets
++Architecture: any
++Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 WebSockets module (Python 2)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 2 bindings for the QtWebSockets module.
++
++Package: python3-pyside2.qtwebsockets
++Architecture: any
++Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
++Description: Python bindings for Qt5 WebSockets module (Python 3)
++ pyside2 provides Python bindings for Qt 5.x framework.
++ .
++ Qt is a cross-platform C++ application framework. Qt's primary feature
++ is its rich set of widgets that provide standard GUI functionality.
++ .
++ This package contains Python 3 bindings for the QtWebSockets module.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..dfdd9cc9c2938c8143fd649d392c30e576bcb5f3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,261 @@@
++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
++Upstream-Name: pyside2
++Source: https://download.qt.io/official_releases/QtForPython/
++
++Files: *
++Copyright: 2016-2018 The Qt Company Ltd.
++License: GPL-2 or GPL-3 or LGPL-3
++
++Files: examples/*
++Copyright: 2016-2018 The Qt Company Ltd.
++           2011 Arun Srinivasan <rulfzid@gmail.com>
++           2010-2013 Riverbank Computing Limited.
++         2010 Hans-Peter Jansen <hpj@urpla.net>
++         2010 velociraptor Genjix <aphidia@hotmail.com>
++         2009 Darryl Wallace, 2009 <wallacdj@gmail.com>
++License: BSD-3-clause
++
++Files: sources/patchelf/*
++Copyright: 2004-2009 Eelco Dolstra <e.dolstra@tudelft.nl>
++License: GPL-3+
++
++Files: sources/patchelf/elf.h
++Copyright: 1995-2008 Free Software Foundation, Inc.
++License: LGPL-2.1+
++
++Files: sources/pyside2/doc/typesystem_doc.xml.in
++ sources/pyside2/doc/codesnippets/*
++ sources/pyside2/doc/tutorials/*
++Copyright: 2016 The Qt Company Ltd.
++License: BSD-3-clause
++
++Files: sources/pyside2/doc/inheritance_diagram.py
++Copyright: 2010-2011 by the PySide team
++           2007-2011 by the Sphinx team
++License: BSD-2-clause
++ All rights reserved.
++ .
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions are
++ met:
++ .
++ * Redistributions of source code must retain the above copyright
++   notice, this list of conditions and the following disclaimer.
++ .
++ * Redistributions in binary form must reproduce the above copyright
++   notice, this list of conditions and the following disclaimer in the
++   documentation and/or other materials provided with the distribution.
++ .
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++Files: sources/pyside2/doc/pyhtml2devhelp.py
++ sources/pyside2/tests/run_test.sh
++ sources/pyside2/tests/Qt*
++ sources/pyside2/tests/mac/qmacstyle_test.py
++ sources/pyside2/tests/manually/*
++ sources/pyside2/tests/pysidetest/*
++ sources/pyside2/tests/signals/*
++ sources/pyside2/tests/util/*
++ sources/shiboken2/ApiExtractor/*
++ sources/shiboken2/generator/*
++ sources/shiboken2/generatorrunnermacros.h
++ sources/shiboken2/generators/*
++ sources/shiboken2/tests/*
++ sources/pyside2/tests/QtQml/qquickitem_grabToImage.*
++Copyright: 2009 Matthias Klose <doko@debian.org>
++           2002-2005 Roberto Raggi <roberto@kdevelop.org>
++           2011 Thomas Perl <m@thp.io>
++         2013 Kitware, Inc.
++           2016-2017 The Qt Company Ltd.
++License: GPL-3-EXCEPT
++
++Files: sources/pyside2-tools/*
++Copyright: 2016 The Qt Company Ltd.
++           2010 Riverbank Computing Limited.
++           2009-2011 Nokia Corporation and/or its subsidiary(-ies)
++           2009 Torsten Marek
++           2002-2007 Detlev Offenbach <detlev@die-offenbachs.de>
++           1992-2006 Trolltech AS. All rights reserved.
++License: GPL-2
++
++Files: debian/*
++Copyright: 2018 Sophie Brun <sophie@freexian.com>
++License: GPL-2+
++ This package is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++ .
++ This package is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ GNU General Public License for more details.
++ .
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <https://www.gnu.org/licenses/>
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
++
++License: BSD-3-clause
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions are
++ met:
++   * Redistributions of source code must retain the above copyright
++     notice, this list of conditions and the following disclaimer.
++   * Redistributions in binary form must reproduce the above copyright
++     notice, this list of conditions and the following disclaimer in
++     the documentation and/or other materials provided with the
++     distribution.
++   * Neither the name of The Qt Company Ltd nor the names of its
++     contributors may be used to endorse or promote products derived
++     from this software without specific prior written permission.
++ .
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
++
++License: GPL-2
++ This package is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2 as
++ published by the Free Software Foundation.
++ .
++ This package is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ GNU General Public License for more details.
++ .
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <http://www.gnu.org/licenses/>
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2"
++
++License: GPL-3
++ This package is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 3 as
++ published by the Free Software Foundation.
++ .
++ This package is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ GNU General Public License for more details.
++ .
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <http://www.gnu.org/licenses/>
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3"
++
++License: GPL-3+
++ This package is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation, either version 3 of the License, or
++ (at your option) any later version.
++ .
++ This package is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ GNU General Public License for more details.
++ .
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <http://www.gnu.org/licenses/>
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3"
++
++License: GPL-3-EXCEPT
++ This package is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 3 as
++ published by the Free Software Foundation, annotated with The Qt Company
++ GPL Exception 1.0:
++ .
++ The Qt Company GPL Exception 1.0
++ .
++ Exception 1:
++ .
++ As a special exception you may create a larger work which contains the
++ output of this application and distribute that work under terms of your
++ choice, so long as the work is not otherwise derived from or based on
++ this application and so long as the work does not in itself generate
++ output that contains the output from this application in its original
++ or modified form.
++ .
++ Exception 2:
++ .
++ As a special exception, you have permission to combine this application
++ with Plugins licensed under the terms of your choice, to produce an
++ executable, and to copy and distribute the resulting executable under
++ the terms of your choice. However, the executable must be accompanied
++ by a prominent notice offering all users of the executable the entire
++ source code to this application, excluding the source code of the
++ independent modules, but including any changes you have made to this
++ application, under the terms of this license.
++ .
++ This package is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ GNU General Public License for more details.
++ .
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <http://www.gnu.org/licenses/>
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3"
++
++License: LGPL-2.1+
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++ .
++ This library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ Lesser General Public License for more details.
++ .
++ You should have received a copy of the GNU Lesser General Public
++ License along with this library; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
++ USA
++ .
++ On Debian systems, the complete text of the Lesser GNU General
++ Public License version 2.1 can be found in
++ "/usr/share/common-licenses/LGPL-2.1"
++
++License: LGPL-3
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License version 3 as published by the Free Software Foundation.
++ .
++ This library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ Lesser General Public License for more details.
++ .
++ You should have received a copy of the GNU Lesser General Public
++ License along with this library; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
++ USA
++ .
++ On Debian systems, the complete text of the Lesser GNU General
++ Public License version 3 can be found in
++ "/usr/share/common-licenses/LGPL-3"
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e1efe8368c2f4350c420aa67b2a3280ba93d7308
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,5 @@@
++#!/usr/bin/dh-exec
++pyside2_install/py*-relwithdebinfo/lib/libpyside2-python2.7.${DEB_HOST_MULTIARCH}.so.* usr/lib/${DEB_HOST_MULTIARCH}/
++pyside2_install/py2*-relwithdebinfo/lib/python2.7/site-packages/PySide2/_git_pyside_version.py usr/lib/python2.7/dist-packages/PySide2
++pyside2_install/py2*-relwithdebinfo/lib/python2.7/site-packages/PySide2/__init__.py usr/lib/python2.7/dist-packages/PySide2
++pyside2_install/py2*-relwithdebinfo/lib/python2.7/site-packages/PySide2/_config.py usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..5204a36b2b103a1b355bd380cafb0a303573a7dd
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++# We ship compiled versions for each supported python version, with a symlink to the default version
++libpyside2-5.11: package-name-doesnt-match-sonames libpyside2-python2.7.x86-64-linux-gnu5.11
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4632c59073e8a17f74bb0186d87242d7516edbb1
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,8 @@@
++#!/usr/bin/dh-exec --with=subst
++pyside2_install/py2*-relwithdebinfo/include/PySide2 usr/include
++pyside2_install/py2*-relwithdebinfo/share/PySide2 usr/share
++pyside2_install/py*-relwithdebinfo/lib/pkgconfig/pyside2.pc usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig
++pyside2_install/py2*-relwithdebinfo/lib/libpyside2-python*.so usr/lib/${DEB_HOST_MULTIARCH}
++pyside3_install/py3*-relwithdebinfo/lib/libpyside2*.so usr/lib/${DEB_HOST_MULTIARCH}
++pyside2_install/py2*-relwithdebinfo/lib/cmake/PySide2* usr/lib/${DEB_HOST_MULTIARCH}/cmake
++pyside3_install/py3*-relwithdebinfo/lib/cmake/PySide2*/PySide2Config.cpython* usr/lib/${DEB_HOST_MULTIARCH}/cmake/PySide2-${MAIN_VERSION_UPSTREAM}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..28f46bee6a5eb9656d32602bb6940adc5d3cf67b
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,5 @@@
++#!/usr/bin/dh-exec
++pyside3_install/py3*-relwithdebinfo/lib/libpyside2*.so.* usr/lib/${DEB_HOST_MULTIARCH}
++pyside3_install/py3*-relwithdebinfo/lib/python*/site-packages/PySide2/_git_pyside_version.py usr/lib/python3/dist-packages/PySide2
++pyside3_install/py3*-relwithdebinfo/lib/python*/site-packages/PySide2/__init__.py usr/lib/python3/dist-packages/PySide2
++pyside3_install/py3*-relwithdebinfo/lib/python*/site-packages/PySide2/_config.py usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..43676f9899789f02cb9241820761983428bfb2b7
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++# We ship compiled versions for each supported python3 version, with a symlink to the default version
++libpyside2-py3-5.11: package-name-doesnt-match-sonames libpyside2.cpython-36m-x86-64-linux-gnu5.11 libpyside2.cpython-37m-x86-64-linux-gnu5.11
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..673544c403c3a69846d279f6652265bdac4d12e4
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++#!/usr/bin/dh-exec
++pyside2_install/py2*-relwithdebinfo/lib/libshiboken2-python2*.so.* usr/lib/${DEB_HOST_MULTIARCH}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..88bd81cfd8a0c804538bfcbe27c2afd4e7980f7f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++# We ship compiled versions for each supported python version, with a symlink to the default version
++libshiboken2-5.11: package-name-doesnt-match-sonames libshiboken2-python2.7.x86-64-linux-gnu5.11
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c74ccb34b92b5305eb46196d65f1eb6af642a3e9
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,7 @@@
++#!/usr/bin/dh-exec --with=subst
++pyside2_install/py2*-relwithdebinfo/include/shiboken2 usr/include
++pyside2_install/py2*-relwithdebinfo/lib/pkgconfig/shiboken2.pc usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig
++pyside2_install/py2*-relwithdebinfo/lib/libshiboken2*.so usr/lib/${DEB_HOST_MULTIARCH}
++pyside3_install/py3*-relwithdebinfo/lib/libshiboken2*.so usr/lib/${DEB_HOST_MULTIARCH}
++pyside2_install/py2*-relwithdebinfo/lib/cmake/Shiboken2* usr/lib/${DEB_HOST_MULTIARCH}/cmake
++pyside3_install/py3*-relwithdebinfo/lib/cmake/Shiboken2*/Shiboken2Config.cpython* usr/lib/${DEB_HOST_MULTIARCH}/cmake/Shiboken2-${MAIN_VERSION_UPSTREAM}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..dd4920b52024157e763b8916fbb838cf5a00ffe5
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++#!/usr/bin/dh-exec
++pyside3_install/py3*-relwithdebinfo/lib/libshiboken2*.so.* usr/lib/${DEB_HOST_MULTIARCH}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..fe1ec9c5dcfcb21d7c663190f5295a18aa8fadf8
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++# We ship compiled versions for each supported python3 version, with a symlink to the default version
++libshiboken2-py3-5.11: package-name-doesnt-match-sonames libshiboken2.cpython-36m-x86-64-linux-gnu5.11 libshiboken2.cpython-37m-x86-64-linux-gnu5.11
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..0227cbbaf89b589a38f3d9e06b83d6d785b049e4
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,21 @@@
++Description: Drop git requirement
++ Only to allow local build without git.
++Author: Sophie Brun <sophie@freexian.com>
++Last-Update: 2018-07-06
++---
++This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
++--- a/build_scripts/main.py
+++++ b/build_scripts/main.py
++@@ -305,9 +305,9 @@ def get_qt_version():
++     return qt_version
++ 
++ def prepare_build():
++-    if (os.path.isdir(".git") and not OPTION_IGNOREGIT and
++-            not OPTION_ONLYPACKAGE and not OPTION_REUSE_BUILD):
++-        prepare_sub_modules()
+++    #if (os.path.isdir(".git") and not OPTION_IGNOREGIT and
+++    #        not OPTION_ONLYPACKAGE and not OPTION_REUSE_BUILD):
+++    #    prepare_sub_modules()
++     # Clean up temp and package folders
++     for n in [pyside_package_dir_name, "build"]:
++         d = os.path.join(setup_script_dir, n)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c3dbc2d662f3492890ed16967dce54b0ff613b5a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,45 @@@
++Description: Fix spelling errors
++Author: Sophie Brun <sophie@freexian.com>
++Last-Update: 2018-07-12
++---
++This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
++--- a/sources/pyside2/libpyside/pysideproperty.cpp
+++++ b/sources/pyside2/libpyside/pysideproperty.cpp
++@@ -243,7 +243,7 @@ PyObject* qPropertySetter(PyObject* self
++         Py_INCREF(callback);
++         return callback;
++     } else {
++-        PyErr_SetString(PyExc_TypeError, "Invalid property setter agument.");
+++        PyErr_SetString(PyExc_TypeError, "Invalid property setter argument.");
++         return 0;
++     }
++ }
++@@ -260,7 +260,7 @@ PyObject* qPropertyGetter(PyObject* self
++         Py_INCREF(callback);
++         return callback;
++     } else {
++-        PyErr_SetString(PyExc_TypeError, "Invalid property getter agument.");
+++        PyErr_SetString(PyExc_TypeError, "Invalid property getter argument.");
++         return 0;
++     }
++ }
++@@ -360,7 +360,7 @@ int setValue(PySideProperty* self, PyObj
++         Shiboken::AutoDecRef result(PyObject_CallObject(fset, args));
++         return (result.isNull() ? -1 : 0);
++     } else {
++-        PyErr_SetString(PyExc_AttributeError, "Attibute read only");
+++        PyErr_SetString(PyExc_AttributeError, "Attribute read only");
++     }
++     return -1;
++ }
++--- a/sources/shiboken2/ApiExtractor/typesystem.cpp
+++++ b/sources/shiboken2/ApiExtractor/typesystem.cpp
++@@ -1130,7 +1130,7 @@ bool Handler::startElement(const QString
++             } else if (modeName == QLatin1String("replace")) {
++                 mode = TypeSystem::DocModificationReplace;
++             } else {
++-                m_error = QLatin1String("Unknow documentation injection mode: ") + modeName;
+++                m_error = QLatin1String("Unknown documentation injection mode: ") + modeName;
++                 return false;
++             }
++ 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c7598ce48ed604d07ac3918471358e9067dd0029
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,33 @@@
++Description: Remove privacy breach in documentation
++Author: Sophie Brun <sophie@freexian.com>
++Last-Update: 2018-07-12
++---
++This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
++--- a/docs/index.rst
+++++ b/docs/index.rst
++@@ -2,25 +2,6 @@
++ PySide
++ ======
++ 
++-.. image:: https://pypip.in/wheel/PySide/badge.png
++-   :target: https://pypi.python.org/pypi/PySide/
++-   :alt: Wheel Status
++-
++-.. image:: https://pypip.in/download/PySide/badge.png
++-   :target: https://pypi.python.org/pypi/PySide/
++-   :alt: Downloads
++-
++-.. image:: https://pypip.in/version/PySide/badge.png
++-   :target: https://pypi.python.org/pypi/PySide/
++-   :alt: Latest Version
++-
++-.. image:: https://pypip.in/license/PySide/badge.png
++-   :target: https://pypi.python.org/pypi/PySide/
++-   :alt: License
++-
++-.. image:: https://readthedocs.org/projects/pip/badge/
++-    :target: https://pyside.readthedocs.org
++-
++ |
++ 
++ Introduction
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..1627062df23f1a469b8fd9eddd3e645f60286b29
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,4 @@@
++fix-spelling-errors.patch
++drop-git-requirement.patch
++update-patchelf.patch
++remove-privacy-breach-in-doc.patch
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..747fea89b5d215ff30afabe0ce8c00a06b117cdc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,3097 @@@
++Update patchelf to current git version
++
++The current version fixes a bug which broke the ability to strip
++binaries with debug symbols:
++https://github.com/NixOS/patchelf/pull/117
++
++With the former version of patchelf, I would get "not enough room for
++program headers, try linking with -N" when trying to strip the binaries.
++
++This patch brings patchelf in sync with the commit
++27ffe8ae871e7a186018d66020ef3f6162c12c69 of patchelf's git
++repository.
++
++Also update patchelf's build process to match the logic in upstream's
++automake files (thanks to Frédéric Bonnard for the patch to properly use
++getconf PAGESIZE).
++
++Bug: https://bugreports.qt.io/browse/PYSIDE-740
++Last-Update: 2018-07-09
++
++--- a/sources/patchelf/patchelf.cc
+++++ b/sources/patchelf/patchelf.cc
++@@ -1,91 +1,133 @@
+++/*
+++ *  PatchELF is a utility to modify properties of ELF executables and libraries
+++ *  Copyright (C) 2004-2016  Eelco Dolstra <edolstra@gmail.com>
+++ *
+++ *  This program is free software: you can redistribute it and/or modify
+++ *  it under the terms of the GNU General Public License as published by
+++ *  the Free Software Foundation, either version 3 of the License, or (at
+++ *  your option) any later version.
+++ *
+++ *  This program is distributed in the hope that it will be useful, but
+++ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+++ *  General Public License for more details.
+++ *
+++ *  You should have received a copy of the GNU General Public License
+++ *  along with this program. If not, see <http://www.gnu.org/licenses/>.
+++ */
+++
++ #include <string>
++ #include <vector>
++ #include <set>
++ #include <map>
++ #include <algorithm>
++-
++-#include <stdlib.h>
++-#include <stdio.h>
++-#include <stdarg.h>
++-#include <assert.h>
++-#include <string.h>
++-#include <errno.h>
+++#include <memory>
+++#include <sstream>
+++#include <limits>
+++#include <stdexcept>
+++
+++#include <cstdlib>
+++#include <cstdio>
+++#include <cstdarg>
+++#include <cassert>
+++#include <cstring>
+++#include <cerrno>
++ 
++ #include <sys/types.h>
++ #include <sys/stat.h>
++ #include <unistd.h>
++ #include <fcntl.h>
++-#include <limits.h>
++ 
++ #include "elf.h"
++ 
++-using namespace std;
++ 
+++static bool debugMode = false;
++ 
++-#ifdef MIPSEL
++-/* The lemote fuloong 2f kernel defconfig sets a page size of 16KB */
++-const unsigned int pageSize = 4096*4;
++-#else
++-const unsigned int pageSize = 4096;
++-#endif
+++static bool forceRPath = false;
++ 
+++static std::vector<std::string> fileNames;
+++static int pageSize = PAGESIZE;
++ 
++-static bool debugMode = false;
+++typedef std::shared_ptr<std::vector<unsigned char>> FileContents;
++ 
++-static bool forceRPath = false;
++ 
++-static string fileName;
+++#define ElfFileParams class Elf_Ehdr, class Elf_Phdr, class Elf_Shdr, class Elf_Addr, class Elf_Off, class Elf_Dyn, class Elf_Sym, class Elf_Verneed
+++#define ElfFileParamNames Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym, Elf_Verneed
++ 
++ 
++-off_t fileSize, maxSize;
++-unsigned char * contents = 0;
+++static std::vector<std::string> splitColonDelimitedString(const char * s)
+++{
+++    std::vector<std::string> parts;
+++    const char * pos = s;
+++    while (*pos) {
+++        const char * end = strchr(pos, ':');
+++        if (!end) end = strchr(pos, 0);
++ 
+++        parts.push_back(std::string(pos, end - pos));
+++        if (*end == ':') ++end;
+++        pos = end;
+++    }
++ 
++-#define ElfFileParams class Elf_Ehdr, class Elf_Phdr, class Elf_Shdr, class Elf_Addr, class Elf_Off, class Elf_Dyn, class Elf_Sym
++-#define ElfFileParamNames Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym
+++    return parts;
+++}
+++
+++static bool hasAllowedPrefix(const std::string & s, const std::vector<std::string> & allowedPrefixes)
+++{
+++    for (auto & i : allowedPrefixes)
+++        if (!s.compare(0, i.size(), i)) return true;
+++    return false;
+++}
+++
+++
+++static unsigned int getPageSize()
+++{
+++    return pageSize;
+++}
++ 
++ 
++ template<ElfFileParams>
++ class ElfFile
++ {
+++public:
+++
+++    const FileContents fileContents;
+++
+++private:
+++
+++    unsigned char * contents;
+++
++     Elf_Ehdr * hdr;
++-    vector<Elf_Phdr> phdrs;
++-    vector<Elf_Shdr> shdrs;
+++    std::vector<Elf_Phdr> phdrs;
+++    std::vector<Elf_Shdr> shdrs;
++ 
++     bool littleEndian;
++ 
++-    bool changed;
+++    bool changed = false;
++ 
++-    bool isExecutable;
+++    bool isExecutable = false;
++ 
++-    typedef string SectionName;
++-    typedef map<SectionName, string> ReplacedSections;
+++    typedef std::string SectionName;
+++    typedef std::map<SectionName, std::string> ReplacedSections;
++ 
++     ReplacedSections replacedSections;
++ 
++-    string sectionNames; /* content of the .shstrtab section */
+++    std::string sectionNames; /* content of the .shstrtab section */
++ 
++     /* Align on 4 or 8 bytes boundaries on 32- or 64-bit platforms
++        respectively. */
++-    unsigned int sectionAlignment;
+++    size_t sectionAlignment = sizeof(Elf_Off);
++ 
++-    vector<SectionName> sectionsByOldIndex;
+++    std::vector<SectionName> sectionsByOldIndex;
++ 
++ public:
++ 
++-    ElfFile()
++-    {
++-        changed = false;
++-        sectionAlignment = sizeof(Elf_Off);
++-    }
+++    ElfFile(FileContents fileContents);
++ 
++     bool isChanged()
++     {
++         return changed;
++     }
++ 
++-    void parse();
++-
++ private:
++ 
++     struct CompPhdr
++@@ -93,8 +135,11 @@ private:
++         ElfFile * elfFile;
++         bool operator ()(const Elf_Phdr & x, const Elf_Phdr & y)
++         {
++-            if (x.p_type == PT_PHDR) return true;
+++            // A PHDR comes before everything else.
++             if (y.p_type == PT_PHDR) return false;
+++            if (x.p_type == PT_PHDR) return true;
+++
+++            // Sort non-PHDRs by address.
++             return elfFile->rdi(x.p_paddr) < elfFile->rdi(y.p_paddr);
++         }
++     };
++@@ -118,7 +163,7 @@ private:
++ 
++     void shiftFile(unsigned int extraPages, Elf_Addr startPage);
++ 
++-    string getSectionName(const Elf_Shdr & shdr);
+++    std::string getSectionName(const Elf_Shdr & shdr);
++ 
++     Elf_Shdr & findSection(const SectionName & sectionName);
++ 
++@@ -126,9 +171,11 @@ private:
++ 
++     unsigned int findSection3(const SectionName & sectionName);
++ 
++-    string & replaceSection(const SectionName & sectionName,
+++    std::string & replaceSection(const SectionName & sectionName,
++         unsigned int size);
++ 
+++    bool haveReplacedSection(const SectionName & sectionName);
+++
++     void writeReplacedSections(Elf_Off & curOff,
++         Elf_Addr startAddr, Elf_Off startOffset);
++ 
++@@ -142,15 +189,27 @@ public:
++ 
++     void rewriteSections();
++ 
++-    string getInterpreter();
+++    std::string getInterpreter();
+++
+++    typedef enum { printSoname, replaceSoname } sonameMode;
+++
+++    void modifySoname(sonameMode op, const std::string & newSoname);
+++
+++    void setInterpreter(const std::string & newInterpreter);
+++
+++    typedef enum { rpPrint, rpShrink, rpSet, rpRemove } RPathOp;
++ 
++-    void setInterpreter(const string & newInterpreter);
+++    void modifyRPath(RPathOp op, const std::vector<std::string> & allowedRpathPrefixes, std::string newRPath);
++ 
++-    typedef enum { rpPrint, rpShrink, rpSet } RPathOp;
+++    void addNeeded(const std::set<std::string> & libs);
++ 
++-    void modifyRPath(RPathOp op, string newRPath);
+++    void removeNeeded(const std::set<std::string> & libs);
++ 
++-    void removeNeeded(set<string> libs);
+++    void replaceNeeded(const std::map<std::string, std::string> & libs);
+++
+++    void printNeededLibs();
+++
+++    void noDefaultLib();
++ 
++ private:
++ 
++@@ -205,73 +264,151 @@ static void debug(const char * format, .
++ }
++ 
++ 
++-static void error(string msg)
+++void fmt2(std::ostringstream & out)
++ {
++-    if (errno) perror(msg.c_str()); else fprintf(stderr, "%s\n", msg.c_str());
++-    exit(1);
++ }
++ 
++ 
++-static void growFile(off_t newSize)
+++template<typename T, typename... Args>
+++void fmt2(std::ostringstream & out, T x, Args... args)
++ {
++-    if (newSize > maxSize) error("maximum file size exceeded");
++-    if (newSize <= fileSize) return;
++-    if (newSize > fileSize)
++-        memset(contents + fileSize, 0, newSize - fileSize);
++-    fileSize = newSize;
+++    out << x;
+++    fmt2(out, args...);
++ }
++ 
++ 
++-static void readFile(string fileName, mode_t * fileMode)
+++template<typename... Args>
+++std::string fmt(Args... args)
+++{
+++    std::ostringstream out;
+++    fmt2(out, args...);
+++    return out.str();
+++}
+++
+++
+++struct SysError : std::runtime_error
+++{
+++    int errNo;
+++    SysError(const std::string & msg)
+++        : std::runtime_error(fmt(msg + ": " + strerror(errno)))
+++        , errNo(errno)
+++    { }
+++};
+++
+++
+++__attribute__((noreturn)) static void error(std::string msg)
+++{
+++    if (errno)
+++        throw SysError(msg);
+++    else
+++        throw std::runtime_error(msg);
+++}
+++
+++
+++static void growFile(FileContents contents, size_t newSize)
+++{
+++    if (newSize > contents->capacity()) error("maximum file size exceeded");
+++    if (newSize <= contents->size()) return;
+++    contents->resize(newSize, 0);
+++}
+++
+++
+++static FileContents readFile(std::string fileName,
+++    size_t cutOff = std::numeric_limits<size_t>::max())
++ {
++     struct stat st;
++-    if (stat(fileName.c_str(), &st) != 0) error("stat");
++-    fileSize = st.st_size;
++-    *fileMode = st.st_mode;
++-    maxSize = fileSize + 8 * 1024 * 1024;
+++    if (stat(fileName.c_str(), &st) != 0)
+++        throw SysError(fmt("getting info about '", fileName, "'"));
++ 
++-    contents = (unsigned char *) malloc(fileSize + maxSize);
++-    if (!contents) abort();
+++    if ((uint64_t) st.st_size > (uint64_t) std::numeric_limits<size_t>::max())
+++        throw SysError(fmt("cannot read file of size ", st.st_size, " into memory"));
+++
+++    size_t size = std::min(cutOff, (size_t) st.st_size);
+++
+++    FileContents contents = std::make_shared<std::vector<unsigned char>>();
+++    contents->reserve(size + 32 * 1024 * 1024);
+++    contents->resize(size, 0);
++ 
++     int fd = open(fileName.c_str(), O_RDONLY);
++-    if (fd == -1) error("open");
+++    if (fd == -1) throw SysError(fmt("opening '", fileName, "'"));
++ 
++-    if (read(fd, contents, fileSize) != fileSize) error("read");
+++    size_t bytesRead = 0;
+++    ssize_t portion;
+++    while ((portion = read(fd, contents->data() + bytesRead, size - bytesRead)) > 0)
+++        bytesRead += portion;
+++
+++    if (bytesRead != size)
+++        throw SysError(fmt("reading '", fileName, "'"));
++ 
++     close(fd);
+++
+++    return contents;
++ }
++ 
++ 
++-static void checkPointer(void * p, unsigned int size)
+++struct ElfType
+++{
+++    bool is32Bit;
+++    int machine; // one of EM_*
+++};
+++
+++
+++ElfType getElfType(const FileContents & fileContents)
+++{
+++    /* Check the ELF header for basic validity. */
+++    if (fileContents->size() < (off_t) sizeof(Elf32_Ehdr)) error("missing ELF header");
+++
+++    auto contents = fileContents->data();
+++
+++    if (memcmp(contents, ELFMAG, SELFMAG) != 0)
+++        error("not an ELF executable");
+++
+++    if (contents[EI_VERSION] != EV_CURRENT)
+++        error("unsupported ELF version");
+++
+++    if (contents[EI_CLASS] != ELFCLASS32 && contents[EI_CLASS] != ELFCLASS64)
+++        error("ELF executable is not 32 or 64 bit");
+++
+++    bool is32Bit = contents[EI_CLASS] == ELFCLASS32;
+++
+++    // FIXME: endianness
+++    return ElfType{is32Bit, is32Bit ? ((Elf32_Ehdr *) contents)->e_machine : ((Elf64_Ehdr *) contents)->e_machine};
+++}
+++
+++
+++static void checkPointer(const FileContents & contents, void * p, unsigned int size)
++ {
++     unsigned char * q = (unsigned char *) p;
++-    assert(q >= contents && q + size <= contents + fileSize);
+++    assert(q >= contents->data() && q + size <= contents->data() + contents->size());
++ }
++ 
++ 
++ template<ElfFileParams>
++-void ElfFile<ElfFileParamNames>::parse()
+++ElfFile<ElfFileParamNames>::ElfFile(FileContents fileContents)
+++    : fileContents(fileContents)
+++    , contents(fileContents->data())
++ {
++-    isExecutable = false;
++-
++     /* Check the ELF header for basic validity. */
++-    if (fileSize < (off_t) sizeof(Elf_Ehdr)) error("missing ELF header");
+++    if (fileContents->size() < (off_t) sizeof(Elf_Ehdr)) error("missing ELF header");
++ 
++-    hdr = (Elf_Ehdr *) contents;
+++    hdr = (Elf_Ehdr *) fileContents->data();
++ 
++     if (memcmp(hdr->e_ident, ELFMAG, SELFMAG) != 0)
++         error("not an ELF executable");
++ 
++-    littleEndian = contents[EI_DATA] == ELFDATA2LSB;
+++    littleEndian = hdr->e_ident[EI_DATA] == ELFDATA2LSB;
++ 
++     if (rdi(hdr->e_type) != ET_EXEC && rdi(hdr->e_type) != ET_DYN)
++         error("wrong ELF type");
++ 
++-    if ((off_t) (rdi(hdr->e_phoff) + rdi(hdr->e_phnum) * rdi(hdr->e_phentsize)) > fileSize)
++-        error("missing program headers");
+++    if ((size_t) (rdi(hdr->e_phoff) + rdi(hdr->e_phnum) * rdi(hdr->e_phentsize)) > fileContents->size())
+++        error("program header table out of bounds");
++ 
++-    if ((off_t) (rdi(hdr->e_shoff) + rdi(hdr->e_shnum) * rdi(hdr->e_shentsize)) > fileSize)
++-        error("missing section headers");
+++    if (rdi(hdr->e_shnum) == 0)
+++        error("no section headers. The input file is probably a statically linked, self-decompressing binary");
+++
+++    if ((size_t) (rdi(hdr->e_shoff) + rdi(hdr->e_shnum) * rdi(hdr->e_shentsize)) > fileContents->size())
+++        error("section header table out of bounds");
++ 
++     if (rdi(hdr->e_phentsize) != sizeof(Elf_Phdr))
++         error("program headers have wrong size");
++@@ -292,12 +429,12 @@ void ElfFile<ElfFileParamNames>::parse()
++     assert(shstrtabIndex < shdrs.size());
++     unsigned int shstrtabSize = rdi(shdrs[shstrtabIndex].sh_size);
++     char * shstrtab = (char * ) contents + rdi(shdrs[shstrtabIndex].sh_offset);
++-    checkPointer(shstrtab, shstrtabSize);
+++    checkPointer(fileContents, shstrtab, shstrtabSize);
++ 
++     assert(shstrtabSize > 0);
++     assert(shstrtab[shstrtabSize - 1] == 0);
++ 
++-    sectionNames = string(shstrtab, shstrtabSize);
+++    sectionNames = std::string(shstrtab, shstrtabSize);
++ 
++     sectionsByOldIndex.resize(hdr->e_shnum);
++     for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i)
++@@ -320,13 +457,13 @@ void ElfFile<ElfFileParamNames>::sortShd
++ {
++     /* Translate sh_link mappings to section names, since sorting the
++        sections will invalidate the sh_link fields. */
++-    map<SectionName, SectionName> linkage;
+++    std::map<SectionName, SectionName> linkage;
++     for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i)
++         if (rdi(shdrs[i].sh_link) != 0)
++             linkage[getSectionName(shdrs[i])] = getSectionName(shdrs[rdi(shdrs[i].sh_link)]);
++ 
++     /* Idem for sh_info on certain sections. */
++-    map<SectionName, SectionName> info;
+++    std::map<SectionName, SectionName> info;
++     for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i)
++         if (rdi(shdrs[i].sh_info) != 0 &&
++             (rdi(shdrs[i].sh_type) == SHT_REL || rdi(shdrs[i].sh_type) == SHT_RELA))
++@@ -358,21 +495,22 @@ void ElfFile<ElfFileParamNames>::sortShd
++ }
++ 
++ 
++-static void writeFile(string fileName, mode_t fileMode)
+++static void writeFile(std::string fileName, FileContents contents)
++ {
++-    string fileName2 = fileName + "_patchelf_tmp";
++-
++-    int fd = open(fileName2.c_str(),
++-        O_CREAT | O_TRUNC | O_WRONLY, 0700);
++-    if (fd == -1) error("open");
++-
++-    if (write(fd, contents, fileSize) != fileSize) error("write");
+++    int fd = open(fileName.c_str(), O_TRUNC | O_WRONLY);
+++    if (fd == -1)
+++        error("open");
+++
+++    size_t bytesWritten = 0;
+++    ssize_t portion;
+++    while ((portion = write(fd, contents->data() + bytesWritten, contents->size() - bytesWritten)) > 0)
+++        bytesWritten += portion;
++ 
++-    if (close(fd) != 0) error("close");
+++    if (bytesWritten != contents->size())
+++        error("write");
++ 
++-    if (chmod(fileName2.c_str(), fileMode) != 0) error("chmod");
++-
++-    if (rename(fileName2.c_str(), fileName.c_str()) != 0) error("rename");
+++    if (close(fd) != 0)
+++        error("close");
++ }
++ 
++ 
++@@ -385,12 +523,12 @@ static unsigned int roundUp(unsigned int
++ template<ElfFileParams>
++ void ElfFile<ElfFileParamNames>::shiftFile(unsigned int extraPages, Elf_Addr startPage)
++ {
++-    /* Move the entire contents of the file `extraPages' pages
+++    /* Move the entire contents of the file 'extraPages' pages
++        further. */
++-    unsigned int oldSize = fileSize;
++-    unsigned int shift = extraPages * pageSize;
++-    growFile(fileSize + extraPages * pageSize);
++-    memmove(contents + extraPages * pageSize, contents, oldSize);
+++    unsigned int oldSize = fileContents->size();
+++    unsigned int shift = extraPages * getPageSize();
+++    growFile(fileContents, fileContents->size() + extraPages * getPageSize());
+++    memmove(contents + extraPages * getPageSize(), contents, oldSize);
++     memset(contents + sizeof(Elf_Ehdr), 0, shift - sizeof(Elf_Ehdr));
++ 
++     /* Adjust the ELF header. */
++@@ -407,8 +545,8 @@ void ElfFile<ElfFileParamNames>::shiftFi
++         if (rdi(phdrs[i].p_align) != 0 &&
++             (rdi(phdrs[i].p_vaddr) - rdi(phdrs[i].p_offset)) % rdi(phdrs[i].p_align) != 0) {
++             debug("changing alignment of program header %d from %d to %d\n", i,
++-                rdi(phdrs[i].p_align), pageSize);
++-            wri(phdrs[i].p_align, pageSize);
+++                rdi(phdrs[i].p_align), getPageSize());
+++            wri(phdrs[i].p_align, getPageSize());
++         }
++     }
++ 
++@@ -422,14 +560,14 @@ void ElfFile<ElfFileParamNames>::shiftFi
++     wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage));
++     wri(phdr.p_filesz, wri(phdr.p_memsz, shift));
++     wri(phdr.p_flags, PF_R | PF_W);
++-    wri(phdr.p_align, pageSize);
+++    wri(phdr.p_align, getPageSize());
++ }
++ 
++ 
++ template<ElfFileParams>
++-string ElfFile<ElfFileParamNames>::getSectionName(const Elf_Shdr & shdr)
+++std::string ElfFile<ElfFileParamNames>::getSectionName(const Elf_Shdr & shdr)
++ {
++-    return string(sectionNames.c_str() + rdi(shdr.sh_name));
+++    return std::string(sectionNames.c_str() + rdi(shdr.sh_name));
++ }
++ 
++ 
++@@ -437,8 +575,12 @@ template<ElfFileParams>
++ Elf_Shdr & ElfFile<ElfFileParamNames>::findSection(const SectionName & sectionName)
++ {
++     Elf_Shdr * shdr = findSection2(sectionName);
++-    if (!shdr)
++-        error("cannot find section " + sectionName);
+++    if (!shdr) {
+++        std::string extraMsg = "";
+++        if (sectionName == ".interp" || sectionName == ".dynamic" || sectionName == ".dynstr")
+++            extraMsg = ". The input file is most likely statically linked";
+++        error("cannot find section '" + sectionName + "'" + extraMsg);
+++    }
++     return *shdr;
++ }
++ 
++@@ -459,19 +601,28 @@ unsigned int ElfFile<ElfFileParamNames>:
++     return 0;
++ }
++ 
+++template<ElfFileParams>
+++bool ElfFile<ElfFileParamNames>::haveReplacedSection(const SectionName & sectionName)
+++{
+++    ReplacedSections::iterator i = replacedSections.find(sectionName);
+++
+++    if (i != replacedSections.end())
+++        return true;
+++    return false;
+++}
++ 
++ template<ElfFileParams>
++-string & ElfFile<ElfFileParamNames>::replaceSection(const SectionName & sectionName,
+++std::string & ElfFile<ElfFileParamNames>::replaceSection(const SectionName & sectionName,
++     unsigned int size)
++ {
++     ReplacedSections::iterator i = replacedSections.find(sectionName);
++-    string s;
+++    std::string s;
++ 
++     if (i != replacedSections.end()) {
++-        s = string(i->second);
+++        s = std::string(i->second);
++     } else {
++         Elf_Shdr & shdr = findSection(sectionName);
++-        s = string((char *) contents + rdi(shdr.sh_offset), rdi(shdr.sh_size));
+++        s = std::string((char *) contents + rdi(shdr.sh_offset), rdi(shdr.sh_size));
++     }
++ 
++     s.resize(size);
++@@ -488,29 +639,25 @@ void ElfFile<ElfFileParamNames>::writeRe
++     /* Overwrite the old section contents with 'X's.  Do this
++        *before* writing the new section contents (below) to prevent
++        clobbering previously written new section contents. */
++-    for (ReplacedSections::iterator i = replacedSections.begin();
++-         i != replacedSections.end(); ++i)
++-    {
++-        string sectionName = i->first;
+++    for (auto & i : replacedSections) {
+++        std::string sectionName = i.first;
++         Elf_Shdr & shdr = findSection(sectionName);
++         memset(contents + rdi(shdr.sh_offset), 'X', rdi(shdr.sh_size));
++     }
++ 
++-    for (ReplacedSections::iterator i = replacedSections.begin();
++-         i != replacedSections.end(); ++i)
++-    {
++-        string sectionName = i->first;
+++    for (auto & i : replacedSections) {
+++        std::string sectionName = i.first;
++         Elf_Shdr & shdr = findSection(sectionName);
++-        debug("rewriting section `%s' from offset 0x%x (size %d) to offset 0x%x (size %d)\n",
++-            sectionName.c_str(), rdi(shdr.sh_offset), rdi(shdr.sh_size), curOff, i->second.size());
+++        debug("rewriting section '%s' from offset 0x%x (size %d) to offset 0x%x (size %d)\n",
+++            sectionName.c_str(), rdi(shdr.sh_offset), rdi(shdr.sh_size), curOff, i.second.size());
++ 
++-        memcpy(contents + curOff, (unsigned char *) i->second.c_str(),
++-            i->second.size());
+++        memcpy(contents + curOff, (unsigned char *) i.second.c_str(),
+++            i.second.size());
++ 
++         /* Update the section header for this section. */
++         wri(shdr.sh_offset, curOff);
++         wri(shdr.sh_addr, startAddr + (curOff - startOffset));
++-        wri(shdr.sh_size, i->second.size());
+++        wri(shdr.sh_size, i.second.size());
++         wri(shdr.sh_addralign, sectionAlignment);
++ 
++         /* If this is the .interp section, then the PT_INTERP segment
++@@ -535,7 +682,7 @@ void ElfFile<ElfFileParamNames>::writeRe
++                 }
++         }
++ 
++-        curOff += roundUp(i->second.size(), sectionAlignment);
+++        curOff += roundUp(i.second.size(), sectionAlignment);
++     }
++ 
++     replacedSections.clear();
++@@ -551,58 +698,57 @@ void ElfFile<ElfFileParamNames>::rewrite
++        page of other segments. */
++     Elf_Addr startPage = 0;
++     for (unsigned int i = 0; i < phdrs.size(); ++i) {
++-        Elf_Addr thisPage = roundUp(rdi(phdrs[i].p_vaddr) + rdi(phdrs[i].p_memsz), pageSize);
+++        Elf_Addr thisPage = roundUp(rdi(phdrs[i].p_vaddr) + rdi(phdrs[i].p_memsz), getPageSize());
++         if (thisPage > startPage) startPage = thisPage;
++     }
++ 
++     debug("last page is 0x%llx\n", (unsigned long long) startPage);
++ 
++-
++-    /* Compute the total space needed for the replaced sections and
++-       the program headers. */
++-    off_t neededSpace = (phdrs.size() + 1) * sizeof(Elf_Phdr);
++-    for (ReplacedSections::iterator i = replacedSections.begin();
++-         i != replacedSections.end(); ++i)
++-        neededSpace += roundUp(i->second.size(), sectionAlignment);
+++    /* Because we're adding a new section header, we're necessarily increasing
+++       the size of the program header table.  This can cause the first section
+++       to overlap the program header table in memory; we need to shift the first
+++       few segments to someplace else. */
+++    /* Some sections may already be replaced so account for that */
+++    unsigned int i = 1;
+++    Elf_Addr pht_size = sizeof(Elf_Ehdr) + (phdrs.size() + 1)*sizeof(Elf_Phdr);
+++    while( shdrs[i].sh_addr <= pht_size && i < rdi(hdr->e_shnum) ) {
+++        if (not haveReplacedSection(getSectionName(shdrs[i])))
+++            replaceSection(getSectionName(shdrs[i]), shdrs[i].sh_size);
+++        i++;
+++    }
+++
+++    /* Compute the total space needed for the replaced sections */
+++    off_t neededSpace = 0;
+++    for (auto & i : replacedSections)
+++        neededSpace += roundUp(i.second.size(), sectionAlignment);
++     debug("needed space is %d\n", neededSpace);
++ 
+++    size_t startOffset = roundUp(fileContents->size(), getPageSize());
++ 
++-    size_t startOffset = roundUp(fileSize, pageSize);
++-
++-    growFile(startOffset + neededSpace);
++-
+++    growFile(fileContents, startOffset + neededSpace);
++ 
++     /* Even though this file is of type ET_DYN, it could actually be
++        an executable.  For instance, Gold produces executables marked
++-       ET_DYN.  In that case we can still hit the kernel bug that
++-       necessitated rewriteSectionsExecutable().  However, such
++-       executables also tend to start at virtual address 0, so
+++       ET_DYN as does LD when linking with pie. If we move PT_PHDR, it
+++       has to stay in the first PT_LOAD segment or any subsequent ones
+++       if they're continuous in memory due to linux kernel constraints
+++       (see BUGS). Since the end of the file would be after bss, we can't 
+++       move PHDR there, we therefore choose to leave PT_PHDR where it is but
+++       move enough following sections such that we can add the extra PT_LOAD
+++       section to it. This PT_LOAD segment ensures the sections at the end of
+++       the file are mapped into memory for ld.so to process.
+++       We can't use the approach in rewriteSectionsExecutable()
+++       since DYN executables tend to start at virtual address 0, so
++        rewriteSectionsExecutable() won't work because it doesn't have
++-       any virtual address space to grow downwards into.  As a
++-       workaround, make sure that the virtual address of our new
++-       PT_LOAD segment relative to the first PT_LOAD segment is equal
++-       to its offset; otherwise we hit the kernel bug.  This may
++-       require creating a hole in the executable.  The bigger the size
++-       of the uninitialised data segment, the bigger the hole. */
+++       any virtual address space to grow downwards into. */
++     if (isExecutable) {
++         if (startOffset >= startPage) {
++             debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
++-        } else {
++-            size_t hole = startPage - startOffset;
++-            /* Print a warning, because the hole could be very big. */
++-            fprintf(stderr, "warning: working around a Linux kernel bug by creating a hole of %zu bytes in â€˜%s’\n", hole, fileName.c_str());
++-            assert(hole % pageSize == 0);
++-            /* !!! We could create an actual hole in the file here,
++-               but it's probably not worth the effort. */
++-            growFile(fileSize + hole);
++-            startOffset += hole;
++         }
++         startPage = startOffset;
++     }
++ 
++-
++-    /* Add a segment that maps the replaced sections and program
++-       headers into memory. */
+++    /* Add a segment that maps the replaced sections into memory. */
++     phdrs.resize(rdi(hdr->e_phnum) + 1);
++     wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
++     Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
++@@ -611,19 +757,16 @@ void ElfFile<ElfFileParamNames>::rewrite
++     wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage));
++     wri(phdr.p_filesz, wri(phdr.p_memsz, neededSpace));
++     wri(phdr.p_flags, PF_R | PF_W);
++-    wri(phdr.p_align, pageSize);
+++    wri(phdr.p_align, getPageSize());
++ 
++ 
++     /* Write out the replaced sections. */
++-    Elf_Off curOff = startOffset + phdrs.size() * sizeof(Elf_Phdr);
+++    Elf_Off curOff = startOffset;
++     writeReplacedSections(curOff, startPage, startOffset);
++-    assert((off_t) curOff == startOffset + neededSpace);
++-
++-
++-    /* Move the program header to the start of the new area. */
++-    wri(hdr->e_phoff, startOffset);
+++    assert(curOff == startOffset + neededSpace);
++ 
++-    rewriteHeaders(startPage);
+++    /* Write out the updated program and section headers */
+++    rewriteHeaders(hdr->e_phoff);
++ }
++ 
++ 
++@@ -638,9 +781,9 @@ void ElfFile<ElfFileParamNames>::rewrite
++     /* What is the index of the last replaced section? */
++     unsigned int lastReplaced = 0;
++     for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) {
++-        string sectionName = getSectionName(shdrs[i]);
+++        std::string sectionName = getSectionName(shdrs[i]);
++         if (replacedSections.find(sectionName) != replacedSections.end()) {
++-            debug("using replaced section `%s'\n", sectionName.c_str());
+++            debug("using replaced section '%s'\n", sectionName.c_str());
++             lastReplaced = i;
++         }
++     }
++@@ -656,11 +799,11 @@ void ElfFile<ElfFileParamNames>::rewrite
++     assert(lastReplaced + 1 < shdrs.size()); /* !!! I'm lazy. */
++     size_t startOffset = rdi(shdrs[lastReplaced + 1].sh_offset);
++     Elf_Addr startAddr = rdi(shdrs[lastReplaced + 1].sh_addr);
++-    string prevSection;
+++    std::string prevSection;
++     for (unsigned int i = 1; i <= lastReplaced; ++i) {
++         Elf_Shdr & shdr(shdrs[i]);
++-        string sectionName = getSectionName(shdr);
++-        debug("looking at section `%s'\n", sectionName.c_str());
+++        std::string sectionName = getSectionName(shdr);
+++        debug("looking at section '%s'\n", sectionName.c_str());
++         /* !!! Why do we stop after a .dynstr section? I can't
++            remember! */
++         if ((rdi(shdr.sh_type) == SHT_PROGBITS && sectionName != ".interp")
++@@ -672,7 +815,7 @@ void ElfFile<ElfFileParamNames>::rewrite
++             break;
++         } else {
++             if (replacedSections.find(sectionName) == replacedSections.end()) {
++-                debug("replacing section `%s' which is in the way\n", sectionName.c_str());
+++                debug("replacing section '%s' which is in the way\n", sectionName.c_str());
++                 replaceSection(sectionName, rdi(shdr.sh_size));
++             }
++         }
++@@ -682,23 +825,33 @@ void ElfFile<ElfFileParamNames>::rewrite
++     debug("first reserved offset/addr is 0x%x/0x%llx\n",
++         startOffset, (unsigned long long) startAddr);
++ 
++-    assert(startAddr % pageSize == startOffset % pageSize);
+++    assert(startAddr % getPageSize() == startOffset % getPageSize());
++     Elf_Addr firstPage = startAddr - startOffset;
++     debug("first page is 0x%llx\n", (unsigned long long) firstPage);
++ 
++-    /* Right now we assume that the section headers are somewhere near
++-       the end, which appears to be the case most of the time.
++-       Therefore they're not accidentally overwritten by the replaced
++-       sections. !!!  Fix this. */
++-    assert((off_t) rdi(hdr->e_shoff) >= startOffset);
+++    if (rdi(hdr->e_shoff) < startOffset) {
+++        /* The section headers occur too early in the file and would be
+++           overwritten by the replaced sections. Move them to the end of the file
+++           before proceeding. */
+++        off_t shoffNew = fileContents->size();
+++        off_t shSize = rdi(hdr->e_shoff) + rdi(hdr->e_shnum) * rdi(hdr->e_shentsize);
+++        growFile(fileContents, fileContents->size() + shSize);
+++        wri(hdr->e_shoff, shoffNew);
+++
+++        /* Rewrite the section header table.  For neatness, keep the
+++           sections sorted. */
+++        assert(rdi(hdr->e_shnum) == shdrs.size());
+++        sortShdrs();
+++        for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i)
+++            * ((Elf_Shdr *) (contents + rdi(hdr->e_shoff)) + i) = shdrs[i];
+++    }
++ 
++ 
++     /* Compute the total space needed for the replaced sections, the
++        ELF header, and the program headers. */
++     size_t neededSpace = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr);
++-    for (ReplacedSections::iterator i = replacedSections.begin();
++-         i != replacedSections.end(); ++i)
++-        neededSpace += roundUp(i->second.size(), sectionAlignment);
+++    for (auto & i : replacedSections)
+++        neededSpace += roundUp(i.second.size(), sectionAlignment);
++ 
++     debug("needed space is %d\n", neededSpace);
++ 
++@@ -711,13 +864,13 @@ void ElfFile<ElfFileParamNames>::rewrite
++         neededSpace += sizeof(Elf_Phdr);
++         debug("needed space is %d\n", neededSpace);
++ 
++-        unsigned int neededPages = roundUp(neededSpace - startOffset, pageSize) / pageSize;
+++        unsigned int neededPages = roundUp(neededSpace - startOffset, getPageSize()) / getPageSize();
++         debug("needed pages is %d\n", neededPages);
++-        if (neededPages * pageSize > firstPage)
+++        if (neededPages * getPageSize() > firstPage)
++             error("virtual address space underrun!");
++ 
++-        firstPage -= neededPages * pageSize;
++-        startOffset += neededPages * pageSize;
+++        firstPage -= neededPages * getPageSize();
+++        startOffset += neededPages * getPageSize();
++ 
++         shiftFile(neededPages, firstPage);
++     }
++@@ -731,7 +884,7 @@ void ElfFile<ElfFileParamNames>::rewrite
++ 
++     /* Write out the replaced sections. */
++     writeReplacedSections(curOff, firstPage, 0);
++-    assert((off_t) curOff == neededSpace);
+++    assert(curOff == neededSpace);
++ 
++ 
++     rewriteHeaders(firstPage + rdi(hdr->e_phoff));
++@@ -743,10 +896,9 @@ void ElfFile<ElfFileParamNames>::rewrite
++ {
++     if (replacedSections.empty()) return;
++ 
++-    for (ReplacedSections::iterator i = replacedSections.begin();
++-         i != replacedSections.end(); ++i)
++-        debug("replacing section `%s' with size %d\n",
++-            i->first.c_str(), i->second.size());
+++    for (auto & i : replacedSections)
+++        debug("replacing section '%s' with size %d\n",
+++            i.first.c_str(), i.second.size());
++ 
++     if (rdi(hdr->e_type) == ET_DYN) {
++         debug("this is a dynamic library\n");
++@@ -764,11 +916,14 @@ void ElfFile<ElfFileParamNames>::rewrite
++     /* Rewrite the program header table. */
++ 
++     /* If there is a segment for the program header table, update it.
++-       (According to the ELF spec, it must be the first entry.) */
++-    if (rdi(phdrs[0].p_type) == PT_PHDR) {
++-        phdrs[0].p_offset = hdr->e_phoff;
++-        wri(phdrs[0].p_vaddr, wri(phdrs[0].p_paddr, phdrAddress));
++-        wri(phdrs[0].p_filesz, wri(phdrs[0].p_memsz, phdrs.size() * sizeof(Elf_Phdr)));
+++       (According to the ELF spec, there can only be one.) */
+++    for (unsigned int i = 0; i < phdrs.size(); ++i) {
+++        if (rdi(phdrs[i].p_type) == PT_PHDR) {
+++            phdrs[i].p_offset = hdr->e_phoff;
+++            wri(phdrs[i].p_vaddr, wri(phdrs[i].p_paddr, phdrAddress));
+++            wri(phdrs[i].p_filesz, wri(phdrs[i].p_memsz, phdrs.size() * sizeof(Elf_Phdr)));
+++            break;
+++        }
++     }
++ 
++     sortPhdrs();
++@@ -815,11 +970,18 @@ void ElfFile<ElfFileParamNames>::rewrite
++                 /* no idea if this makes sense, but it was needed for some
++                    program */
++                 if (!shdr) shdr = findSection2(".rel.got");
++-                if (!shdr) error("cannot find .rel.dyn or .rel.got");
+++                /* some programs have neither section, but this doesn't seem
+++                   to be a problem */
+++                if (!shdr) continue;
+++                dyn->d_un.d_ptr = shdr->sh_addr;
+++            }
+++            else if (d_tag == DT_RELA) {
+++                Elf_Shdr * shdr = findSection2(".rela.dyn");
+++                /* some programs lack this section, but it doesn't seem to
+++                   be a problem */
+++                if (!shdr) continue;
++                 dyn->d_un.d_ptr = shdr->sh_addr;
++             }
++-            else if (d_tag == DT_RELA)
++-                dyn->d_un.d_ptr = findSection(".rela.dyn").sh_addr; /* PPC Linux */
++             else if (d_tag == DT_VERNEED)
++                 dyn->d_un.d_ptr = findSection(".gnu.version_r").sh_addr;
++             else if (d_tag == DT_VERSYM)
++@@ -835,12 +997,21 @@ void ElfFile<ElfFileParamNames>::rewrite
++         debug("rewriting symbol table section %d\n", i);
++         for (size_t entry = 0; (entry + 1) * sizeof(Elf_Sym) <= rdi(shdrs[i].sh_size); entry++) {
++             Elf_Sym * sym = (Elf_Sym *) (contents + rdi(shdrs[i].sh_offset) + entry * sizeof(Elf_Sym));
++-            if (sym->st_shndx != SHN_UNDEF && sym->st_shndx < SHN_LORESERVE) {
++-                string section = sectionsByOldIndex[rdi(sym->st_shndx)];
+++            unsigned int shndx = rdi(sym->st_shndx);
+++            if (shndx != SHN_UNDEF && shndx < SHN_LORESERVE) {
+++                if (shndx >= sectionsByOldIndex.size()) {
+++                    fprintf(stderr, "warning: entry %d in symbol table refers to a non-existent section, skipping\n", shndx);
+++                    continue;
+++                }
+++                std::string section = sectionsByOldIndex.at(shndx);
++                 assert(!section.empty());
++                 unsigned int newIndex = findSection3(section); // inefficient
++-                //debug("rewriting symbol %d: index = %d (%s) -> %d\n", entry, rdi(sym->st_shndx), section.c_str(), newIndex);
+++                //debug("rewriting symbol %d: index = %d (%s) -> %d\n", entry, shndx, section.c_str(), newIndex);
++                 wri(sym->st_shndx, newIndex);
+++                /* Rewrite st_value.  FIXME: we should do this for all
+++                   types, but most don't actually change. */
+++                if (ELF32_ST_TYPE(rdi(sym->st_info)) == STT_SECTION)
+++                    wri(sym->st_value, rdi(shdrs[newIndex].sh_addr));
++             }
++         }
++     }
++@@ -848,7 +1019,7 @@ void ElfFile<ElfFileParamNames>::rewrite
++ 
++ 
++ 
++-static void setSubstr(string & s, unsigned int pos, const string & t)
+++static void setSubstr(std::string & s, unsigned int pos, const std::string & t)
++ {
++     assert(pos + t.size() <= s.size());
++     copy(t.begin(), t.end(), s.begin() + pos);
++@@ -856,23 +1027,102 @@ static void setSubstr(string & s, unsign
++ 
++ 
++ template<ElfFileParams>
++-string ElfFile<ElfFileParamNames>::getInterpreter()
+++std::string ElfFile<ElfFileParamNames>::getInterpreter()
++ {
++     Elf_Shdr & shdr = findSection(".interp");
++-    return string((char *) contents + rdi(shdr.sh_offset), rdi(shdr.sh_size));
+++    return std::string((char *) contents + rdi(shdr.sh_offset), rdi(shdr.sh_size));
++ }
++ 
+++template<ElfFileParams>
+++void ElfFile<ElfFileParamNames>::modifySoname(sonameMode op, const std::string & newSoname)
+++{
+++    if (rdi(hdr->e_type) != ET_DYN) {
+++        debug("this is not a dynamic library\n");
+++        return;
+++    }
+++
+++    Elf_Shdr & shdrDynamic = findSection(".dynamic");
+++    Elf_Shdr & shdrDynStr = findSection(".dynstr");
+++    char * strTab = (char *) contents + rdi(shdrDynStr.sh_offset);
+++
+++    /* Walk through the dynamic section, look for the DT_SONAME entry. */
+++    Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset));
+++    Elf_Dyn * dynSoname = 0;
+++    char * soname = 0;
+++    for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) {
+++        if (rdi(dyn->d_tag) == DT_SONAME) {
+++            dynSoname = dyn;
+++            soname = strTab + rdi(dyn->d_un.d_val);
+++        }
+++    }
+++
+++    if (op == printSoname) {
+++        if (soname) {
+++            if (std::string(soname ? soname : "") == "")
+++                debug("DT_SONAME is empty\n");
+++            else
+++                printf("%s\n", soname);
+++        } else {
+++            debug("no DT_SONAME found\n");
+++        }
+++        return;
+++    }
+++
+++    if (std::string(soname ? soname : "") == newSoname) {
+++        debug("current and proposed new SONAMEs are equal keeping DT_SONAME entry\n");
+++        return;
+++    }
+++
+++    /* Zero out the previous SONAME */
+++    unsigned int sonameSize = 0;
+++    if (soname) {
+++        sonameSize = strlen(soname);
+++        memset(soname, 'X', sonameSize);
+++    }
+++
+++    debug("new SONAME is '%s'\n", newSoname.c_str());
+++
+++    /* Grow the .dynstr section to make room for the new SONAME. */
+++    debug("SONAME is too long, resizing...\n");
+++
+++    std::string & newDynStr = replaceSection(".dynstr", rdi(shdrDynStr.sh_size) + newSoname.size() + 1);
+++    setSubstr(newDynStr, rdi(shdrDynStr.sh_size), newSoname + '\0');
+++
+++    /* Update the DT_SONAME entry. */
+++    if (dynSoname) {
+++        dynSoname->d_un.d_val = shdrDynStr.sh_size;
+++    } else {
+++        /* There is no DT_SONAME entry in the .dynamic section, so we
+++           have to grow the .dynamic section. */
+++        std::string & newDynamic = replaceSection(".dynamic", rdi(shdrDynamic.sh_size) + sizeof(Elf_Dyn));
+++
+++        unsigned int idx = 0;
+++        for (; rdi(((Elf_Dyn *) newDynamic.c_str())[idx].d_tag) != DT_NULL; idx++);
+++        debug("DT_NULL index is %d\n", idx);
+++
+++        /* Shift all entries down by one. */
+++        setSubstr(newDynamic, sizeof(Elf_Dyn), std::string(newDynamic, 0, sizeof(Elf_Dyn) * (idx + 1)));
+++
+++        /* Add the DT_SONAME entry at the top. */
+++        Elf_Dyn newDyn;
+++        wri(newDyn.d_tag, DT_SONAME);
+++        newDyn.d_un.d_val = shdrDynStr.sh_size;
+++        setSubstr(newDynamic, 0, std::string((char *)&newDyn, sizeof(Elf_Dyn)));
+++    }
+++
+++    changed = true;
+++}
++ 
++ template<ElfFileParams>
++-void ElfFile<ElfFileParamNames>::setInterpreter(const string & newInterpreter)
+++void ElfFile<ElfFileParamNames>::setInterpreter(const std::string & newInterpreter)
++ {
++-    string & section = replaceSection(".interp", newInterpreter.size() + 1);
+++    std::string & section = replaceSection(".interp", newInterpreter.size() + 1);
++     setSubstr(section, 0, newInterpreter + '\0');
++     changed = true;
++ }
++ 
++ 
++-static void concatToRPath(string & rpath, const string & path)
+++static void concatToRPath(std::string & rpath, const std::string & path)
++ {
++     if (!rpath.empty()) rpath += ":";
++     rpath += path;
++@@ -880,7 +1130,8 @@ static void concatToRPath(string & rpath
++ 
++ 
++ template<ElfFileParams>
++-void ElfFile<ElfFileParamNames>::modifyRPath(RPathOp op, string newRPath)
+++void ElfFile<ElfFileParamNames>::modifyRPath(RPathOp op,
+++    const std::vector<std::string> & allowedRpathPrefixes, std::string newRPath)
++ {
++     Elf_Shdr & shdrDynamic = findSection(".dynamic");
++ 
++@@ -889,15 +1140,6 @@ void ElfFile<ElfFileParamNames>::modifyR
++     Elf_Shdr & shdrDynStr = findSection(".dynstr");
++     char * strTab = (char *) contents + rdi(shdrDynStr.sh_offset);
++ 
++-    /* Find the DT_STRTAB entry in the dynamic section. */
++-    Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset));
++-    Elf_Addr strTabAddr = 0;
++-    for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++)
++-        if (rdi(dyn->d_tag) == DT_STRTAB) strTabAddr = rdi(dyn->d_un.d_ptr);
++-    if (!strTabAddr) error("strange: no string table");
++-
++-    assert(strTabAddr == rdi(shdrDynStr.sh_addr));
++-
++ 
++     /* Walk through the dynamic section, look for the RPATH/RUNPATH
++        entry.
++@@ -907,12 +1149,12 @@ void ElfFile<ElfFileParamNames>::modifyR
++        overriden by LD_LIBRARY_PATH, and it's scoped (the DT_RUNPATH
++        for an executable or library doesn't affect the search path for
++        libraries used by it).  DT_RPATH is ignored if DT_RUNPATH is
++-       present.  The binutils `ld' still generates only DT_RPATH,
++-       unless you use its `--enable-new-dtag' option, in which case it
+++       present.  The binutils 'ld' still generates only DT_RPATH,
+++       unless you use its '--enable-new-dtag' option, in which case it
++        generates a DT_RPATH and DT_RUNPATH pointing at the same
++        string. */
++-    static vector<string> neededLibs;
++-    dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset));
+++    std::vector<std::string> neededLibs;
+++    Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset));
++     Elf_Dyn * dynRPath = 0, * dynRunPath = 0;
++     char * rpath = 0;
++     for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) {
++@@ -927,7 +1169,7 @@ void ElfFile<ElfFileParamNames>::modifyR
++             rpath = strTab + rdi(dyn->d_un.d_val);
++         }
++         else if (rdi(dyn->d_tag) == DT_NEEDED)
++-            neededLibs.push_back(string(strTab + rdi(dyn->d_un.d_val)));
+++            neededLibs.push_back(std::string(strTab + rdi(dyn->d_un.d_val)));
++     }
++ 
++     if (op == rpPrint) {
++@@ -944,19 +1186,11 @@ void ElfFile<ElfFileParamNames>::modifyR
++     /* For each directory in the RPATH, check if it contains any
++        needed library. */
++     if (op == rpShrink) {
++-        static vector<bool> neededLibFound(neededLibs.size(), false);
+++        std::vector<bool> neededLibFound(neededLibs.size(), false);
++ 
++         newRPath = "";
++ 
++-        char * pos = rpath;
++-        while (*pos) {
++-            char * end = strchr(pos, ':');
++-            if (!end) end = strchr(pos, 0);
++-
++-            /* Get the name of the directory. */
++-            string dirName(pos, end - pos);
++-            if (*end == ':') ++end;
++-            pos = end;
+++        for (auto & dirName : splitColonDelimitedString(rpath)) {
++ 
++             /* Non-absolute entries are allowed (e.g., the special
++                "$ORIGIN" hack). */
++@@ -965,28 +1199,62 @@ void ElfFile<ElfFileParamNames>::modifyR
++                 continue;
++             }
++ 
+++            /* If --allowed-rpath-prefixes was given, reject directories
+++               not starting with any of the (colon-delimited) prefixes. */
+++            if (!allowedRpathPrefixes.empty() && !hasAllowedPrefix(dirName, allowedRpathPrefixes)) {
+++                debug("removing directory '%s' from RPATH because of non-allowed prefix\n", dirName.c_str());
+++                continue;
+++            }
+++
++             /* For each library that we haven't found yet, see if it
++                exists in this directory. */
++             bool libFound = false;
++             for (unsigned int j = 0; j < neededLibs.size(); ++j)
++                 if (!neededLibFound[j]) {
++-                    string libName = dirName + "/" + neededLibs[j];
++-                    struct stat st;
++-                    if (stat(libName.c_str(), &st) == 0) {
++-                        neededLibFound[j] = true;
++-                        libFound = true;
+++                    std::string libName = dirName + "/" + neededLibs[j];
+++                    try {
+++                        if (getElfType(readFile(libName, sizeof(Elf32_Ehdr))).machine == rdi(hdr->e_machine)) {
+++                            neededLibFound[j] = true;
+++                            libFound = true;
+++                        } else
+++                            debug("ignoring library '%s' because its machine type differs\n", libName.c_str());
+++                    } catch (SysError & e) {
+++                        if (e.errNo != ENOENT) throw;
++                     }
++                 }
++ 
++             if (!libFound)
++-                debug("removing directory `%s' from RPATH\n", dirName.c_str());
+++                debug("removing directory '%s' from RPATH\n", dirName.c_str());
++             else
++                 concatToRPath(newRPath, dirName);
++         }
++     }
++ 
+++    if (op == rpRemove) {
+++        if (!rpath) {
+++            debug("no RPATH to delete\n");
+++            return;
+++        }
++ 
++-    if (string(rpath ? rpath : "") == newRPath) return;
+++        Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset));
+++        Elf_Dyn * last = dyn;
+++        for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) {
+++            if (rdi(dyn->d_tag) == DT_RPATH) {
+++                debug("removing DT_RPATH entry\n");
+++                changed = true;
+++            } else if (rdi(dyn->d_tag) == DT_RUNPATH) {
+++                debug("removing DT_RUNPATH entry\n");
+++                changed = true;
+++            } else {
+++                *last++ = *dyn;
+++            }
+++        }
+++        memset(last, 0, sizeof(Elf_Dyn) * (dyn - last));
+++        return;
+++    }
+++
+++
+++    if (std::string(rpath ? rpath : "") == newRPath) return;
++ 
++     changed = true;
++ 
++@@ -998,7 +1266,7 @@ void ElfFile<ElfFileParamNames>::modifyR
++         memset(rpath, 'X', rpathSize);
++     }
++ 
++-    debug("new rpath is `%s'\n", newRPath.c_str());
+++    debug("new rpath is '%s'\n", newRPath.c_str());
++ 
++     if (!forceRPath && dynRPath && !dynRunPath) { /* convert DT_RPATH to DT_RUNPATH */
++         dynRPath->d_tag = DT_RUNPATH;
++@@ -1018,7 +1286,7 @@ void ElfFile<ElfFileParamNames>::modifyR
++     /* Grow the .dynstr section to make room for the new RPATH. */
++     debug("rpath is too long, resizing...\n");
++ 
++-    string & newDynStr = replaceSection(".dynstr",
+++    std::string & newDynStr = replaceSection(".dynstr",
++         rdi(shdrDynStr.sh_size) + newRPath.size() + 1);
++     setSubstr(newDynStr, rdi(shdrDynStr.sh_size), newRPath + '\0');
++ 
++@@ -1031,7 +1299,7 @@ void ElfFile<ElfFileParamNames>::modifyR
++     else {
++         /* There is no DT_RUNPATH entry in the .dynamic section, so we
++            have to grow the .dynamic section. */
++-        string & newDynamic = replaceSection(".dynamic",
+++        std::string & newDynamic = replaceSection(".dynamic",
++             rdi(shdrDynamic.sh_size) + sizeof(Elf_Dyn));
++ 
++         unsigned int idx = 0;
++@@ -1040,19 +1308,19 @@ void ElfFile<ElfFileParamNames>::modifyR
++ 
++         /* Shift all entries down by one. */
++         setSubstr(newDynamic, sizeof(Elf_Dyn),
++-            string(newDynamic, 0, sizeof(Elf_Dyn) * (idx + 1)));
+++            std::string(newDynamic, 0, sizeof(Elf_Dyn) * (idx + 1)));
++ 
++         /* Add the DT_RUNPATH entry at the top. */
++         Elf_Dyn newDyn;
++         wri(newDyn.d_tag, forceRPath ? DT_RPATH : DT_RUNPATH);
++         newDyn.d_un.d_val = shdrDynStr.sh_size;
++-        setSubstr(newDynamic, 0, string((char *) &newDyn, sizeof(Elf_Dyn)));
+++        setSubstr(newDynamic, 0, std::string((char *) &newDyn, sizeof(Elf_Dyn)));
++     }
++ }
++ 
++ 
++ template<ElfFileParams>
++-void ElfFile<ElfFileParamNames>::removeNeeded(set<string> libs)
+++void ElfFile<ElfFileParamNames>::removeNeeded(const std::set<std::string> & libs)
++ {
++     if (libs.empty()) return;
++ 
++@@ -1066,10 +1334,10 @@ void ElfFile<ElfFileParamNames>::removeN
++         if (rdi(dyn->d_tag) == DT_NEEDED) {
++             char * name = strTab + rdi(dyn->d_un.d_val);
++             if (libs.find(name) != libs.end()) {
++-                debug("removing DT_NEEDED entry `%s'\n", name);
+++                debug("removing DT_NEEDED entry '%s'\n", name);
++                 changed = true;
++             } else {
++-                debug("keeping DT_NEEDED entry `%s'\n", name);
+++                debug("keeping DT_NEEDED entry '%s'\n", name);
++                 *last++ = *dyn;
++             }
++         } else
++@@ -1079,96 +1347,309 @@ void ElfFile<ElfFileParamNames>::removeN
++     memset(last, 0, sizeof(Elf_Dyn) * (dyn - last));
++ }
++ 
+++template<ElfFileParams>
+++void ElfFile<ElfFileParamNames>::replaceNeeded(const std::map<std::string, std::string> & libs)
+++{
+++    if (libs.empty()) return;
++ 
++-static bool printInterpreter = false;
++-static string newInterpreter;
+++    Elf_Shdr & shdrDynamic = findSection(".dynamic");
+++    Elf_Shdr & shdrDynStr = findSection(".dynstr");
+++    char * strTab = (char *) contents + rdi(shdrDynStr.sh_offset);
+++
+++    Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset));
+++
+++    unsigned int verNeedNum = 0;
+++
+++    unsigned int dynStrAddedBytes = 0;
+++
+++    for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) {
+++        if (rdi(dyn->d_tag) == DT_NEEDED) {
+++            char * name = strTab + rdi(dyn->d_un.d_val);
+++            auto i = libs.find(name);
+++            if (i != libs.end()) {
+++                auto replacement = i->second;
++ 
+++                debug("replacing DT_NEEDED entry '%s' with '%s'\n", name, replacement.c_str());
+++
+++                // technically, the string referred by d_val could be used otherwise, too (although unlikely)
+++                // we'll therefore add a new string
+++                debug("resizing .dynstr ...\n");
+++
+++                std::string & newDynStr = replaceSection(".dynstr",
+++                    rdi(shdrDynStr.sh_size) + replacement.size() + 1 + dynStrAddedBytes);
+++                setSubstr(newDynStr, rdi(shdrDynStr.sh_size) + dynStrAddedBytes, replacement + '\0');
+++
+++                wri(dyn->d_un.d_val, rdi(shdrDynStr.sh_size) + dynStrAddedBytes);
+++
+++                dynStrAddedBytes += replacement.size() + 1;
+++
+++                changed = true;
+++            } else {
+++                debug("keeping DT_NEEDED entry '%s'\n", name);
+++            }
+++        }
+++        if (rdi(dyn->d_tag) == DT_VERNEEDNUM) {
+++            verNeedNum = rdi(dyn->d_un.d_val);
+++        }
+++    }
+++
+++    // If a replaced library uses symbol versions, then there will also be
+++    // references to it in the "version needed" table, and these also need to
+++    // be replaced.
+++
+++    if (verNeedNum) {
+++        Elf_Shdr & shdrVersionR = findSection(".gnu.version_r");
+++        // The filename strings in the .gnu.version_r are different from the
+++        // ones in .dynamic: instead of being in .dynstr, they're in some
+++        // arbitrary section and we have to look in ->sh_link to figure out
+++        // which one.
+++        Elf_Shdr & shdrVersionRStrings = shdrs[rdi(shdrVersionR.sh_link)];
+++        // this is where we find the actual filename strings
+++        char * verStrTab = (char *) contents + rdi(shdrVersionRStrings.sh_offset);
+++        // and we also need the name of the section containing the strings, so
+++        // that we can pass it to replaceSection
+++        std::string versionRStringsSName = getSectionName(shdrVersionRStrings);
+++
+++        debug("found .gnu.version_r with %i entries, strings in %s\n", verNeedNum, versionRStringsSName.c_str());
+++
+++        unsigned int verStrAddedBytes = 0;
+++
+++        Elf_Verneed * need = (Elf_Verneed *) (contents + rdi(shdrVersionR.sh_offset));
+++        while (verNeedNum > 0) {
+++            char * file = verStrTab + rdi(need->vn_file);
+++            auto i = libs.find(file);
+++            if (i != libs.end()) {
+++                auto replacement = i->second;
+++
+++                debug("replacing .gnu.version_r entry '%s' with '%s'\n", file, replacement.c_str());
+++                debug("resizing string section %s ...\n", versionRStringsSName.c_str());
+++
+++                std::string & newVerDynStr = replaceSection(versionRStringsSName,
+++                    rdi(shdrVersionRStrings.sh_size) + replacement.size() + 1 + verStrAddedBytes);
+++                setSubstr(newVerDynStr, rdi(shdrVersionRStrings.sh_size) + verStrAddedBytes, replacement + '\0');
+++
+++                wri(need->vn_file, rdi(shdrVersionRStrings.sh_size) + verStrAddedBytes);
+++
+++                verStrAddedBytes += replacement.size() + 1;
+++
+++                changed = true;
+++            } else {
+++                debug("keeping .gnu.version_r entry '%s'\n", file);
+++            }
+++            // the Elf_Verneed structures form a linked list, so jump to next entry
+++            need = (Elf_Verneed *) (((char *) need) + rdi(need->vn_next));
+++            --verNeedNum;
+++        }
+++    }
+++}
+++
+++template<ElfFileParams>
+++void ElfFile<ElfFileParamNames>::addNeeded(const std::set<std::string> & libs)
+++{
+++    if (libs.empty()) return;
+++
+++    Elf_Shdr & shdrDynamic = findSection(".dynamic");
+++    Elf_Shdr & shdrDynStr = findSection(".dynstr");
+++
+++    /* add all new libs to the dynstr string table */
+++    unsigned int length = 0;
+++    for (auto & i : libs) length += i.size() + 1;
+++
+++    std::string & newDynStr = replaceSection(".dynstr",
+++        rdi(shdrDynStr.sh_size) + length + 1);
+++    std::set<Elf64_Xword> libStrings;
+++    unsigned int pos = 0;
+++    for (auto & i : libs) {
+++        setSubstr(newDynStr, rdi(shdrDynStr.sh_size) + pos, i + '\0');
+++        libStrings.insert(rdi(shdrDynStr.sh_size) + pos);
+++        pos += i.size() + 1;
+++    }
+++
+++    /* add all new needed entries to the dynamic section */
+++    std::string & newDynamic = replaceSection(".dynamic",
+++        rdi(shdrDynamic.sh_size) + sizeof(Elf_Dyn) * libs.size());
+++
+++    unsigned int idx = 0;
+++    for ( ; rdi(((Elf_Dyn *) newDynamic.c_str())[idx].d_tag) != DT_NULL; idx++) ;
+++    debug("DT_NULL index is %d\n", idx);
+++
+++    /* Shift all entries down by the number of new entries. */
+++    setSubstr(newDynamic, sizeof(Elf_Dyn) * libs.size(),
+++        std::string(newDynamic, 0, sizeof(Elf_Dyn) * (idx + 1)));
+++
+++    /* Add the DT_NEEDED entries at the top. */
+++    unsigned int i = 0;
+++    for (auto & j : libStrings) {
+++        Elf_Dyn newDyn;
+++        wri(newDyn.d_tag, DT_NEEDED);
+++        wri(newDyn.d_un.d_val, j);
+++        setSubstr(newDynamic, i * sizeof(Elf_Dyn), std::string((char *) &newDyn, sizeof(Elf_Dyn)));
+++        i++;
+++    }
+++
+++    changed = true;
+++}
+++
+++template<ElfFileParams>
+++void ElfFile<ElfFileParamNames>::printNeededLibs()
+++{
+++    Elf_Shdr & shdrDynamic = findSection(".dynamic");
+++    Elf_Shdr & shdrDynStr = findSection(".dynstr");
+++    char *strTab = (char *)contents + rdi(shdrDynStr.sh_offset);
+++
+++    Elf_Dyn *dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset));
+++
+++    for (; rdi(dyn->d_tag) != DT_NULL; dyn++) {
+++        if (rdi(dyn->d_tag) == DT_NEEDED) {
+++            char *name = strTab + rdi(dyn->d_un.d_val);
+++            printf("%s\n", name);
+++        }
+++    }
+++}
+++
+++
+++template<ElfFileParams>
+++void ElfFile<ElfFileParamNames>::noDefaultLib()
+++{
+++    Elf_Shdr & shdrDynamic = findSection(".dynamic");
+++
+++    Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset));
+++    Elf_Dyn * dynFlags1 = 0;
+++    for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) {
+++        if (rdi(dyn->d_tag) == DT_FLAGS_1) {
+++            dynFlags1 = dyn;
+++            break;
+++        }
+++    }
+++    if (dynFlags1) {
+++        if (dynFlags1->d_un.d_val & DF_1_NODEFLIB)
+++            return;
+++        dynFlags1->d_un.d_val |= DF_1_NODEFLIB;
+++    } else {
+++        std::string & newDynamic = replaceSection(".dynamic",
+++                rdi(shdrDynamic.sh_size) + sizeof(Elf_Dyn));
+++
+++        unsigned int idx = 0;
+++        for ( ; rdi(((Elf_Dyn *) newDynamic.c_str())[idx].d_tag) != DT_NULL; idx++) ;
+++        debug("DT_NULL index is %d\n", idx);
+++
+++        /* Shift all entries down by one. */
+++        setSubstr(newDynamic, sizeof(Elf_Dyn),
+++                std::string(newDynamic, 0, sizeof(Elf_Dyn) * (idx + 1)));
+++
+++        /* Add the DT_FLAGS_1 entry at the top. */
+++        Elf_Dyn newDyn;
+++        wri(newDyn.d_tag, DT_FLAGS_1);
+++        newDyn.d_un.d_val = DF_1_NODEFLIB;
+++        setSubstr(newDynamic, 0, std::string((char *) &newDyn, sizeof(Elf_Dyn)));
+++    }
+++
+++    changed = true;
+++}
+++
+++
+++static bool printInterpreter = false;
+++static bool printSoname = false;
+++static bool setSoname = false;
+++static std::string newSoname;
+++static std::string newInterpreter;
++ static bool shrinkRPath = false;
+++static std::vector<std::string> allowedRpathPrefixes;
+++static bool removeRPath = false;
++ static bool setRPath = false;
++ static bool printRPath = false;
++-static string newRPath;
++-static set<string> neededLibsToRemove;
++-
+++static std::string newRPath;
+++static std::set<std::string> neededLibsToRemove;
+++static std::map<std::string, std::string> neededLibsToReplace;
+++static std::set<std::string> neededLibsToAdd;
+++static bool printNeeded = false;
+++static bool noDefaultLib = false;
++ 
++ template<class ElfFile>
++-static void patchElf2(ElfFile & elfFile, mode_t fileMode)
+++static void patchElf2(ElfFile && elfFile, std::string fileName)
++ {
++-    elfFile.parse();
++-
++     if (printInterpreter)
++         printf("%s\n", elfFile.getInterpreter().c_str());
++ 
+++    if (printSoname)
+++        elfFile.modifySoname(elfFile.printSoname, "");
+++
+++    if (setSoname)
+++        elfFile.modifySoname(elfFile.replaceSoname, newSoname);
+++
++     if (newInterpreter != "")
++         elfFile.setInterpreter(newInterpreter);
++ 
++     if (printRPath)
++-        elfFile.modifyRPath(elfFile.rpPrint, "");
+++        elfFile.modifyRPath(elfFile.rpPrint, {}, "");
++ 
++     if (shrinkRPath)
++-        elfFile.modifyRPath(elfFile.rpShrink, "");
+++        elfFile.modifyRPath(elfFile.rpShrink, allowedRpathPrefixes, "");
+++    else if (removeRPath)
+++        elfFile.modifyRPath(elfFile.rpRemove, {}, "");
++     else if (setRPath)
++-        elfFile.modifyRPath(elfFile.rpSet, newRPath);
+++        elfFile.modifyRPath(elfFile.rpSet, {}, newRPath);
+++
+++    if (printNeeded) elfFile.printNeededLibs();
++ 
++     elfFile.removeNeeded(neededLibsToRemove);
+++    elfFile.replaceNeeded(neededLibsToReplace);
+++    elfFile.addNeeded(neededLibsToAdd);
+++
+++    if (noDefaultLib)
+++        elfFile.noDefaultLib();
++ 
++     if (elfFile.isChanged()){
++         elfFile.rewriteSections();
++-        writeFile(fileName, fileMode);
+++        writeFile(fileName, elfFile.fileContents);
++     }
++ }
++ 
++ 
++ static void patchElf()
++ {
++-    if (!printInterpreter && !printRPath)
++-        debug("patching ELF file `%s'\n", fileName.c_str());
++-
++-    mode_t fileMode;
+++    for (auto fileName : fileNames) {
+++        if (!printInterpreter && !printRPath && !printSoname && !printNeeded)
+++            debug("patching ELF file '%s'\n", fileName.c_str());
++ 
++-    readFile(fileName, &fileMode);
+++        debug("Kernel page size is %u bytes\n", getPageSize());
++ 
+++        auto fileContents = readFile(fileName);
++ 
++-    /* Check the ELF header for basic validity. */
++-    if (fileSize < (off_t) sizeof(Elf32_Ehdr)) error("missing ELF header");
++-
++-    if (memcmp(contents, ELFMAG, SELFMAG) != 0)
++-        error("not an ELF executable");
++-
++-    if (contents[EI_CLASS] == ELFCLASS32 &&
++-        contents[EI_VERSION] == EV_CURRENT)
++-    {
++-        ElfFile<Elf32_Ehdr, Elf32_Phdr, Elf32_Shdr, Elf32_Addr, Elf32_Off, Elf32_Dyn, Elf32_Sym> elfFile;
++-        patchElf2(elfFile, fileMode);
++-    }
++-    else if (contents[EI_CLASS] == ELFCLASS64 &&
++-        contents[EI_VERSION] == EV_CURRENT)
++-    {
++-        ElfFile<Elf64_Ehdr, Elf64_Phdr, Elf64_Shdr, Elf64_Addr, Elf64_Off, Elf64_Dyn, Elf64_Sym> elfFile;
++-        patchElf2(elfFile, fileMode);
++-    }
++-    else {
++-        error("ELF executable is not 32/64-bit, little/big-endian, version 1");
+++        if (getElfType(fileContents).is32Bit)
+++            patchElf2(ElfFile<Elf32_Ehdr, Elf32_Phdr, Elf32_Shdr, Elf32_Addr, Elf32_Off, Elf32_Dyn, Elf32_Sym, Elf32_Verneed>(fileContents), fileName);
+++        else
+++            patchElf2(ElfFile<Elf64_Ehdr, Elf64_Phdr, Elf64_Shdr, Elf64_Addr, Elf64_Off, Elf64_Dyn, Elf64_Sym, Elf64_Verneed>(fileContents), fileName);
++     }
++ }
++ 
++ 
++-void showHelp(const string & progName)
+++void showHelp(const std::string & progName)
++ {
++         fprintf(stderr, "syntax: %s\n\
++   [--set-interpreter FILENAME]\n\
+++  [--page-size SIZE]\n\
++   [--print-interpreter]\n\
+++  [--print-soname]\t\tPrints 'DT_SONAME' entry of .dynamic section. Raises an error if DT_SONAME doesn't exist\n\
+++  [--set-soname SONAME]\t\tSets 'DT_SONAME' entry to SONAME.\n\
++   [--set-rpath RPATH]\n\
+++  [--remove-rpath]\n\
++   [--shrink-rpath]\n\
+++  [--allowed-rpath-prefixes PREFIXES]\t\tWith '--shrink-rpath', reject rpath entries not starting with the allowed prefix\n\
++   [--print-rpath]\n\
++   [--force-rpath]\n\
+++  [--add-needed LIBRARY]\n\
++   [--remove-needed LIBRARY]\n\
+++  [--replace-needed LIBRARY NEW_LIBRARY]\n\
+++  [--print-needed]\n\
+++  [--no-default-lib]\n\
++   [--debug]\n\
++   [--version]\n\
++   FILENAME\n", progName.c_str());
++ }
++ 
++ 
++-int main(int argc, char * * argv)
+++int mainWrapped(int argc, char * * argv)
++ {
++     if (argc <= 1) {
++         showHelp(argv[0]);
++@@ -1179,17 +1660,37 @@ int main(int argc, char * * argv)
++ 
++     int i;
++     for (i = 1; i < argc; ++i) {
++-        string arg(argv[i]);
+++        std::string arg(argv[i]);
++         if (arg == "--set-interpreter" || arg == "--interpreter") {
++             if (++i == argc) error("missing argument");
++             newInterpreter = argv[i];
++         }
+++        else if (arg == "--page-size") {
+++            if (++i == argc) error("missing argument");
+++            pageSize = atoi(argv[i]);
+++            if (pageSize <= 0) error("invalid argument to --page-size");
+++        }
++         else if (arg == "--print-interpreter") {
++             printInterpreter = true;
++         }
+++        else if (arg == "--print-soname") {
+++            printSoname = true;
+++        }
+++        else if (arg == "--set-soname") {
+++            if (++i == argc) error("missing argument");
+++            setSoname = true;
+++            newSoname = argv[i];
+++        }
+++        else if (arg == "--remove-rpath") {
+++            removeRPath = true;
+++        }
++         else if (arg == "--shrink-rpath") {
++             shrinkRPath = true;
++         }
+++        else if (arg == "--allowed-rpath-prefixes") {
+++            if (++i == argc) error("missing argument");
+++            allowedRpathPrefixes = splitColonDelimitedString(argv[i]);
+++        }
++         else if (arg == "--set-rpath") {
++             if (++i == argc) error("missing argument");
++             setRPath = true;
++@@ -1212,28 +1713,54 @@ int main(int argc, char * * argv)
++                added. */
++             forceRPath = true;
++         }
+++        else if (arg == "--print-needed") {
+++            printNeeded = true;
+++        }
+++        else if (arg == "--add-needed") {
+++            if (++i == argc) error("missing argument");
+++            neededLibsToAdd.insert(argv[i]);
+++        }
++         else if (arg == "--remove-needed") {
++             if (++i == argc) error("missing argument");
++             neededLibsToRemove.insert(argv[i]);
++         }
+++        else if (arg == "--replace-needed") {
+++            if (i+2 >= argc) error("missing argument(s)");
+++            neededLibsToReplace[ argv[i+1] ] = argv[i+2];
+++            i += 2;
+++        }
++         else if (arg == "--debug") {
++             debugMode = true;
++         }
++-        else if (arg == "--help") {
+++        else if (arg == "--no-default-lib") {
+++            noDefaultLib = true;
+++        }
+++        else if (arg == "--help" || arg == "-h" ) {
++             showHelp(argv[0]);
++             return 0;
++         }
++         else if (arg == "--version") {
++-            printf("1.0\n");
+++            printf(PACKAGE_STRING "\n");
++             return 0;
++         }
++-        else break;
+++        else {
+++            fileNames.push_back(arg);
+++        }
++     }
++ 
++-    if (i == argc) error("missing filename");
++-    fileName = argv[i];
+++    if (fileNames.empty()) error("missing filename");
++ 
++     patchElf();
++ 
++     return 0;
++ }
+++
+++int main(int argc, char * * argv)
+++{
+++    try {
+++        return mainWrapped(argc, argv);
+++    } catch (std::exception & e) {
+++        fprintf(stderr, "patchelf: %s\n", e.what());
+++        return 1;
+++    }
+++}
++--- a/sources/patchelf/elf.h
+++++ b/sources/patchelf/elf.h
++@@ -1,6 +1,5 @@
++ /* This file defines standard ELF types, structures, and macros.
++-   Copyright (C) 1995-2003,2004,2005,2006,2007,2008
++-     Free Software Foundation, Inc.
+++   Copyright (C) 1995-2014 Free Software Foundation, Inc.
++    This file is part of the GNU C Library.
++ 
++    The GNU C Library is free software; you can redistribute it and/or
++@@ -14,13 +13,16 @@
++    Lesser General Public License for more details.
++ 
++    You should have received a copy of the GNU Lesser General Public
++-   License along with the GNU C Library; if not, write to the Free
++-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++-   02111-1307 USA.  */
+++   License along with the GNU C Library; if not, see
+++   <http://www.gnu.org/licenses/>.  */
++ 
++ #ifndef _ELF_H
++ #define      _ELF_H 1
++ 
+++/* #include <features.h> */
+++
+++/* __BEGIN_DECLS */
+++
++ /* Standard ELF types.  */
++ 
++ #include <stdint.h>
++@@ -138,7 +140,8 @@ typedef struct
++ #define ELFOSABI_SYSV                0       /* Alias.  */
++ #define ELFOSABI_HPUX                1       /* HP-UX */
++ #define ELFOSABI_NETBSD              2       /* NetBSD.  */
++-#define ELFOSABI_LINUX               3       /* Linux.  */
+++#define ELFOSABI_GNU         3       /* Object uses GNU ELF extensions.  */
+++#define ELFOSABI_LINUX               ELFOSABI_GNU /* Compatibility alias.  */
++ #define ELFOSABI_SOLARIS     6       /* Sun Solaris.  */
++ #define ELFOSABI_AIX         7       /* IBM AIX.  */
++ #define ELFOSABI_IRIX                8       /* SGI Irix.  */
++@@ -146,6 +149,7 @@ typedef struct
++ #define ELFOSABI_TRU64               10      /* Compaq TRU64 UNIX.  */
++ #define ELFOSABI_MODESTO     11      /* Novell Modesto.  */
++ #define ELFOSABI_OPENBSD     12      /* OpenBSD.  */
+++#define ELFOSABI_ARM_AEABI   64      /* ARM EABI */
++ #define ELFOSABI_ARM         97      /* ARM */
++ #define ELFOSABI_STANDALONE  255     /* Standalone (embedded) application */
++ 
++@@ -245,7 +249,11 @@ typedef struct
++ #define EM_OPENRISC  92              /* OpenRISC 32-bit embedded processor */
++ #define EM_ARC_A5    93              /* ARC Cores Tangent-A5 */
++ #define EM_XTENSA    94              /* Tensilica Xtensa Architecture */
++-#define EM_NUM               95
+++#define EM_AARCH64   183             /* ARM AARCH64 */
+++#define EM_TILEPRO   188             /* Tilera TILEPro */
+++#define EM_MICROBLAZE        189             /* Xilinx MicroBlaze */
+++#define EM_TILEGX    191             /* Tilera TILE-Gx */
+++#define EM_NUM               192
++ 
++ /* If it is necessary to assign new unofficial EM_* values, please
++    pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
++@@ -440,6 +448,7 @@ typedef struct
++ #define STB_WEAK     2               /* Weak symbol */
++ #define      STB_NUM         3               /* Number of defined types.  */
++ #define STB_LOOS     10              /* Start of OS-specific */
+++#define STB_GNU_UNIQUE       10              /* Unique symbol.  */
++ #define STB_HIOS     12              /* End of OS-specific */
++ #define STB_LOPROC   13              /* Start of processor-specific */
++ #define STB_HIPROC   15              /* End of processor-specific */
++@@ -455,6 +464,7 @@ typedef struct
++ #define STT_TLS              6               /* Symbol is thread-local data object*/
++ #define      STT_NUM         7               /* Number of defined types.  */
++ #define STT_LOOS     10              /* Start of OS-specific */
+++#define STT_GNU_IFUNC        10              /* Symbol is indirect code object */
++ #define STT_HIOS     12              /* End of OS-specific */
++ #define STT_LOPROC   13              /* Start of processor-specific */
++ #define STT_HIPROC   15              /* End of processor-specific */
++@@ -552,6 +562,12 @@ typedef struct
++   Elf64_Xword        p_align;                /* Segment alignment */
++ } Elf64_Phdr;
++ 
+++/* Special value for e_phnum.  This indicates that the real number of
+++   program headers is too large to fit into e_phnum.  Instead the real
+++   value is in the field sh_info of section 0.  */
+++
+++#define PN_XNUM              0xffff
+++
++ /* Legal values for p_type (segment type).  */
++ 
++ #define      PT_NULL         0               /* Program header table entry unused */
++@@ -601,10 +617,30 @@ typedef struct
++ #define NT_LWPSTATUS 16              /* Contains copy of lwpstatus struct */
++ #define NT_LWPSINFO  17              /* Contains copy of lwpinfo struct */
++ #define NT_PRFPXREG  20              /* Contains copy of fprxregset struct */
+++#define NT_SIGINFO   0x53494749      /* Contains copy of siginfo_t,
+++                                        size might increase */
+++#define NT_FILE              0x46494c45      /* Contains information about mapped
+++                                        files */
++ #define NT_PRXFPREG  0x46e62b7f      /* Contains copy of user_fxsr_struct */
++ #define NT_PPC_VMX   0x100           /* PowerPC Altivec/VMX registers */
++ #define NT_PPC_SPE   0x101           /* PowerPC SPE/EVR registers */
+++#define NT_PPC_VSX   0x102           /* PowerPC VSX registers */
++ #define NT_386_TLS   0x200           /* i386 TLS slots (struct user_desc) */
+++#define NT_386_IOPERM        0x201           /* x86 io permission bitmap (1=deny) */
+++#define NT_X86_XSTATE        0x202           /* x86 extended state using xsave */
+++#define NT_S390_HIGH_GPRS    0x300   /* s390 upper register halves */
+++#define NT_S390_TIMER        0x301           /* s390 timer register */
+++#define NT_S390_TODCMP       0x302           /* s390 TOD clock comparator register */
+++#define NT_S390_TODPREG      0x303           /* s390 TOD programmable register */
+++#define NT_S390_CTRS 0x304           /* s390 control registers */
+++#define NT_S390_PREFIX       0x305           /* s390 prefix register */
+++#define NT_S390_LAST_BREAK   0x306   /* s390 breaking event address */
+++#define NT_S390_SYSTEM_CALL  0x307   /* s390 system call restart data */
+++#define NT_S390_TDB  0x308           /* s390 transaction diagnostic block */
+++#define NT_ARM_VFP   0x400           /* ARM VFP/NEON registers */
+++#define NT_ARM_TLS   0x401           /* ARM TLS register */
+++#define NT_ARM_HW_BREAK      0x402           /* ARM hardware breakpoint registers */
+++#define NT_ARM_HW_WATCH      0x403           /* ARM hardware watchpoint registers */
++ 
++ /* Legal values for the note segment descriptor types for object files.  */
++ 
++@@ -768,6 +804,15 @@ typedef struct
++ #define DF_1_ENDFILTEE       0x00004000      /* Filtee terminates filters search. */
++ #define      DF_1_DISPRELDNE 0x00008000      /* Disp reloc applied at build time. */
++ #define      DF_1_DISPRELPND 0x00010000      /* Disp reloc applied at run-time.  */
+++#define      DF_1_NODIRECT   0x00020000      /* Object has no-direct binding. */
+++#define      DF_1_IGNMULDEF  0x00040000
+++#define      DF_1_NOKSYMS    0x00080000
+++#define      DF_1_NOHDR      0x00100000
+++#define      DF_1_EDITED     0x00200000      /* Object is modified after built.  */
+++#define      DF_1_NORELOC    0x00400000
+++#define      DF_1_SYMINTPOSE 0x00800000      /* Object has individual interposers.  */
+++#define      DF_1_GLOBAUDIT  0x01000000      /* Global auditing required.  */
+++#define      DF_1_SINGLETON  0x02000000      /* Singleton symbols are used.  */
++ 
++ /* Flags for the feature selection in DT_FEATURE_1.  */
++ #define DTF_1_PARINIT        0x00000001
++@@ -927,59 +972,7 @@ typedef struct
++     } a_un;
++ } Elf64_auxv_t;
++ 
++-/* Legal values for a_type (entry type).  */
++-
++-#define AT_NULL              0               /* End of vector */
++-#define AT_IGNORE    1               /* Entry should be ignored */
++-#define AT_EXECFD    2               /* File descriptor of program */
++-#define AT_PHDR              3               /* Program headers for program */
++-#define AT_PHENT     4               /* Size of program header entry */
++-#define AT_PHNUM     5               /* Number of program headers */
++-#define AT_PAGESZ    6               /* System page size */
++-#define AT_BASE              7               /* Base address of interpreter */
++-#define AT_FLAGS     8               /* Flags */
++-#define AT_ENTRY     9               /* Entry point of program */
++-#define AT_NOTELF    10              /* Program is not ELF */
++-#define AT_UID               11              /* Real uid */
++-#define AT_EUID              12              /* Effective uid */
++-#define AT_GID               13              /* Real gid */
++-#define AT_EGID              14              /* Effective gid */
++-#define AT_CLKTCK    17              /* Frequency of times() */
++-
++-/* Some more special a_type values describing the hardware.  */
++-#define AT_PLATFORM  15              /* String identifying platform.  */
++-#define AT_HWCAP     16              /* Machine dependent hints about
++-                                        processor capabilities.  */
++-
++-/* This entry gives some information about the FPU initialization
++-   performed by the kernel.  */
++-#define AT_FPUCW     18              /* Used FPU control word.  */
++-
++-/* Cache block sizes.  */
++-#define AT_DCACHEBSIZE       19              /* Data cache block size.  */
++-#define AT_ICACHEBSIZE       20              /* Instruction cache block size.  */
++-#define AT_UCACHEBSIZE       21              /* Unified cache block size.  */
++-
++-/* A special ignored value for PPC, used by the kernel to control the
++-   interpretation of the AUXV. Must be > 16.  */
++-#define AT_IGNOREPPC 22              /* Entry should be ignored.  */
++-
++-#define      AT_SECURE       23              /* Boolean, was exec setuid-like?  */
++-
++-#define AT_EXECFN    31              /* Filename of executable.  */
++-
++-/* Pointer to the global system page used for system calls and other
++-   nice things.  */
++-#define AT_SYSINFO   32
++-#define AT_SYSINFO_EHDR      33
++-
++-/* Shapes of the caches.  Bits 0-3 contains associativity; bits 4-7 contains
++-   log2 of line size; mask those to get cache size.  */
++-#define AT_L1I_CACHESHAPE    34
++-#define AT_L1D_CACHESHAPE    35
++-#define AT_L2_CACHESHAPE     36
++-#define AT_L3_CACHESHAPE     37
++-
+++/* #include <bits/auxv.h> */
++ /* Note section contents.  Each entry in the note section begins with
++    a header of a fixed form.  */
++ 
++@@ -1042,6 +1035,9 @@ typedef struct
++    The descriptor consists of any nonzero number of bytes.  */
++ #define NT_GNU_BUILD_ID      3
++ 
+++/* Version note generated by GNU gold containing a version string.  */
+++#define NT_GNU_GOLD_VERSION  4
+++
++ 
++ /* Move records.  */
++ typedef struct
++@@ -1102,8 +1098,29 @@ typedef struct
++ #define R_68K_GLOB_DAT       20              /* Create GOT entry */
++ #define R_68K_JMP_SLOT       21              /* Create PLT entry */
++ #define R_68K_RELATIVE       22              /* Adjust by program base */
+++#define R_68K_TLS_GD32      25          /* 32 bit GOT offset for GD */
+++#define R_68K_TLS_GD16      26          /* 16 bit GOT offset for GD */
+++#define R_68K_TLS_GD8       27          /* 8 bit GOT offset for GD */
+++#define R_68K_TLS_LDM32     28          /* 32 bit GOT offset for LDM */
+++#define R_68K_TLS_LDM16     29          /* 16 bit GOT offset for LDM */
+++#define R_68K_TLS_LDM8      30          /* 8 bit GOT offset for LDM */
+++#define R_68K_TLS_LDO32     31          /* 32 bit module-relative offset */
+++#define R_68K_TLS_LDO16     32          /* 16 bit module-relative offset */
+++#define R_68K_TLS_LDO8      33          /* 8 bit module-relative offset */
+++#define R_68K_TLS_IE32      34          /* 32 bit GOT offset for IE */
+++#define R_68K_TLS_IE16      35          /* 16 bit GOT offset for IE */
+++#define R_68K_TLS_IE8       36          /* 8 bit GOT offset for IE */
+++#define R_68K_TLS_LE32      37          /* 32 bit offset relative to
+++                                        static TLS block */
+++#define R_68K_TLS_LE16      38          /* 16 bit offset relative to
+++                                        static TLS block */
+++#define R_68K_TLS_LE8       39          /* 8 bit offset relative to
+++                                        static TLS block */
+++#define R_68K_TLS_DTPMOD32  40          /* 32 bit module number */
+++#define R_68K_TLS_DTPREL32  41          /* 32 bit module-relative offset */
+++#define R_68K_TLS_TPREL32   42          /* 32 bit TP-relative offset */
++ /* Keep this the last entry.  */
++-#define R_68K_NUM    23
+++#define R_68K_NUM    43
++ 
++ /* Intel 80386 specific definitions.  */
++ 
++@@ -1157,7 +1174,7 @@ typedef struct
++ #define R_386_TLS_DTPMOD32 35                /* ID of module containing symbol */
++ #define R_386_TLS_DTPOFF32 36                /* Offset in TLS block */
++ #define R_386_TLS_TPOFF32  37                /* Negated offset in static TLS block */
++-/* 38? */
+++#define R_386_SIZE32    38           /* 32-bit symbol size */
++ #define R_386_TLS_GOTDESC  39                /* GOT offset for TLS descriptor.  */
++ #define R_386_TLS_DESC_CALL 40               /* Marker of call through TLS
++                                         descriptor for
++@@ -1166,8 +1183,9 @@ typedef struct
++                                         pointer to code and to
++                                         argument, returning the TLS
++                                         offset for the symbol.  */
+++#define R_386_IRELATIVE         42           /* Adjust indirectly by program base */
++ /* Keep this the last entry.  */
++-#define R_386_NUM       42
+++#define R_386_NUM       43
++ 
++ /* SUN SPARC specific definitions.  */
++ 
++@@ -1235,6 +1253,7 @@ typedef struct
++ #define R_SPARC_PC_LM22              39      /* Low miggle 22 bits of ... */
++ #define R_SPARC_WDISP16              40      /* PC relative 16 bit shifted */
++ #define R_SPARC_WDISP19              41      /* PC relative 19 bit shifted */
+++#define R_SPARC_GLOB_JMP     42      /* was part of v9 ABI but was removed */
++ #define R_SPARC_7            43      /* Direct 7 bit */
++ #define R_SPARC_5            44      /* Direct 5 bit */
++ #define R_SPARC_6            45      /* Direct 6 bit */
++@@ -1272,118 +1291,124 @@ typedef struct
++ #define R_SPARC_TLS_DTPOFF64 77
++ #define R_SPARC_TLS_TPOFF32  78
++ #define R_SPARC_TLS_TPOFF64  79
+++#define R_SPARC_GOTDATA_HIX22        80
+++#define R_SPARC_GOTDATA_LOX10        81
+++#define R_SPARC_GOTDATA_OP_HIX22     82
+++#define R_SPARC_GOTDATA_OP_LOX10     83
+++#define R_SPARC_GOTDATA_OP   84
+++#define R_SPARC_H34          85
+++#define R_SPARC_SIZE32               86
+++#define R_SPARC_SIZE64               87
+++#define R_SPARC_WDISP10              88
+++#define R_SPARC_JMP_IREL     248
+++#define R_SPARC_IRELATIVE    249
+++#define R_SPARC_GNU_VTINHERIT        250
+++#define R_SPARC_GNU_VTENTRY  251
+++#define R_SPARC_REV32                252
++ /* Keep this the last entry.  */
++-#define R_SPARC_NUM          80
+++#define R_SPARC_NUM          253
++ 
++ /* For Sparc64, legal values for d_tag of Elf64_Dyn.  */
++ 
++-#define DT_SPARC_REGISTER 0x70000001
++-#define DT_SPARC_NUM 2
++-
++-/* Bits present in AT_HWCAP on SPARC.  */
++-
++-#define HWCAP_SPARC_FLUSH    1       /* The CPU supports flush insn.  */
++-#define HWCAP_SPARC_STBAR    2
++-#define HWCAP_SPARC_SWAP     4
++-#define HWCAP_SPARC_MULDIV   8
++-#define HWCAP_SPARC_V9               16      /* The CPU is v9, so v8plus is ok.  */
++-#define HWCAP_SPARC_ULTRA3   32
++-#define HWCAP_SPARC_BLKINIT  64      /* Sun4v with block-init/load-twin.  */
++-#define HWCAP_SPARC_N2               128
+++#define DT_SPARC_REGISTER    0x70000001
+++#define DT_SPARC_NUM         2
++ 
++ /* MIPS R3000 specific definitions.  */
++ 
++ /* Legal values for e_flags field of Elf32_Ehdr.  */
++ 
++-#define EF_MIPS_NOREORDER   1                /* A .noreorder directive was used */
++-#define EF_MIPS_PIC      2           /* Contains PIC code */
++-#define EF_MIPS_CPIC     4           /* Uses PIC calling sequence */
++-#define EF_MIPS_XGOT     8
++-#define EF_MIPS_64BIT_WHIRL 16
++-#define EF_MIPS_ABI2     32
++-#define EF_MIPS_ABI_ON32    64
++-#define EF_MIPS_ARCH     0xf0000000  /* MIPS architecture level */
+++#define EF_MIPS_NOREORDER    1     /* A .noreorder directive was used.  */
+++#define EF_MIPS_PIC          2     /* Contains PIC code.  */
+++#define EF_MIPS_CPIC         4     /* Uses PIC calling sequence.  */
+++#define EF_MIPS_XGOT         8
+++#define EF_MIPS_64BIT_WHIRL  16
+++#define EF_MIPS_ABI2         32
+++#define EF_MIPS_ABI_ON32     64
+++#define EF_MIPS_NAN2008      1024  /* Uses IEEE 754-2008 NaN encoding.  */
+++#define EF_MIPS_ARCH         0xf0000000 /* MIPS architecture level.  */
++ 
++ /* Legal values for MIPS architecture level.  */
++ 
++-#define EF_MIPS_ARCH_1           0x00000000  /* -mips1 code.  */
++-#define EF_MIPS_ARCH_2           0x10000000  /* -mips2 code.  */
++-#define EF_MIPS_ARCH_3           0x20000000  /* -mips3 code.  */
++-#define EF_MIPS_ARCH_4           0x30000000  /* -mips4 code.  */
++-#define EF_MIPS_ARCH_5           0x40000000  /* -mips5 code.  */
++-#define EF_MIPS_ARCH_32          0x60000000  /* MIPS32 code.  */
++-#define EF_MIPS_ARCH_64          0x70000000  /* MIPS64 code.  */
++-
++-/* The following are non-official names and should not be used.  */
++-
++-#define E_MIPS_ARCH_1          0x00000000    /* -mips1 code.  */
++-#define E_MIPS_ARCH_2          0x10000000    /* -mips2 code.  */
++-#define E_MIPS_ARCH_3          0x20000000    /* -mips3 code.  */
++-#define E_MIPS_ARCH_4          0x30000000    /* -mips4 code.  */
++-#define E_MIPS_ARCH_5          0x40000000    /* -mips5 code.  */
++-#define E_MIPS_ARCH_32         0x60000000    /* MIPS32 code.  */
++-#define E_MIPS_ARCH_64         0x70000000    /* MIPS64 code.  */
+++#define EF_MIPS_ARCH_1               0x00000000 /* -mips1 code.  */
+++#define EF_MIPS_ARCH_2               0x10000000 /* -mips2 code.  */
+++#define EF_MIPS_ARCH_3               0x20000000 /* -mips3 code.  */
+++#define EF_MIPS_ARCH_4               0x30000000 /* -mips4 code.  */
+++#define EF_MIPS_ARCH_5               0x40000000 /* -mips5 code.  */
+++#define EF_MIPS_ARCH_32              0x50000000 /* MIPS32 code.  */
+++#define EF_MIPS_ARCH_64              0x60000000 /* MIPS64 code.  */
+++#define EF_MIPS_ARCH_32R2    0x70000000 /* MIPS32r2 code.  */
+++#define EF_MIPS_ARCH_64R2    0x80000000 /* MIPS64r2 code.  */
+++
+++/* The following are unofficial names and should not be used.  */
+++
+++#define E_MIPS_ARCH_1                EF_MIPS_ARCH_1
+++#define E_MIPS_ARCH_2                EF_MIPS_ARCH_2
+++#define E_MIPS_ARCH_3                EF_MIPS_ARCH_3
+++#define E_MIPS_ARCH_4                EF_MIPS_ARCH_4
+++#define E_MIPS_ARCH_5                EF_MIPS_ARCH_5
+++#define E_MIPS_ARCH_32               EF_MIPS_ARCH_32
+++#define E_MIPS_ARCH_64               EF_MIPS_ARCH_64
++ 
++ /* Special section indices.  */
++ 
++-#define SHN_MIPS_ACOMMON    0xff00   /* Allocated common symbols */
++-#define SHN_MIPS_TEXT            0xff01      /* Allocated test symbols.  */
++-#define SHN_MIPS_DATA            0xff02      /* Allocated data symbols.  */
++-#define SHN_MIPS_SCOMMON    0xff03   /* Small common symbols */
++-#define SHN_MIPS_SUNDEFINED 0xff04   /* Small undefined symbols */
+++#define SHN_MIPS_ACOMMON     0xff00  /* Allocated common symbols.  */
+++#define SHN_MIPS_TEXT                0xff01  /* Allocated test symbols.  */
+++#define SHN_MIPS_DATA                0xff02  /* Allocated data symbols.  */
+++#define SHN_MIPS_SCOMMON     0xff03  /* Small common symbols.  */
+++#define SHN_MIPS_SUNDEFINED  0xff04  /* Small undefined symbols.  */
++ 
++ /* Legal values for sh_type field of Elf32_Shdr.  */
++ 
++-#define SHT_MIPS_LIBLIST       0x70000000 /* Shared objects used in link */
++-#define SHT_MIPS_MSYM               0x70000001
++-#define SHT_MIPS_CONFLICT      0x70000002 /* Conflicting symbols */
++-#define SHT_MIPS_GPTAB              0x70000003 /* Global data area sizes */
++-#define SHT_MIPS_UCODE              0x70000004 /* Reserved for SGI/MIPS compilers */
++-#define SHT_MIPS_DEBUG              0x70000005 /* MIPS ECOFF debugging information*/
++-#define SHT_MIPS_REGINFO       0x70000006 /* Register usage information */
++-#define SHT_MIPS_PACKAGE       0x70000007
++-#define SHT_MIPS_PACKSYM       0x70000008
++-#define SHT_MIPS_RELD               0x70000009
++-#define SHT_MIPS_IFACE         0x7000000b
++-#define SHT_MIPS_CONTENT       0x7000000c
++-#define SHT_MIPS_OPTIONS       0x7000000d /* Miscellaneous options.  */
++-#define SHT_MIPS_SHDR               0x70000010
++-#define SHT_MIPS_FDESC              0x70000011
++-#define SHT_MIPS_EXTSYM             0x70000012
++-#define SHT_MIPS_DENSE              0x70000013
++-#define SHT_MIPS_PDESC              0x70000014
++-#define SHT_MIPS_LOCSYM             0x70000015
++-#define SHT_MIPS_AUXSYM             0x70000016
++-#define SHT_MIPS_OPTSYM             0x70000017
++-#define SHT_MIPS_LOCSTR             0x70000018
++-#define SHT_MIPS_LINE               0x70000019
++-#define SHT_MIPS_RFDESC             0x7000001a
++-#define SHT_MIPS_DELTASYM      0x7000001b
++-#define SHT_MIPS_DELTAINST     0x7000001c
++-#define SHT_MIPS_DELTACLASS    0x7000001d
++-#define SHT_MIPS_DWARF         0x7000001e /* DWARF debugging information.  */
++-#define SHT_MIPS_DELTADECL     0x7000001f
++-#define SHT_MIPS_SYMBOL_LIB    0x70000020
++-#define SHT_MIPS_EVENTS             0x70000021 /* Event section.  */
++-#define SHT_MIPS_TRANSLATE     0x70000022
++-#define SHT_MIPS_PIXIE              0x70000023
++-#define SHT_MIPS_XLATE              0x70000024
++-#define SHT_MIPS_XLATE_DEBUG   0x70000025
++-#define SHT_MIPS_WHIRL              0x70000026
++-#define SHT_MIPS_EH_REGION     0x70000027
++-#define SHT_MIPS_XLATE_OLD     0x70000028
++-#define SHT_MIPS_PDR_EXCEPTION 0x70000029
+++#define SHT_MIPS_LIBLIST     0x70000000 /* Shared objects used in link.  */
+++#define SHT_MIPS_MSYM                0x70000001
+++#define SHT_MIPS_CONFLICT    0x70000002 /* Conflicting symbols.  */
+++#define SHT_MIPS_GPTAB               0x70000003 /* Global data area sizes.  */
+++#define SHT_MIPS_UCODE               0x70000004 /* Reserved for SGI/MIPS compilers */
+++#define SHT_MIPS_DEBUG               0x70000005 /* MIPS ECOFF debugging info.  */
+++#define SHT_MIPS_REGINFO     0x70000006 /* Register usage information.  */
+++#define SHT_MIPS_PACKAGE     0x70000007
+++#define SHT_MIPS_PACKSYM     0x70000008
+++#define SHT_MIPS_RELD                0x70000009
+++#define SHT_MIPS_IFACE               0x7000000b
+++#define SHT_MIPS_CONTENT     0x7000000c
+++#define SHT_MIPS_OPTIONS     0x7000000d /* Miscellaneous options.  */
+++#define SHT_MIPS_SHDR                0x70000010
+++#define SHT_MIPS_FDESC               0x70000011
+++#define SHT_MIPS_EXTSYM              0x70000012
+++#define SHT_MIPS_DENSE               0x70000013
+++#define SHT_MIPS_PDESC               0x70000014
+++#define SHT_MIPS_LOCSYM              0x70000015
+++#define SHT_MIPS_AUXSYM              0x70000016
+++#define SHT_MIPS_OPTSYM              0x70000017
+++#define SHT_MIPS_LOCSTR              0x70000018
+++#define SHT_MIPS_LINE                0x70000019
+++#define SHT_MIPS_RFDESC              0x7000001a
+++#define SHT_MIPS_DELTASYM    0x7000001b
+++#define SHT_MIPS_DELTAINST   0x7000001c
+++#define SHT_MIPS_DELTACLASS  0x7000001d
+++#define SHT_MIPS_DWARF               0x7000001e /* DWARF debugging information.  */
+++#define SHT_MIPS_DELTADECL   0x7000001f
+++#define SHT_MIPS_SYMBOL_LIB  0x70000020
+++#define SHT_MIPS_EVENTS              0x70000021 /* Event section.  */
+++#define SHT_MIPS_TRANSLATE   0x70000022
+++#define SHT_MIPS_PIXIE               0x70000023
+++#define SHT_MIPS_XLATE               0x70000024
+++#define SHT_MIPS_XLATE_DEBUG 0x70000025
+++#define SHT_MIPS_WHIRL               0x70000026
+++#define SHT_MIPS_EH_REGION   0x70000027
+++#define SHT_MIPS_XLATE_OLD   0x70000028
+++#define SHT_MIPS_PDR_EXCEPTION       0x70000029
++ 
++ /* Legal values for sh_flags field of Elf32_Shdr.  */
++ 
++-#define SHF_MIPS_GPREL        0x10000000     /* Must be part of global data area */
++-#define SHF_MIPS_MERGE        0x20000000
++-#define SHF_MIPS_ADDR         0x40000000
++-#define SHF_MIPS_STRINGS 0x80000000
++-#define SHF_MIPS_NOSTRIP 0x08000000
++-#define SHF_MIPS_LOCAL        0x04000000
++-#define SHF_MIPS_NAMES        0x02000000
++-#define SHF_MIPS_NODUPE       0x01000000
+++#define SHF_MIPS_GPREL               0x10000000 /* Must be in global data area.  */
+++#define SHF_MIPS_MERGE               0x20000000
+++#define SHF_MIPS_ADDR                0x40000000
+++#define SHF_MIPS_STRINGS     0x80000000
+++#define SHF_MIPS_NOSTRIP     0x08000000
+++#define SHF_MIPS_LOCAL               0x04000000
+++#define SHF_MIPS_NAMES               0x02000000
+++#define SHF_MIPS_NODUPE              0x01000000
++ 
++ 
++ /* Symbol tables.  */
++@@ -1405,23 +1430,23 @@ typedef union
++ {
++   struct
++     {
++-      Elf32_Word gt_current_g_value; /* -G value used for compilation */
++-      Elf32_Word gt_unused;          /* Not used */
++-    } gt_header;                     /* First entry in section */
+++      Elf32_Word gt_current_g_value; /* -G value used for compilation.  */
+++      Elf32_Word gt_unused;          /* Not used.  */
+++    } gt_header;                     /* First entry in section.  */
++   struct
++     {
++-      Elf32_Word gt_g_value;         /* If this value were used for -G */
++-      Elf32_Word gt_bytes;           /* This many bytes would be used */
++-    } gt_entry;                              /* Subsequent entries in section */
+++      Elf32_Word gt_g_value;         /* If this value were used for -G.  */
+++      Elf32_Word gt_bytes;           /* This many bytes would be used.  */
+++    } gt_entry;                              /* Subsequent entries in section.  */
++ } Elf32_gptab;
++ 
++ /* Entry found in sections of type SHT_MIPS_REGINFO.  */
++ 
++ typedef struct
++ {
++-  Elf32_Word ri_gprmask;             /* General registers used */
++-  Elf32_Word ri_cprmask[4];          /* Coprocessor registers used */
++-  Elf32_Sword        ri_gp_value;            /* $gp register value */
+++  Elf32_Word ri_gprmask;             /* General registers used.  */
+++  Elf32_Word ri_cprmask[4];          /* Coprocessor registers used.  */
+++  Elf32_Sword ri_gp_value;           /* $gp register value.  */
++ } Elf32_RegInfo;
++ 
++ /* Entries found in sections of type SHT_MIPS_OPTIONS.  */
++@@ -2013,9 +2038,6 @@ typedef Elf32_Addr Elf32_Conflict;
++ #define R_PPC_GOT_DTPREL16_HI        93 /* half16*   (sym+add)@got@dtprel@h */
++ #define R_PPC_GOT_DTPREL16_HA        94 /* half16*   (sym+add)@got@dtprel@ha */
++ 
++-/* Keep this the last entry.  */
++-#define R_PPC_NUM            95
++-
++ /* The remaining relocs are from the Embedded ELF ABI, and are not
++    in the SVR4 ELF ABI.  */
++ #define R_PPC_EMB_NADDR32    101
++@@ -2043,11 +2065,14 @@ typedef Elf32_Addr Elf32_Conflict;
++ #define R_PPC_DIAB_RELSDA_HI 184     /* like EMB_RELSDA, but high 16 bit */
++ #define R_PPC_DIAB_RELSDA_HA 185     /* like EMB_RELSDA, adjusted high 16 */
++ 
+++/* GNU extension to support local ifunc.  */
+++#define R_PPC_IRELATIVE              248
+++
++ /* GNU relocs used in PIC code sequences.  */
++-#define R_PPC_REL16          249     /* word32   (sym-.) */
++-#define R_PPC_REL16_LO               250     /* half16   (sym-.)@l */
++-#define R_PPC_REL16_HI               251     /* half16   (sym-.)@h */
++-#define R_PPC_REL16_HA               252     /* half16   (sym-.)@ha */
+++#define R_PPC_REL16          249     /* half16   (sym+add-.) */
+++#define R_PPC_REL16_LO               250     /* half16   (sym+add-.)@l */
+++#define R_PPC_REL16_HI               251     /* half16   (sym+add-.)@h */
+++#define R_PPC_REL16_HA               252     /* half16   (sym+add-.)@ha */
++ 
++ /* This is a phony reloc to handle any old fashioned TOC16 references
++    that may still be in object files.  */
++@@ -2168,76 +2193,261 @@ typedef Elf32_Addr Elf32_Conflict;
++ #define R_PPC64_DTPREL16_HIGHERA 104 /* half16       (sym+add)@dtprel@highera */
++ #define R_PPC64_DTPREL16_HIGHEST 105 /* half16       (sym+add)@dtprel@highest */
++ #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16      (sym+add)@dtprel@highesta */
++-
++-/* Keep this the last entry.  */
++-#define R_PPC64_NUM          107
+++#define R_PPC64_TLSGD                107 /* none     (sym+add)@tlsgd */
+++#define R_PPC64_TLSLD                108 /* none     (sym+add)@tlsld */
+++#define R_PPC64_TOCSAVE              109 /* none */
+++
+++/* Added when HA and HI relocs were changed to report overflows.  */
+++#define R_PPC64_ADDR16_HIGH  110
+++#define R_PPC64_ADDR16_HIGHA 111
+++#define R_PPC64_TPREL16_HIGH 112
+++#define R_PPC64_TPREL16_HIGHA        113
+++#define R_PPC64_DTPREL16_HIGH        114
+++#define R_PPC64_DTPREL16_HIGHA       115
+++
+++/* GNU extension to support local ifunc.  */
+++#define R_PPC64_JMP_IREL     247
+++#define R_PPC64_IRELATIVE    248
+++#define R_PPC64_REL16                249     /* half16   (sym+add-.) */
+++#define R_PPC64_REL16_LO     250     /* half16   (sym+add-.)@l */
+++#define R_PPC64_REL16_HI     251     /* half16   (sym+add-.)@h */
+++#define R_PPC64_REL16_HA     252     /* half16   (sym+add-.)@ha */
+++
+++/* e_flags bits specifying ABI.
+++   1 for original function descriptor using ABI,
+++   2 for revised ABI without function descriptors,
+++   0 for unspecified or not using any features affected by the differences.  */
+++#define EF_PPC64_ABI 3
++ 
++ /* PowerPC64 specific values for the Dyn d_tag field.  */
++ #define DT_PPC64_GLINK  (DT_LOPROC + 0)
++ #define DT_PPC64_OPD (DT_LOPROC + 1)
++ #define DT_PPC64_OPDSZ       (DT_LOPROC + 2)
+++#define DT_PPC64_OPT (DT_LOPROC + 3)
++ #define DT_PPC64_NUM    3
++ 
+++/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry.  */
+++#define PPC64_OPT_TLS                1
+++#define PPC64_OPT_MULTI_TOC  2
+++
+++/* PowerPC64 specific values for the Elf64_Sym st_other field.  */
+++#define STO_PPC64_LOCAL_BIT  5
+++#define STO_PPC64_LOCAL_MASK (7 << STO_PPC64_LOCAL_BIT)
+++#define PPC64_LOCAL_ENTRY_OFFSET(other)                              \
+++ (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2)
+++
++ 
++ /* ARM specific declarations */
++ 
++ /* Processor specific flags for the ELF header e_flags field.  */
++-#define EF_ARM_RELEXEC     0x01
++-#define EF_ARM_HASENTRY    0x02
++-#define EF_ARM_INTERWORK   0x04
++-#define EF_ARM_APCS_26     0x08
++-#define EF_ARM_APCS_FLOAT  0x10
++-#define EF_ARM_PIC         0x20
++-#define EF_ARM_ALIGN8      0x40              /* 8-bit structure alignment is in use */
++-#define EF_ARM_NEW_ABI     0x80
++-#define EF_ARM_OLD_ABI     0x100
+++#define EF_ARM_RELEXEC               0x01
+++#define EF_ARM_HASENTRY              0x02
+++#define EF_ARM_INTERWORK     0x04
+++#define EF_ARM_APCS_26               0x08
+++#define EF_ARM_APCS_FLOAT    0x10
+++#define EF_ARM_PIC           0x20
+++#define EF_ARM_ALIGN8                0x40 /* 8-bit structure alignment is in use */
+++#define EF_ARM_NEW_ABI               0x80
+++#define EF_ARM_OLD_ABI               0x100
+++#define EF_ARM_SOFT_FLOAT    0x200
+++#define EF_ARM_VFP_FLOAT     0x400
+++#define EF_ARM_MAVERICK_FLOAT        0x800
+++
+++#define EF_ARM_ABI_FLOAT_SOFT        0x200   /* NB conflicts with EF_ARM_SOFT_FLOAT */
+++#define EF_ARM_ABI_FLOAT_HARD        0x400   /* NB conflicts with EF_ARM_VFP_FLOAT */
+++
++ 
++ /* Other constants defined in the ARM ELF spec. version B-01.  */
++ /* NB. These conflict with values defined above.  */
++ #define EF_ARM_SYMSARESORTED 0x04
++-#define EF_ARM_DYNSYMSUSESEGIDX 0x08
+++#define EF_ARM_DYNSYMSUSESEGIDX      0x08
++ #define EF_ARM_MAPSYMSFIRST  0x10
++ #define EF_ARM_EABIMASK              0XFF000000
++ 
++-#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
++-#define EF_ARM_EABI_UNKNOWN  0x00000000
++-#define EF_ARM_EABI_VER1     0x01000000
++-#define EF_ARM_EABI_VER2     0x02000000
++-
++-/* Additional symbol types for Thumb */
++-#define STT_ARM_TFUNC      0xd
+++/* Constants defined in AAELF.  */
+++#define EF_ARM_BE8       0x00800000
+++#define EF_ARM_LE8       0x00400000
+++
+++#define EF_ARM_EABI_VERSION(flags)   ((flags) & EF_ARM_EABIMASK)
+++#define EF_ARM_EABI_UNKNOWN  0x00000000
+++#define EF_ARM_EABI_VER1     0x01000000
+++#define EF_ARM_EABI_VER2     0x02000000
+++#define EF_ARM_EABI_VER3     0x03000000
+++#define EF_ARM_EABI_VER4     0x04000000
+++#define EF_ARM_EABI_VER5     0x05000000
+++
+++/* Additional symbol types for Thumb.  */
+++#define STT_ARM_TFUNC                STT_LOPROC /* A Thumb function.  */
+++#define STT_ARM_16BIT                STT_HIPROC /* A Thumb label.  */
++ 
++ /* ARM-specific values for sh_flags */
++-#define SHF_ARM_ENTRYSECT  0x10000000   /* Section contains an entry point */
++-#define SHF_ARM_COMDEF     0x80000000   /* Section may be multiply defined
++-                                        in the input to a link step */
+++#define SHF_ARM_ENTRYSECT    0x10000000 /* Section contains an entry point */
+++#define SHF_ARM_COMDEF               0x80000000 /* Section may be multiply defined
+++                                           in the input to a link step.  */
++ 
++ /* ARM-specific program header flags */
++-#define PF_ARM_SB          0x10000000   /* Segment contains the location
++-                                        addressed by the static base */
+++#define PF_ARM_SB            0x10000000 /* Segment contains the location
+++                                           addressed by the static base. */
+++#define PF_ARM_PI            0x20000000 /* Position-independent segment.  */
+++#define PF_ARM_ABS           0x40000000 /* Absolute segment.  */
++ 
++ /* Processor specific values for the Phdr p_type field.  */
++-#define PT_ARM_EXIDX 0x70000001      /* .ARM.exidx segment */
+++#define PT_ARM_EXIDX         (PT_LOPROC + 1) /* ARM unwind segment.  */
+++
+++/* Processor specific values for the Shdr sh_type field.  */
+++#define SHT_ARM_EXIDX                (SHT_LOPROC + 1) /* ARM unwind section.  */
+++#define SHT_ARM_PREEMPTMAP   (SHT_LOPROC + 2) /* Preemption details.  */
+++#define SHT_ARM_ATTRIBUTES   (SHT_LOPROC + 3) /* ARM attributes section.  */
+++
+++
+++/* AArch64 relocs.  */
+++
+++#define R_AARCH64_NONE            0  /* No relocation.  */
+++#define R_AARCH64_ABS64         257  /* Direct 64 bit. */
+++#define R_AARCH64_ABS32         258  /* Direct 32 bit.  */
+++#define R_AARCH64_ABS16              259     /* Direct 16-bit.  */
+++#define R_AARCH64_PREL64     260     /* PC-relative 64-bit.  */
+++#define R_AARCH64_PREL32     261     /* PC-relative 32-bit.  */
+++#define R_AARCH64_PREL16     262     /* PC-relative 16-bit.  */
+++#define R_AARCH64_MOVW_UABS_G0       263     /* Dir. MOVZ imm. from bits 15:0.  */
+++#define R_AARCH64_MOVW_UABS_G0_NC 264        /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_UABS_G1       265     /* Dir. MOVZ imm. from bits 31:16.  */
+++#define R_AARCH64_MOVW_UABS_G1_NC 266        /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_UABS_G2       267     /* Dir. MOVZ imm. from bits 47:32.  */
+++#define R_AARCH64_MOVW_UABS_G2_NC 268        /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_UABS_G3       269     /* Dir. MOV{K,Z} imm. from 63:48.  */
+++#define R_AARCH64_MOVW_SABS_G0       270     /* Dir. MOV{N,Z} imm. from 15:0.  */
+++#define R_AARCH64_MOVW_SABS_G1       271     /* Dir. MOV{N,Z} imm. from 31:16.  */
+++#define R_AARCH64_MOVW_SABS_G2       272     /* Dir. MOV{N,Z} imm. from 47:32.  */
+++#define R_AARCH64_LD_PREL_LO19       273     /* PC-rel. LD imm. from bits 20:2.  */
+++#define R_AARCH64_ADR_PREL_LO21      274     /* PC-rel. ADR imm. from bits 20:0.  */
+++#define R_AARCH64_ADR_PREL_PG_HI21 275       /* Page-rel. ADRP imm. from 32:12.  */
+++#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 /* Likewise; no overflow check.  */
+++#define R_AARCH64_ADD_ABS_LO12_NC 277        /* Dir. ADD imm. from bits 11:0.  */
+++#define R_AARCH64_LDST8_ABS_LO12_NC 278      /* Likewise for LD/ST; no check. */
+++#define R_AARCH64_TSTBR14    279     /* PC-rel. TBZ/TBNZ imm. from 15:2.  */
+++#define R_AARCH64_CONDBR19   280     /* PC-rel. cond. br. imm. from 20:2. */
+++#define R_AARCH64_JUMP26     282     /* PC-rel. B imm. from bits 27:2.  */
+++#define R_AARCH64_CALL26     283     /* Likewise for CALL.  */
+++#define R_AARCH64_LDST16_ABS_LO12_NC 284 /* Dir. ADD imm. from bits 11:1.  */
+++#define R_AARCH64_LDST32_ABS_LO12_NC 285 /* Likewise for bits 11:2.  */
+++#define R_AARCH64_LDST64_ABS_LO12_NC 286 /* Likewise for bits 11:3.  */
+++#define R_AARCH64_MOVW_PREL_G0       287     /* PC-rel. MOV{N,Z} imm. from 15:0.  */
+++#define R_AARCH64_MOVW_PREL_G0_NC 288        /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_PREL_G1       289     /* PC-rel. MOV{N,Z} imm. from 31:16. */
+++#define R_AARCH64_MOVW_PREL_G1_NC 290        /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_PREL_G2       291     /* PC-rel. MOV{N,Z} imm. from 47:32. */
+++#define R_AARCH64_MOVW_PREL_G2_NC 292        /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_PREL_G3       293     /* PC-rel. MOV{N,Z} imm. from 63:48. */
+++#define R_AARCH64_LDST128_ABS_LO12_NC 299 /* Dir. ADD imm. from bits 11:4.  */
+++#define R_AARCH64_MOVW_GOTOFF_G0 300 /* GOT-rel. off. MOV{N,Z} imm. 15:0. */
+++#define R_AARCH64_MOVW_GOTOFF_G0_NC 301      /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_GOTOFF_G1 302 /* GOT-rel. o. MOV{N,Z} imm. 31:16.  */
+++#define R_AARCH64_MOVW_GOTOFF_G1_NC 303      /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_GOTOFF_G2 304 /* GOT-rel. o. MOV{N,Z} imm. 47:32.  */
+++#define R_AARCH64_MOVW_GOTOFF_G2_NC 305      /* Likewise for MOVK; no check.  */
+++#define R_AARCH64_MOVW_GOTOFF_G3 306 /* GOT-rel. o. MOV{N,Z} imm. 63:48.  */
+++#define R_AARCH64_GOTREL64   307     /* GOT-relative 64-bit.  */
+++#define R_AARCH64_GOTREL32   308     /* GOT-relative 32-bit.  */
+++#define R_AARCH64_GOT_LD_PREL19      309     /* PC-rel. GOT off. load imm. 20:2.  */
+++#define R_AARCH64_LD64_GOTOFF_LO15 310       /* GOT-rel. off. LD/ST imm. 14:3.  */
+++#define R_AARCH64_ADR_GOT_PAGE       311     /* P-page-rel. GOT off. ADRP 32:12.  */
+++#define R_AARCH64_LD64_GOT_LO12_NC 312       /* Dir. GOT off. LD/ST imm. 11:3.  */
+++#define R_AARCH64_LD64_GOTPAGE_LO15 313      /* GOT-page-rel. GOT off. LD/ST 14:3 */
+++#define R_AARCH64_TLSGD_ADR_PREL21 512       /* PC-relative ADR imm. 20:0.  */
+++#define R_AARCH64_TLSGD_ADR_PAGE21 513       /* page-rel. ADRP imm. 32:12.  */
+++#define R_AARCH64_TLSGD_ADD_LO12_NC 514      /* direct ADD imm. from 11:0.  */
+++#define R_AARCH64_TLSGD_MOVW_G1      515     /* GOT-rel. MOV{N,Z} 31:16.  */
+++#define R_AARCH64_TLSGD_MOVW_G0_NC 516       /* GOT-rel. MOVK imm. 15:0.  */
+++#define R_AARCH64_TLSLD_ADR_PREL21 517       /* Like 512; local dynamic model.  */
+++#define R_AARCH64_TLSLD_ADR_PAGE21 518       /* Like 513; local dynamic model.  */
+++#define R_AARCH64_TLSLD_ADD_LO12_NC 519      /* Like 514; local dynamic model.  */
+++#define R_AARCH64_TLSLD_MOVW_G1      520     /* Like 515; local dynamic model.  */
+++#define R_AARCH64_TLSLD_MOVW_G0_NC 521       /* Like 516; local dynamic model.  */
+++#define R_AARCH64_TLSLD_LD_PREL19 522        /* TLS PC-rel. load imm. 20:2.  */
+++#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 /* TLS DTP-rel. MOV{N,Z} 47:32.  */
+++#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 /* TLS DTP-rel. MOV{N,Z} 31:16.  */
+++#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 /* Likewise; MOVK; no check.  */
+++#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 /* TLS DTP-rel. MOV{N,Z} 15:0.  */
+++#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 /* Likewise; MOVK; no check.  */
+++#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 /* DTP-rel. ADD imm. from 23:12. */
+++#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 /* DTP-rel. ADD imm. from 11:0.  */
+++#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 /* Likewise; no ovfl. check.  */
+++#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 /* DTP-rel. LD/ST imm. 11:0.  */
+++#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 /* Likewise; no check.  */
+++#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 /* DTP-rel. LD/ST imm. 11:1.  */
+++#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 /* Likewise; no check.  */
+++#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 /* DTP-rel. LD/ST imm. 11:2.  */
+++#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 /* Likewise; no check.  */
+++#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 /* DTP-rel. LD/ST imm. 11:3.  */
+++#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 /* Likewise; no check.  */
+++#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 /* GOT-rel. MOV{N,Z} 31:16.  */
+++#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 /* GOT-rel. MOVK 15:0.  */
+++#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 /* Page-rel. ADRP 32:12.  */
+++#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 /* Direct LD off. 11:3.  */
+++#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 /* PC-rel. load imm. 20:2.  */
+++#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 /* TLS TP-rel. MOV{N,Z} 47:32.  */
+++#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 /* TLS TP-rel. MOV{N,Z} 31:16.  */
+++#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 /* Likewise; MOVK; no check.  */
+++#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 /* TLS TP-rel. MOV{N,Z} 15:0.  */
+++#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 /* Likewise; MOVK; no check.  */
+++#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 /* TP-rel. ADD imm. 23:12.  */
+++#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 /* TP-rel. ADD imm. 11:0.  */
+++#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 /* Likewise; no ovfl. check.  */
+++#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 /* TP-rel. LD/ST off. 11:0.  */
+++#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 /* Likewise; no ovfl. check. */
+++#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 /* TP-rel. LD/ST off. 11:1.  */
+++#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 /* Likewise; no check.  */
+++#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 /* TP-rel. LD/ST off. 11:2.  */
+++#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 /* Likewise; no check.  */
+++#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 /* TP-rel. LD/ST off. 11:3.  */
+++#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 /* Likewise; no check.  */
+++#define R_AARCH64_TLSDESC_LD_PREL19 560      /* PC-rel. load immediate 20:2.  */
+++#define R_AARCH64_TLSDESC_ADR_PREL21 561 /* PC-rel. ADR immediate 20:0.  */
+++#define R_AARCH64_TLSDESC_ADR_PAGE21 562 /* Page-rel. ADRP imm. 32:12.  */
+++#define R_AARCH64_TLSDESC_LD64_LO12 563      /* Direct LD off. from 11:3.  */
+++#define R_AARCH64_TLSDESC_ADD_LO12 564       /* Direct ADD imm. from 11:0.  */
+++#define R_AARCH64_TLSDESC_OFF_G1 565 /* GOT-rel. MOV{N,Z} imm. 31:16.  */
+++#define R_AARCH64_TLSDESC_OFF_G0_NC 566      /* GOT-rel. MOVK imm. 15:0; no ck.  */
+++#define R_AARCH64_TLSDESC_LDR        567     /* Relax LDR.  */
+++#define R_AARCH64_TLSDESC_ADD        568     /* Relax ADD.  */
+++#define R_AARCH64_TLSDESC_CALL       569     /* Relax BLR.  */
+++#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 /* TP-rel. LD/ST off. 11:4.  */
+++#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 /* Likewise; no check.  */
+++#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 /* DTP-rel. LD/ST imm. 11:4. */
+++#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 /* Likewise; no check.  */
+++#define R_AARCH64_COPY         1024  /* Copy symbol at runtime.  */
+++#define R_AARCH64_GLOB_DAT     1025  /* Create GOT entry.  */
+++#define R_AARCH64_JUMP_SLOT    1026  /* Create PLT entry.  */
+++#define R_AARCH64_RELATIVE     1027  /* Adjust by program base.  */
+++#define R_AARCH64_TLS_DTPMOD64 1028  /* Module number, 64 bit.  */
+++#define R_AARCH64_TLS_DTPREL64 1029  /* Module-relative offset, 64 bit.  */
+++#define R_AARCH64_TLS_TPREL64  1030  /* TP-relative offset, 64 bit.  */
+++#define R_AARCH64_TLSDESC      1031  /* TLS Descriptor.  */
+++#define R_AARCH64_IRELATIVE  1032    /* STT_GNU_IFUNC relocation.  */
++ 
++ /* ARM relocs.  */
++ 
++ #define R_ARM_NONE           0       /* No reloc */
++-#define R_ARM_PC24           1       /* PC relative 26 bit branch */
+++#define R_ARM_PC24           1       /* Deprecated PC relative 26
+++                                        bit branch.  */
++ #define R_ARM_ABS32          2       /* Direct 32 bit  */
++ #define R_ARM_REL32          3       /* PC relative 32 bit */
++ #define R_ARM_PC13           4
++ #define R_ARM_ABS16          5       /* Direct 16 bit */
++ #define R_ARM_ABS12          6       /* Direct 12 bit */
++-#define R_ARM_THM_ABS5               7
+++#define R_ARM_THM_ABS5               7       /* Direct & 0x7C (LDR, STR).  */
++ #define R_ARM_ABS8           8       /* Direct 8 bit */
++ #define R_ARM_SBREL32                9
++-#define R_ARM_THM_PC22               10
++-#define R_ARM_THM_PC8                11
+++#define R_ARM_THM_PC22               10      /* PC relative 24 bit (Thumb32 BL).  */
+++#define R_ARM_THM_PC8                11      /* PC relative & 0x3FC
+++                                        (Thumb16 LDR, ADD, ADR).  */
++ #define R_ARM_AMP_VCALL9     12
++-#define R_ARM_SWI24          13
++-#define R_ARM_THM_SWI8               14
++-#define R_ARM_XPC25          15
++-#define R_ARM_THM_XPC22              16
+++#define R_ARM_SWI24          13      /* Obsolete static relocation.  */
+++#define R_ARM_TLS_DESC               13      /* Dynamic relocation.  */
+++#define R_ARM_THM_SWI8               14      /* Reserved.  */
+++#define R_ARM_XPC25          15      /* Reserved.  */
+++#define R_ARM_THM_XPC22              16      /* Reserved.  */
++ #define R_ARM_TLS_DTPMOD32   17      /* ID of module containing symbol */
++ #define R_ARM_TLS_DTPOFF32   18      /* Offset in TLS block */
++ #define R_ARM_TLS_TPOFF32    19      /* Offset in static TLS block */
++@@ -2248,17 +2458,109 @@ typedef Elf32_Addr Elf32_Conflict;
++ #define R_ARM_GOTOFF         24      /* 32 bit offset to GOT */
++ #define R_ARM_GOTPC          25      /* 32 bit PC relative offset to GOT */
++ #define R_ARM_GOT32          26      /* 32 bit GOT entry */
++-#define R_ARM_PLT32          27      /* 32 bit PLT address */
++-#define R_ARM_ALU_PCREL_7_0  32
++-#define R_ARM_ALU_PCREL_15_8 33
++-#define R_ARM_ALU_PCREL_23_15        34
++-#define R_ARM_LDR_SBREL_11_0 35
++-#define R_ARM_ALU_SBREL_19_12        36
++-#define R_ARM_ALU_SBREL_27_20        37
+++#define R_ARM_PLT32          27      /* Deprecated, 32 bit PLT address.  */
+++#define R_ARM_CALL           28      /* PC relative 24 bit (BL, BLX).  */
+++#define R_ARM_JUMP24         29      /* PC relative 24 bit
+++                                        (B, BL<cond>).  */
+++#define R_ARM_THM_JUMP24     30      /* PC relative 24 bit (Thumb32 B.W).  */
+++#define R_ARM_BASE_ABS               31      /* Adjust by program base.  */
+++#define R_ARM_ALU_PCREL_7_0  32      /* Obsolete.  */
+++#define R_ARM_ALU_PCREL_15_8 33      /* Obsolete.  */
+++#define R_ARM_ALU_PCREL_23_15        34      /* Obsolete.  */
+++#define R_ARM_LDR_SBREL_11_0 35      /* Deprecated, prog. base relative.  */
+++#define R_ARM_ALU_SBREL_19_12        36      /* Deprecated, prog. base relative.  */
+++#define R_ARM_ALU_SBREL_27_20        37      /* Deprecated, prog. base relative.  */
+++#define R_ARM_TARGET1                38
+++#define R_ARM_SBREL31                39      /* Program base relative.  */
+++#define R_ARM_V4BX           40
+++#define R_ARM_TARGET2                41
+++#define R_ARM_PREL31         42      /* 32 bit PC relative.  */
+++#define R_ARM_MOVW_ABS_NC    43      /* Direct 16-bit (MOVW).  */
+++#define R_ARM_MOVT_ABS               44      /* Direct high 16-bit (MOVT).  */
+++#define R_ARM_MOVW_PREL_NC   45      /* PC relative 16-bit (MOVW).  */
+++#define R_ARM_MOVT_PREL              46      /* PC relative (MOVT).  */
+++#define R_ARM_THM_MOVW_ABS_NC        47      /* Direct 16 bit (Thumb32 MOVW).  */
+++#define R_ARM_THM_MOVT_ABS   48      /* Direct high 16 bit
+++                                        (Thumb32 MOVT).  */
+++#define R_ARM_THM_MOVW_PREL_NC       49      /* PC relative 16 bit
+++                                        (Thumb32 MOVW).  */
+++#define R_ARM_THM_MOVT_PREL  50      /* PC relative high 16 bit
+++                                        (Thumb32 MOVT).  */
+++#define R_ARM_THM_JUMP19     51      /* PC relative 20 bit
+++                                        (Thumb32 B<cond>.W).  */
+++#define R_ARM_THM_JUMP6              52      /* PC relative X & 0x7E
+++                                        (Thumb16 CBZ, CBNZ).  */
+++#define R_ARM_THM_ALU_PREL_11_0      53      /* PC relative 12 bit
+++                                        (Thumb32 ADR.W).  */
+++#define R_ARM_THM_PC12               54      /* PC relative 12 bit
+++                                        (Thumb32 LDR{D,SB,H,SH}).  */
+++#define R_ARM_ABS32_NOI              55      /* Direct 32-bit.  */
+++#define R_ARM_REL32_NOI              56      /* PC relative 32-bit.  */
+++#define R_ARM_ALU_PC_G0_NC   57      /* PC relative (ADD, SUB).  */
+++#define R_ARM_ALU_PC_G0              58      /* PC relative (ADD, SUB).  */
+++#define R_ARM_ALU_PC_G1_NC   59      /* PC relative (ADD, SUB).  */
+++#define R_ARM_ALU_PC_G1              60      /* PC relative (ADD, SUB).  */
+++#define R_ARM_ALU_PC_G2              61      /* PC relative (ADD, SUB).  */
+++#define R_ARM_LDR_PC_G1              62      /* PC relative (LDR,STR,LDRB,STRB).  */
+++#define R_ARM_LDR_PC_G2              63      /* PC relative (LDR,STR,LDRB,STRB).  */
+++#define R_ARM_LDRS_PC_G0     64      /* PC relative (STR{D,H},
+++                                        LDR{D,SB,H,SH}).  */
+++#define R_ARM_LDRS_PC_G1     65      /* PC relative (STR{D,H},
+++                                        LDR{D,SB,H,SH}).  */
+++#define R_ARM_LDRS_PC_G2     66      /* PC relative (STR{D,H},
+++                                        LDR{D,SB,H,SH}).  */
+++#define R_ARM_LDC_PC_G0              67      /* PC relative (LDC, STC).  */
+++#define R_ARM_LDC_PC_G1              68      /* PC relative (LDC, STC).  */
+++#define R_ARM_LDC_PC_G2              69      /* PC relative (LDC, STC).  */
+++#define R_ARM_ALU_SB_G0_NC   70      /* Program base relative (ADD,SUB).  */
+++#define R_ARM_ALU_SB_G0              71      /* Program base relative (ADD,SUB).  */
+++#define R_ARM_ALU_SB_G1_NC   72      /* Program base relative (ADD,SUB).  */
+++#define R_ARM_ALU_SB_G1              73      /* Program base relative (ADD,SUB).  */
+++#define R_ARM_ALU_SB_G2              74      /* Program base relative (ADD,SUB).  */
+++#define R_ARM_LDR_SB_G0              75      /* Program base relative (LDR,
+++                                        STR, LDRB, STRB).  */
+++#define R_ARM_LDR_SB_G1              76      /* Program base relative
+++                                        (LDR, STR, LDRB, STRB).  */
+++#define R_ARM_LDR_SB_G2              77      /* Program base relative
+++                                        (LDR, STR, LDRB, STRB).  */
+++#define R_ARM_LDRS_SB_G0     78      /* Program base relative
+++                                        (LDR, STR, LDRB, STRB).  */
+++#define R_ARM_LDRS_SB_G1     79      /* Program base relative
+++                                        (LDR, STR, LDRB, STRB).  */
+++#define R_ARM_LDRS_SB_G2     80      /* Program base relative
+++                                        (LDR, STR, LDRB, STRB).  */
+++#define R_ARM_LDC_SB_G0              81      /* Program base relative (LDC,STC).  */
+++#define R_ARM_LDC_SB_G1              82      /* Program base relative (LDC,STC).  */
+++#define R_ARM_LDC_SB_G2              83      /* Program base relative (LDC,STC).  */
+++#define R_ARM_MOVW_BREL_NC   84      /* Program base relative 16
+++                                        bit (MOVW).  */
+++#define R_ARM_MOVT_BREL              85      /* Program base relative high
+++                                        16 bit (MOVT).  */
+++#define R_ARM_MOVW_BREL              86      /* Program base relative 16
+++                                        bit (MOVW).  */
+++#define R_ARM_THM_MOVW_BREL_NC       87      /* Program base relative 16
+++                                        bit (Thumb32 MOVW).  */
+++#define R_ARM_THM_MOVT_BREL  88      /* Program base relative high
+++                                        16 bit (Thumb32 MOVT).  */
+++#define R_ARM_THM_MOVW_BREL  89      /* Program base relative 16
+++                                        bit (Thumb32 MOVW).  */
+++#define R_ARM_TLS_GOTDESC    90
+++#define R_ARM_TLS_CALL               91
+++#define R_ARM_TLS_DESCSEQ    92      /* TLS relaxation.  */
+++#define R_ARM_THM_TLS_CALL   93
+++#define R_ARM_PLT32_ABS              94
+++#define R_ARM_GOT_ABS                95      /* GOT entry.  */
+++#define R_ARM_GOT_PREL               96      /* PC relative GOT entry.  */
+++#define R_ARM_GOT_BREL12     97      /* GOT entry relative to GOT
+++                                        origin (LDR).  */
+++#define R_ARM_GOTOFF12               98      /* 12 bit, GOT entry relative
+++                                        to GOT origin (LDR, STR).  */
+++#define R_ARM_GOTRELAX               99
++ #define R_ARM_GNU_VTENTRY    100
++ #define R_ARM_GNU_VTINHERIT  101
++-#define R_ARM_THM_PC11               102     /* thumb unconditional branch */
++-#define R_ARM_THM_PC9                103     /* thumb conditional branch */
+++#define R_ARM_THM_PC11               102     /* PC relative & 0xFFE (Thumb16 B).  */
+++#define R_ARM_THM_PC9                103     /* PC relative & 0x1FE
+++                                        (Thumb16 B/B<cond>).  */
++ #define R_ARM_TLS_GD32               104     /* PC-rel 32 bit for global dynamic
++                                         thread local data */
++ #define R_ARM_TLS_LDM32              105     /* PC-rel 32 bit for local dynamic
++@@ -2269,6 +2571,19 @@ typedef Elf32_Addr Elf32_Conflict;
++                                         static TLS block offset */
++ #define R_ARM_TLS_LE32               108     /* 32 bit offset relative to static
++                                         TLS block */
+++#define R_ARM_TLS_LDO12              109     /* 12 bit relative to TLS
+++                                        block (LDR, STR).  */
+++#define R_ARM_TLS_LE12               110     /* 12 bit relative to static
+++                                        TLS block (LDR, STR).  */
+++#define R_ARM_TLS_IE12GP     111     /* 12 bit GOT entry relative
+++                                        to GOT origin (LDR).  */
+++#define R_ARM_ME_TOO         128     /* Obsolete.  */
+++#define R_ARM_THM_TLS_DESCSEQ        129
+++#define R_ARM_THM_TLS_DESCSEQ16      129
+++#define R_ARM_THM_TLS_DESCSEQ32      130
+++#define R_ARM_THM_GOT_BREL12 131     /* GOT entry relative to GOT
+++                                        origin, 12 bit (Thumb32 LDR).  */
+++#define R_ARM_IRELATIVE              160
++ #define R_ARM_RXPC25         249
++ #define R_ARM_RSBREL32               250
++ #define R_ARM_THM_RPC22              251
++@@ -2393,6 +2708,30 @@ typedef Elf32_Addr Elf32_Conflict;
++ 
++ /* SH specific declarations */
++ 
+++/* Processor specific flags for the ELF header e_flags field.  */
+++#define EF_SH_MACH_MASK              0x1f
+++#define EF_SH_UNKNOWN                0x0
+++#define EF_SH1                       0x1
+++#define EF_SH2                       0x2
+++#define EF_SH3                       0x3
+++#define EF_SH_DSP            0x4
+++#define EF_SH3_DSP           0x5
+++#define EF_SH4AL_DSP         0x6
+++#define EF_SH3E                      0x8
+++#define EF_SH4                       0x9
+++#define EF_SH2E                      0xb
+++#define EF_SH4A                      0xc
+++#define EF_SH2A                      0xd
+++#define EF_SH4_NOFPU         0x10
+++#define EF_SH4A_NOFPU                0x11
+++#define EF_SH4_NOMMU_NOFPU   0x12
+++#define EF_SH2A_NOFPU                0x13
+++#define EF_SH3_NOMMU         0x14
+++#define EF_SH2A_SH4_NOFPU    0x15
+++#define EF_SH2A_SH3_NOFPU    0x16
+++#define EF_SH2A_SH4          0x17
+++#define EF_SH2A_SH3E         0x18
+++
++ /* SH relocs.  */
++ #define      R_SH_NONE               0
++ #define      R_SH_DIR32              1
++@@ -2434,6 +2773,12 @@ typedef Elf32_Addr Elf32_Conflict;
++ /* Keep this the last entry.  */
++ #define      R_SH_NUM                256
++ 
+++/* S/390 specific definitions.  */
+++
+++/* Valid values for the e_flags field.  */
+++
+++#define EF_S390_HIGH_GPRS    0x00000001  /* High GPRs kernel facility needed.  */
+++
++ /* Additional s390 relocs */
++ 
++ #define R_390_NONE           0       /* No reloc.  */
++@@ -2515,8 +2860,9 @@ typedef Elf32_Addr Elf32_Conflict;
++ #define R_390_GOTPLT20               59      /* 20 bit offset to jump slot.  */
++ #define R_390_TLS_GOTIE20    60      /* 20 bit GOT offset for static TLS
++                                         block offset.  */
+++#define R_390_IRELATIVE         61      /* STT_GNU_IFUNC relocation.  */
++ /* Keep this the last entry.  */
++-#define R_390_NUM            61
+++#define R_390_NUM            62
++ 
++ 
++ /* CRIS relocations.  */
++@@ -2577,13 +2923,23 @@ typedef Elf32_Addr Elf32_Conflict;
++ #define R_X86_64_GOTOFF64    25      /* 64 bit offset to GOT */
++ #define R_X86_64_GOTPC32     26      /* 32 bit signed pc relative
++                                         offset to GOT */
++-/* 27 .. 33 */
+++#define R_X86_64_GOT64               27      /* 64-bit GOT entry offset */
+++#define R_X86_64_GOTPCREL64  28      /* 64-bit PC relative offset
+++                                        to GOT entry */
+++#define R_X86_64_GOTPC64     29      /* 64-bit PC relative offset to GOT */
+++#define R_X86_64_GOTPLT64    30      /* like GOT64, says PLT entry needed */
+++#define R_X86_64_PLTOFF64    31      /* 64-bit GOT relative offset
+++                                        to PLT entry */
+++#define R_X86_64_SIZE32              32      /* Size of symbol plus 32-bit addend */
+++#define R_X86_64_SIZE64              33      /* Size of symbol plus 64-bit addend */
++ #define R_X86_64_GOTPC32_TLSDESC 34  /* GOT offset for TLS descriptor.  */
++ #define R_X86_64_TLSDESC_CALL   35   /* Marker for call through TLS
++                                         descriptor.  */
++ #define R_X86_64_TLSDESC        36   /* TLS descriptor.  */
+++#define R_X86_64_IRELATIVE   37      /* Adjust indirectly by program base */
+++#define R_X86_64_RELATIVE64  38      /* 64-bit adjust by program base */
++ 
++-#define R_X86_64_NUM         37
+++#define R_X86_64_NUM         39
++ 
++ 
++ /* AM33 relocations.  */
++@@ -2611,8 +2967,23 @@ typedef Elf32_Addr Elf32_Conflict;
++ #define R_MN10300_GLOB_DAT   21      /* Create GOT entry.  */
++ #define R_MN10300_JMP_SLOT   22      /* Create PLT entry.  */
++ #define R_MN10300_RELATIVE   23      /* Adjust by program base.  */
++-
++-#define R_MN10300_NUM                24
+++#define R_MN10300_TLS_GD     24      /* 32-bit offset for global dynamic.  */
+++#define R_MN10300_TLS_LD     25      /* 32-bit offset for local dynamic.  */
+++#define R_MN10300_TLS_LDO    26      /* Module-relative offset.  */
+++#define R_MN10300_TLS_GOTIE  27      /* GOT offset for static TLS block
+++                                        offset.  */
+++#define R_MN10300_TLS_IE     28      /* GOT address for static TLS block
+++                                        offset.  */
+++#define R_MN10300_TLS_LE     29      /* Offset relative to static TLS
+++                                        block.  */
+++#define R_MN10300_TLS_DTPMOD 30      /* ID of module containing symbol.  */
+++#define R_MN10300_TLS_DTPOFF 31      /* Offset in module TLS block.  */
+++#define R_MN10300_TLS_TPOFF  32      /* Offset in static TLS block.  */
+++#define R_MN10300_SYM_DIFF   33      /* Adjustment for next reloc as needed
+++                                        by linker relaxation.  */
+++#define R_MN10300_ALIGN              34      /* Alignment requirement for linker
+++                                        relaxation.  */
+++#define R_MN10300_NUM                35
++ 
++ 
++ /* M32R relocs.  */
++@@ -2670,5 +3041,264 @@ typedef Elf32_Addr Elf32_Conflict;
++ #define R_M32R_GOTOFF_LO     64      /* Low 16 bit offset to GOT */
++ #define R_M32R_NUM           256     /* Keep this the last entry. */
++ 
+++/* MicroBlaze relocations */
+++#define R_MICROBLAZE_NONE            0       /* No reloc. */
+++#define R_MICROBLAZE_32              1       /* Direct 32 bit. */
+++#define R_MICROBLAZE_32_PCREL                2       /* PC relative 32 bit. */
+++#define R_MICROBLAZE_64_PCREL                3       /* PC relative 64 bit. */
+++#define R_MICROBLAZE_32_PCREL_LO     4       /* Low 16 bits of PCREL32. */
+++#define R_MICROBLAZE_64              5       /* Direct 64 bit. */
+++#define R_MICROBLAZE_32_LO           6       /* Low 16 bit. */
+++#define R_MICROBLAZE_SRO32           7       /* Read-only small data area. */
+++#define R_MICROBLAZE_SRW32           8       /* Read-write small data area. */
+++#define R_MICROBLAZE_64_NONE         9       /* No reloc. */
+++#define R_MICROBLAZE_32_SYM_OP_SYM   10      /* Symbol Op Symbol relocation. */
+++#define R_MICROBLAZE_GNU_VTINHERIT   11      /* GNU C++ vtable hierarchy. */
+++#define R_MICROBLAZE_GNU_VTENTRY     12      /* GNU C++ vtable member usage. */
+++#define R_MICROBLAZE_GOTPC_64                13      /* PC-relative GOT offset.  */
+++#define R_MICROBLAZE_GOT_64          14      /* GOT entry offset.  */
+++#define R_MICROBLAZE_PLT_64          15      /* PLT offset (PC-relative).  */
+++#define R_MICROBLAZE_REL             16      /* Adjust by program base.  */
+++#define R_MICROBLAZE_JUMP_SLOT               17      /* Create PLT entry.  */
+++#define R_MICROBLAZE_GLOB_DAT                18      /* Create GOT entry.  */
+++#define R_MICROBLAZE_GOTOFF_64               19      /* 64 bit offset to GOT. */
+++#define R_MICROBLAZE_GOTOFF_32               20      /* 32 bit offset to GOT. */
+++#define R_MICROBLAZE_COPY            21      /* Runtime copy.  */
+++#define R_MICROBLAZE_TLS             22      /* TLS Reloc. */
+++#define R_MICROBLAZE_TLSGD           23      /* TLS General Dynamic. */
+++#define R_MICROBLAZE_TLSLD           24      /* TLS Local Dynamic. */
+++#define R_MICROBLAZE_TLSDTPMOD32     25      /* TLS Module ID. */
+++#define R_MICROBLAZE_TLSDTPREL32     26      /* TLS Offset Within TLS Block. */
+++#define R_MICROBLAZE_TLSDTPREL64     27      /* TLS Offset Within TLS Block. */
+++#define R_MICROBLAZE_TLSGOTTPREL32   28      /* TLS Offset From Thread Pointer. */
+++#define R_MICROBLAZE_TLSTPREL32      29      /* TLS Offset From Thread Pointer. */
+++
+++/* TILEPro relocations.  */
+++#define R_TILEPRO_NONE               0       /* No reloc */
+++#define R_TILEPRO_32         1       /* Direct 32 bit */
+++#define R_TILEPRO_16         2       /* Direct 16 bit */
+++#define R_TILEPRO_8          3       /* Direct 8 bit */
+++#define R_TILEPRO_32_PCREL   4       /* PC relative 32 bit */
+++#define R_TILEPRO_16_PCREL   5       /* PC relative 16 bit */
+++#define R_TILEPRO_8_PCREL    6       /* PC relative 8 bit */
+++#define R_TILEPRO_LO16               7       /* Low 16 bit */
+++#define R_TILEPRO_HI16               8       /* High 16 bit */
+++#define R_TILEPRO_HA16               9       /* High 16 bit, adjusted */
+++#define R_TILEPRO_COPY               10      /* Copy relocation */
+++#define R_TILEPRO_GLOB_DAT   11      /* Create GOT entry */
+++#define R_TILEPRO_JMP_SLOT   12      /* Create PLT entry */
+++#define R_TILEPRO_RELATIVE   13      /* Adjust by program base */
+++#define R_TILEPRO_BROFF_X1   14      /* X1 pipe branch offset */
+++#define R_TILEPRO_JOFFLONG_X1        15      /* X1 pipe jump offset */
+++#define R_TILEPRO_JOFFLONG_X1_PLT 16 /* X1 pipe jump offset to PLT */
+++#define R_TILEPRO_IMM8_X0    17      /* X0 pipe 8-bit */
+++#define R_TILEPRO_IMM8_Y0    18      /* Y0 pipe 8-bit */
+++#define R_TILEPRO_IMM8_X1    19      /* X1 pipe 8-bit */
+++#define R_TILEPRO_IMM8_Y1    20      /* Y1 pipe 8-bit */
+++#define R_TILEPRO_MT_IMM15_X1        21      /* X1 pipe mtspr */
+++#define R_TILEPRO_MF_IMM15_X1        22      /* X1 pipe mfspr */
+++#define R_TILEPRO_IMM16_X0   23      /* X0 pipe 16-bit */
+++#define R_TILEPRO_IMM16_X1   24      /* X1 pipe 16-bit */
+++#define R_TILEPRO_IMM16_X0_LO        25      /* X0 pipe low 16-bit */
+++#define R_TILEPRO_IMM16_X1_LO        26      /* X1 pipe low 16-bit */
+++#define R_TILEPRO_IMM16_X0_HI        27      /* X0 pipe high 16-bit */
+++#define R_TILEPRO_IMM16_X1_HI        28      /* X1 pipe high 16-bit */
+++#define R_TILEPRO_IMM16_X0_HA        29      /* X0 pipe high 16-bit, adjusted */
+++#define R_TILEPRO_IMM16_X1_HA        30      /* X1 pipe high 16-bit, adjusted */
+++#define R_TILEPRO_IMM16_X0_PCREL 31  /* X0 pipe PC relative 16 bit */
+++#define R_TILEPRO_IMM16_X1_PCREL 32  /* X1 pipe PC relative 16 bit */
+++#define R_TILEPRO_IMM16_X0_LO_PCREL 33       /* X0 pipe PC relative low 16 bit */
+++#define R_TILEPRO_IMM16_X1_LO_PCREL 34       /* X1 pipe PC relative low 16 bit */
+++#define R_TILEPRO_IMM16_X0_HI_PCREL 35       /* X0 pipe PC relative high 16 bit */
+++#define R_TILEPRO_IMM16_X1_HI_PCREL 36       /* X1 pipe PC relative high 16 bit */
+++#define R_TILEPRO_IMM16_X0_HA_PCREL 37       /* X0 pipe PC relative ha() 16 bit */
+++#define R_TILEPRO_IMM16_X1_HA_PCREL 38       /* X1 pipe PC relative ha() 16 bit */
+++#define R_TILEPRO_IMM16_X0_GOT       39      /* X0 pipe 16-bit GOT offset */
+++#define R_TILEPRO_IMM16_X1_GOT       40      /* X1 pipe 16-bit GOT offset */
+++#define R_TILEPRO_IMM16_X0_GOT_LO 41 /* X0 pipe low 16-bit GOT offset */
+++#define R_TILEPRO_IMM16_X1_GOT_LO 42 /* X1 pipe low 16-bit GOT offset */
+++#define R_TILEPRO_IMM16_X0_GOT_HI 43 /* X0 pipe high 16-bit GOT offset */
+++#define R_TILEPRO_IMM16_X1_GOT_HI 44 /* X1 pipe high 16-bit GOT offset */
+++#define R_TILEPRO_IMM16_X0_GOT_HA 45 /* X0 pipe ha() 16-bit GOT offset */
+++#define R_TILEPRO_IMM16_X1_GOT_HA 46 /* X1 pipe ha() 16-bit GOT offset */
+++#define R_TILEPRO_MMSTART_X0 47      /* X0 pipe mm "start" */
+++#define R_TILEPRO_MMEND_X0   48      /* X0 pipe mm "end" */
+++#define R_TILEPRO_MMSTART_X1 49      /* X1 pipe mm "start" */
+++#define R_TILEPRO_MMEND_X1   50      /* X1 pipe mm "end" */
+++#define R_TILEPRO_SHAMT_X0   51      /* X0 pipe shift amount */
+++#define R_TILEPRO_SHAMT_X1   52      /* X1 pipe shift amount */
+++#define R_TILEPRO_SHAMT_Y0   53      /* Y0 pipe shift amount */
+++#define R_TILEPRO_SHAMT_Y1   54      /* Y1 pipe shift amount */
+++#define R_TILEPRO_DEST_IMM8_X1       55      /* X1 pipe destination 8-bit */
+++/* Relocs 56-59 are currently not defined.  */
+++#define R_TILEPRO_TLS_GD_CALL        60      /* "jal" for TLS GD */
+++#define R_TILEPRO_IMM8_X0_TLS_GD_ADD 61      /* X0 pipe "addi" for TLS GD */
+++#define R_TILEPRO_IMM8_X1_TLS_GD_ADD 62      /* X1 pipe "addi" for TLS GD */
+++#define R_TILEPRO_IMM8_Y0_TLS_GD_ADD 63      /* Y0 pipe "addi" for TLS GD */
+++#define R_TILEPRO_IMM8_Y1_TLS_GD_ADD 64      /* Y1 pipe "addi" for TLS GD */
+++#define R_TILEPRO_TLS_IE_LOAD        65      /* "lw_tls" for TLS IE */
+++#define R_TILEPRO_IMM16_X0_TLS_GD 66 /* X0 pipe 16-bit TLS GD offset */
+++#define R_TILEPRO_IMM16_X1_TLS_GD 67 /* X1 pipe 16-bit TLS GD offset */
+++#define R_TILEPRO_IMM16_X0_TLS_GD_LO 68      /* X0 pipe low 16-bit TLS GD offset */
+++#define R_TILEPRO_IMM16_X1_TLS_GD_LO 69      /* X1 pipe low 16-bit TLS GD offset */
+++#define R_TILEPRO_IMM16_X0_TLS_GD_HI 70      /* X0 pipe high 16-bit TLS GD offset */
+++#define R_TILEPRO_IMM16_X1_TLS_GD_HI 71      /* X1 pipe high 16-bit TLS GD offset */
+++#define R_TILEPRO_IMM16_X0_TLS_GD_HA 72      /* X0 pipe ha() 16-bit TLS GD offset */
+++#define R_TILEPRO_IMM16_X1_TLS_GD_HA 73      /* X1 pipe ha() 16-bit TLS GD offset */
+++#define R_TILEPRO_IMM16_X0_TLS_IE 74 /* X0 pipe 16-bit TLS IE offset */
+++#define R_TILEPRO_IMM16_X1_TLS_IE 75 /* X1 pipe 16-bit TLS IE offset */
+++#define R_TILEPRO_IMM16_X0_TLS_IE_LO 76      /* X0 pipe low 16-bit TLS IE offset */
+++#define R_TILEPRO_IMM16_X1_TLS_IE_LO 77      /* X1 pipe low 16-bit TLS IE offset */
+++#define R_TILEPRO_IMM16_X0_TLS_IE_HI 78      /* X0 pipe high 16-bit TLS IE offset */
+++#define R_TILEPRO_IMM16_X1_TLS_IE_HI 79      /* X1 pipe high 16-bit TLS IE offset */
+++#define R_TILEPRO_IMM16_X0_TLS_IE_HA 80      /* X0 pipe ha() 16-bit TLS IE offset */
+++#define R_TILEPRO_IMM16_X1_TLS_IE_HA 81      /* X1 pipe ha() 16-bit TLS IE offset */
+++#define R_TILEPRO_TLS_DTPMOD32       82      /* ID of module containing symbol */
+++#define R_TILEPRO_TLS_DTPOFF32       83      /* Offset in TLS block */
+++#define R_TILEPRO_TLS_TPOFF32        84      /* Offset in static TLS block */
+++#define R_TILEPRO_IMM16_X0_TLS_LE 85 /* X0 pipe 16-bit TLS LE offset */
+++#define R_TILEPRO_IMM16_X1_TLS_LE 86 /* X1 pipe 16-bit TLS LE offset */
+++#define R_TILEPRO_IMM16_X0_TLS_LE_LO 87      /* X0 pipe low 16-bit TLS LE offset */
+++#define R_TILEPRO_IMM16_X1_TLS_LE_LO 88      /* X1 pipe low 16-bit TLS LE offset */
+++#define R_TILEPRO_IMM16_X0_TLS_LE_HI 89      /* X0 pipe high 16-bit TLS LE offset */
+++#define R_TILEPRO_IMM16_X1_TLS_LE_HI 90      /* X1 pipe high 16-bit TLS LE offset */
+++#define R_TILEPRO_IMM16_X0_TLS_LE_HA 91      /* X0 pipe ha() 16-bit TLS LE offset */
+++#define R_TILEPRO_IMM16_X1_TLS_LE_HA 92      /* X1 pipe ha() 16-bit TLS LE offset */
+++
+++#define R_TILEPRO_GNU_VTINHERIT      128     /* GNU C++ vtable hierarchy */
+++#define R_TILEPRO_GNU_VTENTRY        129     /* GNU C++ vtable member usage */
+++
+++#define R_TILEPRO_NUM                130
+++
+++
+++/* TILE-Gx relocations.  */
+++#define R_TILEGX_NONE                0       /* No reloc */
+++#define R_TILEGX_64          1       /* Direct 64 bit */
+++#define R_TILEGX_32          2       /* Direct 32 bit */
+++#define R_TILEGX_16          3       /* Direct 16 bit */
+++#define R_TILEGX_8           4       /* Direct 8 bit */
+++#define R_TILEGX_64_PCREL    5       /* PC relative 64 bit */
+++#define R_TILEGX_32_PCREL    6       /* PC relative 32 bit */
+++#define R_TILEGX_16_PCREL    7       /* PC relative 16 bit */
+++#define R_TILEGX_8_PCREL     8       /* PC relative 8 bit */
+++#define R_TILEGX_HW0         9       /* hword 0 16-bit */
+++#define R_TILEGX_HW1         10      /* hword 1 16-bit */
+++#define R_TILEGX_HW2         11      /* hword 2 16-bit */
+++#define R_TILEGX_HW3         12      /* hword 3 16-bit */
+++#define R_TILEGX_HW0_LAST    13      /* last hword 0 16-bit */
+++#define R_TILEGX_HW1_LAST    14      /* last hword 1 16-bit */
+++#define R_TILEGX_HW2_LAST    15      /* last hword 2 16-bit */
+++#define R_TILEGX_COPY                16      /* Copy relocation */
+++#define R_TILEGX_GLOB_DAT    17      /* Create GOT entry */
+++#define R_TILEGX_JMP_SLOT    18      /* Create PLT entry */
+++#define R_TILEGX_RELATIVE    19      /* Adjust by program base */
+++#define R_TILEGX_BROFF_X1    20      /* X1 pipe branch offset */
+++#define R_TILEGX_JUMPOFF_X1  21      /* X1 pipe jump offset */
+++#define R_TILEGX_JUMPOFF_X1_PLT      22      /* X1 pipe jump offset to PLT */
+++#define R_TILEGX_IMM8_X0     23      /* X0 pipe 8-bit */
+++#define R_TILEGX_IMM8_Y0     24      /* Y0 pipe 8-bit */
+++#define R_TILEGX_IMM8_X1     25      /* X1 pipe 8-bit */
+++#define R_TILEGX_IMM8_Y1     26      /* Y1 pipe 8-bit */
+++#define R_TILEGX_DEST_IMM8_X1        27      /* X1 pipe destination 8-bit */
+++#define R_TILEGX_MT_IMM14_X1 28      /* X1 pipe mtspr */
+++#define R_TILEGX_MF_IMM14_X1 29      /* X1 pipe mfspr */
+++#define R_TILEGX_MMSTART_X0  30      /* X0 pipe mm "start" */
+++#define R_TILEGX_MMEND_X0    31      /* X0 pipe mm "end" */
+++#define R_TILEGX_SHAMT_X0    32      /* X0 pipe shift amount */
+++#define R_TILEGX_SHAMT_X1    33      /* X1 pipe shift amount */
+++#define R_TILEGX_SHAMT_Y0    34      /* Y0 pipe shift amount */
+++#define R_TILEGX_SHAMT_Y1    35      /* Y1 pipe shift amount */
+++#define R_TILEGX_IMM16_X0_HW0        36      /* X0 pipe hword 0 */
+++#define R_TILEGX_IMM16_X1_HW0        37      /* X1 pipe hword 0 */
+++#define R_TILEGX_IMM16_X0_HW1        38      /* X0 pipe hword 1 */
+++#define R_TILEGX_IMM16_X1_HW1        39      /* X1 pipe hword 1 */
+++#define R_TILEGX_IMM16_X0_HW2        40      /* X0 pipe hword 2 */
+++#define R_TILEGX_IMM16_X1_HW2        41      /* X1 pipe hword 2 */
+++#define R_TILEGX_IMM16_X0_HW3        42      /* X0 pipe hword 3 */
+++#define R_TILEGX_IMM16_X1_HW3        43      /* X1 pipe hword 3 */
+++#define R_TILEGX_IMM16_X0_HW0_LAST 44        /* X0 pipe last hword 0 */
+++#define R_TILEGX_IMM16_X1_HW0_LAST 45        /* X1 pipe last hword 0 */
+++#define R_TILEGX_IMM16_X0_HW1_LAST 46        /* X0 pipe last hword 1 */
+++#define R_TILEGX_IMM16_X1_HW1_LAST 47        /* X1 pipe last hword 1 */
+++#define R_TILEGX_IMM16_X0_HW2_LAST 48        /* X0 pipe last hword 2 */
+++#define R_TILEGX_IMM16_X1_HW2_LAST 49        /* X1 pipe last hword 2 */
+++#define R_TILEGX_IMM16_X0_HW0_PCREL 50       /* X0 pipe PC relative hword 0 */
+++#define R_TILEGX_IMM16_X1_HW0_PCREL 51       /* X1 pipe PC relative hword 0 */
+++#define R_TILEGX_IMM16_X0_HW1_PCREL 52       /* X0 pipe PC relative hword 1 */
+++#define R_TILEGX_IMM16_X1_HW1_PCREL 53       /* X1 pipe PC relative hword 1 */
+++#define R_TILEGX_IMM16_X0_HW2_PCREL 54       /* X0 pipe PC relative hword 2 */
+++#define R_TILEGX_IMM16_X1_HW2_PCREL 55       /* X1 pipe PC relative hword 2 */
+++#define R_TILEGX_IMM16_X0_HW3_PCREL 56       /* X0 pipe PC relative hword 3 */
+++#define R_TILEGX_IMM16_X1_HW3_PCREL 57       /* X1 pipe PC relative hword 3 */
+++#define R_TILEGX_IMM16_X0_HW0_LAST_PCREL 58 /* X0 pipe PC-rel last hword 0 */
+++#define R_TILEGX_IMM16_X1_HW0_LAST_PCREL 59 /* X1 pipe PC-rel last hword 0 */
+++#define R_TILEGX_IMM16_X0_HW1_LAST_PCREL 60 /* X0 pipe PC-rel last hword 1 */
+++#define R_TILEGX_IMM16_X1_HW1_LAST_PCREL 61 /* X1 pipe PC-rel last hword 1 */
+++#define R_TILEGX_IMM16_X0_HW2_LAST_PCREL 62 /* X0 pipe PC-rel last hword 2 */
+++#define R_TILEGX_IMM16_X1_HW2_LAST_PCREL 63 /* X1 pipe PC-rel last hword 2 */
+++#define R_TILEGX_IMM16_X0_HW0_GOT 64 /* X0 pipe hword 0 GOT offset */
+++#define R_TILEGX_IMM16_X1_HW0_GOT 65 /* X1 pipe hword 0 GOT offset */
+++#define R_TILEGX_IMM16_X0_HW0_PLT_PCREL 66 /* X0 pipe PC-rel PLT hword 0 */
+++#define R_TILEGX_IMM16_X1_HW0_PLT_PCREL 67 /* X1 pipe PC-rel PLT hword 0 */
+++#define R_TILEGX_IMM16_X0_HW1_PLT_PCREL 68 /* X0 pipe PC-rel PLT hword 1 */
+++#define R_TILEGX_IMM16_X1_HW1_PLT_PCREL 69 /* X1 pipe PC-rel PLT hword 1 */
+++#define R_TILEGX_IMM16_X0_HW2_PLT_PCREL 70 /* X0 pipe PC-rel PLT hword 2 */
+++#define R_TILEGX_IMM16_X1_HW2_PLT_PCREL 71 /* X1 pipe PC-rel PLT hword 2 */
+++#define R_TILEGX_IMM16_X0_HW0_LAST_GOT 72 /* X0 pipe last hword 0 GOT offset */
+++#define R_TILEGX_IMM16_X1_HW0_LAST_GOT 73 /* X1 pipe last hword 0 GOT offset */
+++#define R_TILEGX_IMM16_X0_HW1_LAST_GOT 74 /* X0 pipe last hword 1 GOT offset */
+++#define R_TILEGX_IMM16_X1_HW1_LAST_GOT 75 /* X1 pipe last hword 1 GOT offset */
+++#define R_TILEGX_IMM16_X0_HW3_PLT_PCREL 76 /* X0 pipe PC-rel PLT hword 3 */
+++#define R_TILEGX_IMM16_X1_HW3_PLT_PCREL 77 /* X1 pipe PC-rel PLT hword 3 */
+++#define R_TILEGX_IMM16_X0_HW0_TLS_GD 78      /* X0 pipe hword 0 TLS GD offset */
+++#define R_TILEGX_IMM16_X1_HW0_TLS_GD 79      /* X1 pipe hword 0 TLS GD offset */
+++#define R_TILEGX_IMM16_X0_HW0_TLS_LE 80      /* X0 pipe hword 0 TLS LE offset */
+++#define R_TILEGX_IMM16_X1_HW0_TLS_LE 81      /* X1 pipe hword 0 TLS LE offset */
+++#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE 82 /* X0 pipe last hword 0 LE off */
+++#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE 83 /* X1 pipe last hword 0 LE off */
+++#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE 84 /* X0 pipe last hword 1 LE off */
+++#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE 85 /* X1 pipe last hword 1 LE off */
+++#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD 86 /* X0 pipe last hword 0 GD off */
+++#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD 87 /* X1 pipe last hword 0 GD off */
+++#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD 88 /* X0 pipe last hword 1 GD off */
+++#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD 89 /* X1 pipe last hword 1 GD off */
+++/* Relocs 90-91 are currently not defined.  */
+++#define R_TILEGX_IMM16_X0_HW0_TLS_IE 92      /* X0 pipe hword 0 TLS IE offset */
+++#define R_TILEGX_IMM16_X1_HW0_TLS_IE 93      /* X1 pipe hword 0 TLS IE offset */
+++#define R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL 94 /* X0 pipe PC-rel PLT last hword 0 */
+++#define R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL 95 /* X1 pipe PC-rel PLT last hword 0 */
+++#define R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL 96 /* X0 pipe PC-rel PLT last hword 1 */
+++#define R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL 97 /* X1 pipe PC-rel PLT last hword 1 */
+++#define R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL 98 /* X0 pipe PC-rel PLT last hword 2 */
+++#define R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL 99 /* X1 pipe PC-rel PLT last hword 2 */
+++#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE 100 /* X0 pipe last hword 0 IE off */
+++#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE 101 /* X1 pipe last hword 0 IE off */
+++#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE 102 /* X0 pipe last hword 1 IE off */
+++#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE 103 /* X1 pipe last hword 1 IE off */
+++/* Relocs 104-105 are currently not defined.  */
+++#define R_TILEGX_TLS_DTPMOD64        106     /* 64-bit ID of symbol's module */
+++#define R_TILEGX_TLS_DTPOFF64        107     /* 64-bit offset in TLS block */
+++#define R_TILEGX_TLS_TPOFF64 108     /* 64-bit offset in static TLS block */
+++#define R_TILEGX_TLS_DTPMOD32        109     /* 32-bit ID of symbol's module */
+++#define R_TILEGX_TLS_DTPOFF32        110     /* 32-bit offset in TLS block */
+++#define R_TILEGX_TLS_TPOFF32 111     /* 32-bit offset in static TLS block */
+++#define R_TILEGX_TLS_GD_CALL 112     /* "jal" for TLS GD */
+++#define R_TILEGX_IMM8_X0_TLS_GD_ADD 113      /* X0 pipe "addi" for TLS GD */
+++#define R_TILEGX_IMM8_X1_TLS_GD_ADD 114      /* X1 pipe "addi" for TLS GD */
+++#define R_TILEGX_IMM8_Y0_TLS_GD_ADD 115      /* Y0 pipe "addi" for TLS GD */
+++#define R_TILEGX_IMM8_Y1_TLS_GD_ADD 116      /* Y1 pipe "addi" for TLS GD */
+++#define R_TILEGX_TLS_IE_LOAD 117     /* "ld_tls" for TLS IE */
+++#define R_TILEGX_IMM8_X0_TLS_ADD 118 /* X0 pipe "addi" for TLS GD/IE */
+++#define R_TILEGX_IMM8_X1_TLS_ADD 119 /* X1 pipe "addi" for TLS GD/IE */
+++#define R_TILEGX_IMM8_Y0_TLS_ADD 120 /* Y0 pipe "addi" for TLS GD/IE */
+++#define R_TILEGX_IMM8_Y1_TLS_ADD 121 /* Y1 pipe "addi" for TLS GD/IE */
+++
+++#define R_TILEGX_GNU_VTINHERIT       128     /* GNU C++ vtable hierarchy */
+++#define R_TILEGX_GNU_VTENTRY 129     /* GNU C++ vtable member usage */
+++
+++#define R_TILEGX_NUM         130
+++
+++
+++/* __END_DECLS */
++ 
++ #endif       /* elf.h */
++--- a/build_scripts/main.py
+++++ b/build_scripts/main.py
++@@ -894,8 +894,14 @@ class PysideBuild(_build):
++             return
++         log.info("Building patchelf...")
++         module_src_dir = os.path.join(self.sources_dir, "patchelf")
+++        import subprocess
+++        pagesize = subprocess.check_output("getconf PAGESIZE", shell=True).decode('utf-8').rstrip()
++         build_cmd = [
++             "g++",
+++            "-std=c++11",
+++            "-DPAGESIZE=%s" % (pagesize),
+++            '-DPACKAGE_STRING="patchelf"',
+++            "-D_FILE_OFFSET_BITS=64",
++             "{}/patchelf.cc".format(module_src_dir),
++             "-o",
++             "patchelf",
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..46408b063760a757c41f6c45ee9fbb973d623803
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py2.*/bin/pyside2-* usr/bin
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ca1b931fcb4ac89a7b122fff0794d60c1a972155
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++pyside3_install/py3*/share/man/man1/pyside2-*
++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6d2862181e2edc8af7218e69e889b41b205164aa
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++build/html
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e39721e20f0708703dc6d9b607634636d625e9b2
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++examples/*
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..508667bf551d10d2e93fa3b4f56f7a12b6a00721
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/Qt3DCore.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d66be7124d5dba5127ce5d25ce760357150f7ae1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/Qt3DInput.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..3f4f3e05842a504c0d26fe1a5680778db9914be7
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/Qt3DLogic.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a61c6df56e0115e4bed2acb71a23bbc3a3173e94
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/Qt3DRender.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..23c5c7741f58f34590ea1a856c198d07dbd1d655
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtCharts.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..869a19142b7da376d6e50a6c1e6ac836669ae1a1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtConcurrent.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e1e603a3de0275ee897e225dc43eb7af9aeeb3e2
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtCore.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..f49a7856452af5d414d3f8d63f3add3269ab890b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtGui.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..327c40f0616df242bb0b07cc801426f0ad2296fc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtHelp.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..0e002c5a5d60cb86700dbad03f26b6edfe93f455
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtLocation.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..0f7a246474e73ecb0a38c3a147d5ef711ba313b3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtMultimedia.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..bc041b361d74094c159549356d51a5ce24d5c37a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtMultimediaWidgets.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..acabe7699169d057e75153bd94cb089851393c34
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtNetwork.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..dc6d89dbcdc4cff569915de5076057e8ac6145d0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtOpenGL.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..dc280cfb20701ee22a9a0396f7a9bb514edfa7d3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtPositioning.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6889749fdbda2c2cdd2685b8bbad293427ff1cac
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtPrintSupport.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..93c5c46ef73ab21baff3f24e66356bb10b2e8982
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtQml.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d48513fe1be63c7560ceaef247e34d07530f524c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtQuick.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..7f34bb51908041d473a3b92188750582d2dab279
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtQuickWidgets.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e7d6384e90a02ae7186203feae5af3ef85ecade5
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtScript.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..21288fa29b7cc1412e17766846e2b464a4431819
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtScriptTools.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..73004084d6fa5ae3106716bd84fa118130b5f0b2
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtSensors.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a8ddadca7925c24e932c1b06b1eb70fb62f278ad
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtSql.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..645d8cb84907eaae1944dcd5fb7b7e580b0b6888
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtSvg.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..0aa8e9ee9754a8003c90780fbcfc8873f21da96e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtTest.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4ea352e7d3323db0b27a3b9daf14d88f81d6f044
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtTextToSpeech.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4167fe1e76546cc360663898d2804a803108cb27
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtUiTools.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..7624483f9c7c27e71fba913555d2fde9bedc2411
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtWebChannel.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..11fc692f5c8a9c6fed5c7dc82380d5686af07ffe
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtWebEngineCore.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..216c9a04977d24fd51f90067d2df6aaa5f7d40ce
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtWebEngineWidgets.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..23c7dc4debd631ca353458621b6357515b251eb8
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtWebSockets.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..3b6294de38b90dbfc25f32296dd37b85fb3d25e9
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtWidgets.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..06a86ebf4d8bb9f6e097b42c7e16d812536b7d86
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtX11Extras.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..eed9b48e93df0a875c6f4fbfb4fc1dad9ef01d3e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtXml.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..684894a44af3ae15e5b9a7bc97cdc56388735c9d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py*-relwithdebinfo/lib/python2.7/site-packages/PySide2/QtXmlPatterns.*.so usr/lib/python2.7/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..3f34b03b4d73a5a5422bf667b47263c07959499e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py2*/lib/python2.7/site-packages/pyside2uic usr/lib/python2.7/dist-packages/
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..cc90239fefa5d6db05391581a8a99b4eada7bfba
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/Qt3DCore.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..400bae0b0e86bbf1617844f6e49e66fc6d68938c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/Qt3DInput.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b1976e1db62f60ed273170daa6fb1db9e6a53d5a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/Qt3DLogic.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6047dea127351388be47a2d094e3265beda034f3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/Qt3DRender.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..52255de37c4bf121cfd69463923e749c78f425d0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtCharts.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ed9eae0ab0b0636deaf502ab61859a90c65a7500
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtConcurrent.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..18bfbc7b019ee0ac88f18b10208e3eddeeb654dc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtCore.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9c8d25c3cc323174d71603bc57a3229d12d306c9
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtGui.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..8012c75bd057251e3f0c040efcdce2f7ec20236c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtHelp.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..133e850baca3a956f745d8395406278f6cdee336
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtLocation.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e100d1e354f23493437fec69ddd7011c18d35554
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtMultimedia.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..11420f9456d93c1a68f3e8d3ef9019a48487422a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtMultimediaWidgets.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..cddff5988c7481f894d8e4e052534bd29b91799c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtNetwork.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..736e241d85954e854c34587d71d2b425c27cdfde
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtOpenGL.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..2375c30db8c1e475ba3828240d653f12bb0bd548
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtPositioning.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..72eb6593aa263701d6160028f7ce199e0816d839
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtPrintSupport.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..8116b2dc086fff71b6f4397f2f588a50735524f1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtQml.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d2045b1bb543363060e2620a8c8ea87f0bf31cac
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtQuick.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..8e61233c026f5fa85aa69f1da7d63e53856a495e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtQuickWidgets.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b0b1aa5d77edb9fb58cbe9d2ac34f3e9037fad8e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtScript.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9cf3a615804aa46c87dfdcacf3e436fac328cf42
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtScriptTools.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4ac8aee5d21db035d4f321eaec3d6fb514be6b6d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtSensors.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b50b3e486b7e21968fa23e5360ce33b3a800b6d7
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtSql.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..522de6cf4e5101b720b218d79a65dd49d585ef55
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtSvg.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..bc16f74f09fbf5e7cd3e2332abd5cf32fa78bd9d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtTest.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..28fcab4d523810748e81ebdd88e92d147e993d43
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtTextToSpeech.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9bbb6db448e4d31333c669f09a8399ebed9a1089
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtUiTools.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..97ab7cfd49266d1ed1babd58c84c6a41a3e4ebda
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtWebChannel.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..efe85a235f3a73cb8c0c71bf87397539781668d5
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtWebEngineCore.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..3dbc143ac393bab693850d2e0106c49513eb6bd1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtWebEngineWidgets.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..54f3e1bf11088d3a76ef28388bd00b8e38f10f76
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtWebSockets.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ff9a2ce712c9738d2e4dc6dcc0ea3c00ebb1612c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtWidgets.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9d56ddd75ce8a2adcf11df74bbe5593a5a03a6d0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtX11Extras.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..714f2b48a8f3bf014cfbd5cff04763317397b829
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtXml.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a4b464dbb4974f2d6f821f76c091bc73a64ab9a4
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/lib/python3*/site-packages/PySide2/QtXmlPatterns.*.so usr/lib/python3/dist-packages/PySide2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d70990b302b0fa201feb243e274de33128e0db65
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py3*/lib/python3*/site-packages/pyside2uic usr/lib/python3/dist-packages/
diff --cc debian/rules
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..49364161b3be5ad997b495e511e364595ac0b7da
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,64 @@@
++#!/usr/bin/make -f
++
++include /usr/share/dpkg/pkg-info.mk
++
++# Safety measure to ensure package names match SONAMEs
++PYSIDE_MAJOR := $(shell echo $(DEB_VERSION_UPSTREAM) | cut -d. -f1-2)
++ifeq ($(shell awk '/Package:/ {print $$2}' debian/control | grep -- -$(PYSIDE_MAJOR)$$),)
++    $(error Please update package names for major version $(PYSIDE_MAJOR))
++endif
++ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
++    OPTION_JOBS = --jobs=$(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
++endif
++
++export PYBUILD_NAME=pyside2
++export PYBUILD_BUILD_ARGS=--relwithdebinfo --verbose-build --no-examples $(OPTION_JOBS)
++
++export MAIN_VERSION_UPSTREAM := $(shell echo $(DEB_VERSION_UPSTREAM))
++export DEB_BUILD_MAINT_OPTIONS = hardening=+all
++# Add CPPFLAGS to CXXFLAGS as CMake ignores CPPFLAGS by default
++CXXFLAGS+=$(CPPFLAGS)
++
++# Until https://bugreports.qt.io/browse/PYSIDE-741 is fixed
++export PYBUILD_DISABLE_python3.7=test
++
++%:
++      dh $@ --with python2,python3,sphinxdoc --buildsystem=pybuild
++
++override_dh_auto_build:
++      dh_auto_build
++      PYTHONPATH=. http_proxy='127.0.0.1:9' sphinx-build -N -bhtml docs/ build/html # HTML generator
++
++override_dh_auto_install:
++      # Don't use pybuild install process, we take over this step to
++      # split files in the way we want it. But we echo the list of files
++      # built to make it easier to update *.install files.
++      echo ">>> In pyside*_{package,install}"
++      -find pyside_package pyside*_install
++
++override_dh_makeshlibs:
++      dh_makeshlibs -VUpstream-Version
++
++override_dh_install-indep:
++      dh_install -X.doctrees
++      # drop specific Python2 or Python code in packages. Otherwise it
++      # will fail during the packages installation
++      rm -r debian/python-pyside2uic/usr/lib/python2.7/dist-packages/pyside2uic/port_v3
++      rm -r debian/python3-pyside2uic/usr/lib/python3/dist-packages/pyside2uic/port_v2
++
++override_dh_install-arch:
++      dh_install
++      # remove RUNPATH setup in shiboken2
++      chrpath -d debian/shiboken2/usr/bin/shiboken2
++      # change the library path in pkg-info/*.pc and in *.cmake files:
++      # during the build the path is setup to the build dir
++      # /build/pyside2* (required to find lib during the build) but it's
++      # not what we need
++      debian/set-paths
++
++override_dh_auto_clean:
++      dh_auto_clean
++      rm -rf pyside_package pyside?_build pyside?_install
++      rm -f sources/pyside2/doc/qtmodules/*.qdocconf sources/pyside2/doc/pyside-config.qdocconf sources/pyside2/doc/pyside.qdocconf.in
++      find . -name *.qdoconf -delete
++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..883fccca94f0ee78d9ae24986b6d149c0030e889
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,32 @@@
++#!/bin/sh
++
++# Replace build directory value by install directory value
++package="libshiboken2-dev"
++for directory in "cmake/Shiboken2-$MAIN_VERSION_UPSTREAM" "pkgconfig"; do
++        sed -i "s|build.*relwithdebinfo/lib|usr/lib/$DEB_HOST_MULTIARCH|" \
++          debian/$package/usr/lib/$DEB_HOST_MULTIARCH/$directory/*;
++        sed -i "s|build.*relwithdebinfo|usr|" \
++          debian/$package/usr/lib/$DEB_HOST_MULTIARCH/$directory/*;
++done
++
++package="libpyside2-dev"
++for directory in "pkgconfig" "cmake/PySide2-$MAIN_VERSION_UPSTREAM"; do
++        sed -i "s|build.*relwithdebinfo/lib|usr/lib/$DEB_HOST_MULTIARCH|" \
++          debian/$package/usr/lib/$DEB_HOST_MULTIARCH/$directory/*;
++        sed -i "s|build.*relwithdebinfo|usr|" \
++          debian/$package/usr/lib/$DEB_HOST_MULTIARCH/$directory/*;
++done
++
++# Set correctly the python path for pyside2 (Python2 for now)
++sed -i "s|^pythonpath=.*|pythonpath=/usr/lib/python2.7/dist-packages|" \
++    debian/libpyside2-dev/usr/lib/$DEB_HOST_MULTIARCH/pkgconfig/pyside2.pc
++
++sed -i "s|^SET(PYSIDE_PYTHONPATH.*|SET(PYSIDE_PYTHONPATH \"/usr/lib/python2.7/dist-packages\")|" \
++    debian/libpyside2-dev/usr/lib/$DEB_HOST_MULTIARCH/cmake/PySide2-$MAIN_VERSION_UPSTREAM/PySide2Config-python2.7.$DEB_HOST_MULTIARCH.cmake
++
++# Set correctly the python path for pyside2 (Python3)
++sed -i "s|^SET(PYSIDE_PYTHONPATH.*|SET(PYSIDE_PYTHONPATH \"/usr/lib/python3/dist-packages\")|" \
++    debian/libpyside2-dev/usr/lib/$DEB_HOST_MULTIARCH/cmake/PySide2-$MAIN_VERSION_UPSTREAM/PySide2Config.cpython-3*m-$DEB_HOST_MULTIARCH.cmake
++
++#sed -i "s|^SET(PYSIDE_PYTHONPATH.*|SET(PYSIDE_PYTHONPATH \"/usr/lib/python3/dist-packages\")|" \
++#    debian/libpyside2-dev/usr/lib/$DEB_HOST_MULTIARCH/cmake/PySide2-$MAIN_VERSION_UPSTREAM/PySide2Config.cpython-37m-$DEB_HOST_MULTIARCH.cmake
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..f3f45b9bd94173058969b56e21b45f5d0c83c6ab
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside_package/PySide2/docs/shiboken2 usr/share/doc
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d1d1cfc5ff5a3cec1e9a749b525f7e8170a880ba
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside2_install/py2*-relwithdebinfo/bin/shiboken2 usr/bin
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..df8e1ce8f825206221065a13d130593eac76935a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++pyside3_install/py*-relwithdebinfo/share/man/man1/shiboken2.1
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..163aaf8d82b6c54f23c45f32895dbdfdcc27b047
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++3.0 (quilt)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..cb61fa5267b6ad8b3bbc2a612754b79dae466292
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++extend-diff-ignore = "^[^/]*[.]egg-info/"
diff --cc debian/watch
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a8f0b2676db2edca0c0c808a473013fcb6de9e9a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++version=4
++https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-([\d\.]+)-src/ pyside-setup-everywhere-src-@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate