Re: Qt5's libtool link scripts are unusable

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: Qt5's libtool link scripts are unusable

Stuart Henderson
Thanks for the report,

On 2019/06/20 17:30, Vadim Penzin wrote:
> I admit that I am not familiar with the release process of pre-built binary
> packages; I might be writing to a wrong mailing list and I apologize in
> advance.

ports@ is the better list for this, I've CC'd and set reply-to.

> All libtool scripts from qt5 (/usr/local/lib/qt5/*.la) contain the following
> on their third line:
>
>   LIBQt5XXX_VERSION=5.9# The name that we can dlopen(3).
>
> (XXX above stands for the name of a particular library, such as Core,
> Network, etc.)
>
> Since shell scripts (that libtool generates) source .la files, sh(1) fails
> on unexpected '(' because someone, somewhere omitted a space before the
> comment.
>
> Patching /usr/local/lib/qt5/*.la files programmatically by tucking a space
> before the hash character brings linking with Qt5 assisted (encumbered?) by
> libtool back to life.
>
> --Vadim
>

This patch to the qtbase port should fix the problem at source (I'll leave
it building and test later). However it will also require REVISION bumps
on all ports including .la files produced by this.

Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/qt5/qtbase/Makefile,v
retrieving revision 1.29
diff -u -p -w -u -r1.29 Makefile
--- Makefile 20 May 2019 22:15:29 -0000 1.29
+++ Makefile 20 Jun 2019 15:43:00 -0000
@@ -15,13 +15,13 @@ PKGNAME-global = qt5-global-${VERSION}
 PKGNAME-psql = qt5-postgresql-${VERSION}
 PKGNAME-sqlite2 = qt5-sqlite2-${VERSION}
 PKGNAME-tds = qt5-tds-${VERSION}
+
 REVISION-global =       0
+REVISION-main = 5
 REVISION-mysql = 0
 REVISION-psql = 0
 REVISION-sqlite2 = 0
 REVISION-tds = 0
-
-REVISION-main = 4
 
 PKG_ARCH-global = *
 PKG_ARCH-examples = *
Index: patches/patch-qmake_generators_unix_unixmake2_cpp
===================================================================
RCS file: /cvs/ports/x11/qt5/qtbase/patches/patch-qmake_generators_unix_unixmake2_cpp,v
retrieving revision 1.3
diff -u -p -w -u -r1.3 patch-qmake_generators_unix_unixmake2_cpp
--- patches/patch-qmake_generators_unix_unixmake2_cpp 5 Jul 2018 09:49:13 -0000 1.3
+++ patches/patch-qmake_generators_unix_unixmake2_cpp 20 Jun 2019 15:43:00 -0000
@@ -136,13 +136,14 @@ Index: qmake/generators/unix/unixmake2.c
          } else if (!project->isEmpty("QMAKE_AIX_SHLIB")) {
              project->values("TARGET_").append(project->first("QMAKE_PREFIX_STATICLIB") + project->first("TARGET")
                      + "." + project->first("QMAKE_EXTENSION_STATICLIB"));
-@@ -1465,18 +1498,32 @@ UnixMakefileGenerator::writeLibtoolFile()
+@@ -1465,18 +1498,33 @@ UnixMakefileGenerator::writeLibtoolFile()
        << QT_VERSION_STR << ")";
      t << "\n";
 
 +    if (!project->isEmpty("QMAKE_OPENBSD_SHLIB"))
 +      t << "LIB" << fileVar("QMAKE_ORIG_TARGET") << "_VERSION="
-+        << project->first("VER_MAJ") << "." << project->first("VER_MIN");
++        << project->first("VER_MAJ") << "." << project->first("VER_MIN")
++        << "\n";
 +
      t << "# The name that we can dlopen(3).\n"
 -      << "dlname='" << fileVar(project->isActiveConfig("plugin") ? "TARGET" : "TARGET_x")

Reply | Threaded
Open this post in threaded view
|

Re: Qt5's libtool link scripts are unusable

Rafael Sadowski
On Thu Jun 20, 2019 at 04:46:59PM +0100, Stuart Henderson wrote:

> Thanks for the report,
>
> On 2019/06/20 17:30, Vadim Penzin wrote:
> > I admit that I am not familiar with the release process of pre-built binary
> > packages; I might be writing to a wrong mailing list and I apologize in
> > advance.
>
> ports@ is the better list for this, I've CC'd and set reply-to.
>
> > All libtool scripts from qt5 (/usr/local/lib/qt5/*.la) contain the following
> > on their third line:
> >
> >   LIBQt5XXX_VERSION=5.9# The name that we can dlopen(3).
> >
> > (XXX above stands for the name of a particular library, such as Core,
> > Network, etc.)
> >
> > Since shell scripts (that libtool generates) source .la files, sh(1) fails
> > on unexpected '(' because someone, somewhere omitted a space before the
> > comment.
> >
> > Patching /usr/local/lib/qt5/*.la files programmatically by tucking a space
> > before the hash character brings linking with Qt5 assisted (encumbered?) by
> > libtool back to life.
> >
> > --Vadim
> >
>
> This patch to the qtbase port should fix the problem at source (I'll leave
> it building and test later). However it will also require REVISION bumps
> on all ports including .la files produced by this.
>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/x11/qt5/qtbase/Makefile,v
> retrieving revision 1.29
> diff -u -p -w -u -r1.29 Makefile
> --- Makefile 20 May 2019 22:15:29 -0000 1.29
> +++ Makefile 20 Jun 2019 15:43:00 -0000
> @@ -15,13 +15,13 @@ PKGNAME-global = qt5-global-${VERSION}
>  PKGNAME-psql = qt5-postgresql-${VERSION}
>  PKGNAME-sqlite2 = qt5-sqlite2-${VERSION}
>  PKGNAME-tds = qt5-tds-${VERSION}
> +
>  REVISION-global =       0
> +REVISION-main = 5
>  REVISION-mysql = 0
>  REVISION-psql = 0
>  REVISION-sqlite2 = 0
>  REVISION-tds = 0
> -
> -REVISION-main = 4
>  
>  PKG_ARCH-global = *
>  PKG_ARCH-examples = *
> Index: patches/patch-qmake_generators_unix_unixmake2_cpp
> ===================================================================
> RCS file: /cvs/ports/x11/qt5/qtbase/patches/patch-qmake_generators_unix_unixmake2_cpp,v
> retrieving revision 1.3
> diff -u -p -w -u -r1.3 patch-qmake_generators_unix_unixmake2_cpp
> --- patches/patch-qmake_generators_unix_unixmake2_cpp 5 Jul 2018 09:49:13 -0000 1.3
> +++ patches/patch-qmake_generators_unix_unixmake2_cpp 20 Jun 2019 15:43:00 -0000
> @@ -136,13 +136,14 @@ Index: qmake/generators/unix/unixmake2.c
>           } else if (!project->isEmpty("QMAKE_AIX_SHLIB")) {
>               project->values("TARGET_").append(project->first("QMAKE_PREFIX_STATICLIB") + project->first("TARGET")
>                       + "." + project->first("QMAKE_EXTENSION_STATICLIB"));
> -@@ -1465,18 +1498,32 @@ UnixMakefileGenerator::writeLibtoolFile()
> +@@ -1465,18 +1498,33 @@ UnixMakefileGenerator::writeLibtoolFile()
>         << QT_VERSION_STR << ")";
>       t << "\n";
>  
>  +    if (!project->isEmpty("QMAKE_OPENBSD_SHLIB"))
>  +      t << "LIB" << fileVar("QMAKE_ORIG_TARGET") << "_VERSION="
> -+        << project->first("VER_MAJ") << "." << project->first("VER_MIN");
> ++        << project->first("VER_MAJ") << "." << project->first("VER_MIN")
> ++        << "\n";

This's what Qt 5.13 doas. They use "<< endl;" instead of "<< "\n";", I
would like to prefer that. std::endl calls std::flush which synchronizes
with the underlying storage device.

RS

>  +
>       t << "# The name that we can dlopen(3).\n"
>  -      << "dlname='" << fileVar(project->isActiveConfig("plugin") ? "TARGET" : "TARGET_x")
>

Reply | Threaded
Open this post in threaded view
|

Re: Qt5's libtool link scripts are unusable

Stuart Henderson-6
On 2019/06/21 16:45, Marc Espie wrote:

> On Thu, Jun 20, 2019 at 09:41:23PM +0200, Rafael Sadowski wrote:
> > This's what Qt 5.13 doas. They use "<< endl;" instead of "<< "\n";", I
> > would like to prefer that. std::endl calls std::flush which synchronizes
> > with the underlying storage device.
> >
> > RS
>
>
> I agree with using endl if that's what Qt 5.13 does.
>
> But it's one specific case where you really do not give a fuck about
> flushing.  After all you are generating a Makefile. Who cares about
> synchronizing after each single line ?

I just used the same as the other nearby lines in the file, for the code
that's there now it's irrelevant as none of the other lines use endl.