Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt WebKit
  4. Linux: build Qt WebKit against a specific version of ICU?
Forum Updated to NodeBB v4.3 + New Features

Linux: build Qt WebKit against a specific version of ICU?

Scheduled Pinned Locked Moved Solved Qt WebKit
12 Posts 2 Posters 7.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    Konstantin Tokarev
    wrote on last edited by
    #3

    It should be quite painful to distribute 2 copies of ICU because you need to distribute 2 copies of data bundles as well. Unfortunately Qt SDK does not provide any way to build against its copy of ICU, but still there is a workaround

    1. Install (from sources or some binary packages, does not matter) the same ICU version as used in SDK. For example, if in SDK you see libicuuc.so.56.1, you should get ICU 56.1

    2. Build QtWebKit against this ICU installation. By default QtWebKit uses pkg-config to find ICU, so you can override system ICU with your newly installed ICU by pointing PKG_CONFIG_PATH variable to location of icu-i18n.pc from your ICU installation (e.g. $prefix/lib/pkg-config)

    A 1 Reply Last reply
    0
    • A Offline
      A Offline
      agarny
      wrote on last edited by
      #4

      Thanks Konstantin, I will give your suggestion a try when I get a chance. (I agree, it's not 'neat' to ship two different copies of ICU, but at least it works for now.)

      1 Reply Last reply
      0
      • K Konstantin Tokarev

        It should be quite painful to distribute 2 copies of ICU because you need to distribute 2 copies of data bundles as well. Unfortunately Qt SDK does not provide any way to build against its copy of ICU, but still there is a workaround

        1. Install (from sources or some binary packages, does not matter) the same ICU version as used in SDK. For example, if in SDK you see libicuuc.so.56.1, you should get ICU 56.1

        2. Build QtWebKit against this ICU installation. By default QtWebKit uses pkg-config to find ICU, so you can override system ICU with your newly installed ICU by pointing PKG_CONFIG_PATH variable to location of icu-i18n.pc from your ICU installation (e.g. $prefix/lib/pkg-config)

        A Offline
        A Offline
        agarny
        wrote on last edited by agarny
        #5

        @Konstantin-Tokarev, I have just given your suggestion a try, but I am clearly missing something. Indeed, here is what I did (keeping in mind that I am using Qt 5.6.1 LTS):

        • I retrieved ICU 56.1's source code from http://site.icu-project.org/download and built it as follows:
          • $ cd [ICU]
            $ mkdir build
            $ cd build
            $ ../source/runConfigureICU Linux --prefix=[ICU]/install
            $ make
            $ make install
            
        • From there, I retrieved Qt WebKit's source code from http://download.qt.io/community_releases/5.6/5.6.1 and built it as follows:
          • $ cd [QtWebKit]
            $ PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig qmake
            $ make
            

        At this stage, I thought my copy of Qt WebKit would refer to ICU 56.1, but if I check Qt WebKit's dependencies, I can see that it's still referring my system's ICU (!!):

        • $ ldd [QtWebKit]/lib/libQt5WebKit.so.5.6.1 | grep libicu
                  libicui18n.so.52 => /usr/lib/x86_64-linux-gnu/libicui18n.so.52 (0x00007fba553e7000)
                  libicuuc.so.52 => /usr/lib/x86_64-linux-gnu/libicuuc.so.52 (0x00007fba5506e000)
                  libicudata.so.52 => /usr/lib/x86_64-linux-gnu/libicudata.so.52 (0x00007fba50077000)
          

        Clearly, I am missing something, but what is it?...

        1 Reply Last reply
        0
        • A Offline
          A Offline
          agarny
          wrote on last edited by
          #6

          Ok, I have got it to work (yeah!). Basically, rather than building Qt WebKit using:

          $ cd [QtWebKit]
          $ PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig qmake
          $ make
          

          I had to build it using:

          $ cd [QtWebKit]
          $ export PATH=[ICU]/install/bin:$PATH
          $ export LD_LIBRARY_PATH=[ICU]/install/lib:$LD_LIBRARY_PATH
          $ export PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig:$PKG_CONFIG_PATH
          $ qmake
          $ make
          

          I would have thought that setting PKG_CONFIG_PATH would have been enough, but clearly not!

          1 Reply Last reply
          0
          • K Offline
            K Offline
            Konstantin Tokarev
            wrote on last edited by
            #7

            Looks like it's deficiency of ICU *.pc files, which don't provide appropriate -L flags with library path when non-default prefix is used

            A 1 Reply Last reply
            0
            • K Konstantin Tokarev

              Looks like it's deficiency of ICU *.pc files, which don't provide appropriate -L flags with library path when non-default prefix is used

              A Offline
              A Offline
              agarny
              wrote on last edited by
              #8

              Actually, my bad, we don't need to export a new PATH and LD_LIBRARY_PATH in addition to exporting a new PKG_CONFIG_PATH. In the end, we only need to export a new PKG_CONFIG_PATH.

              However, it would seem that not only qmake needs to know about PKG_CONFIG_PATH, but also make (??), hence exporting PKG_CONFIG_PATH rather than setting it as I originally did using:

              $ PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig qmake
              

              In conclusion, I am now able to build QtWebKit by simply using:

              $ cd [QtWebKit]
              $ export PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig:$PKG_CONFIG_PATH
              $ qmake
              $ make
              
              K 1 Reply Last reply
              0
              • A agarny

                Actually, my bad, we don't need to export a new PATH and LD_LIBRARY_PATH in addition to exporting a new PKG_CONFIG_PATH. In the end, we only need to export a new PKG_CONFIG_PATH.

                However, it would seem that not only qmake needs to know about PKG_CONFIG_PATH, but also make (??), hence exporting PKG_CONFIG_PATH rather than setting it as I originally did using:

                $ PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig qmake
                

                In conclusion, I am now able to build QtWebKit by simply using:

                $ cd [QtWebKit]
                $ export PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig:$PKG_CONFIG_PATH
                $ qmake
                $ make
                
                K Offline
                K Offline
                Konstantin Tokarev
                wrote on last edited by
                #9

                @agarny No, I don't see any calls to pkg-config in generated Makefiles, so PKG_CONFIG_PATH should not have an effect on make

                A 1 Reply Last reply
                0
                • K Konstantin Tokarev

                  @agarny No, I don't see any calls to pkg-config in generated Makefiles, so PKG_CONFIG_PATH should not have an effect on make

                  A Offline
                  A Offline
                  agarny
                  wrote on last edited by
                  #10

                  @Konstantin-Tokarev, I appreciate what you are saying, hence my "??" in relation to make above.

                  Still, and just to be 100% sure, I have just rebuilt Qt WebKit using:

                  $ cd [QtWebKit]
                  $ PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig qmake
                  $ make
                  

                  and sure enough, the resulting libraries don't work (they refer to the system version of ICU, i.e. version 52.1) while everything works fine (i.e. the libraries refer to version 56.1 of ICU) when building Qt WebKit using:

                  $ cd [QtWebKit]
                  $ export PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig:$PKG_CONFIG_PATH
                  $ qmake
                  $ make
                  

                  Anyway, the latter works fine and, at this stage, this is what matters to me, evenb though I don't understand why I need to export a new PKG_CONFIG_PATH rather than modify it 'inline'...

                  K 1 Reply Last reply
                  0
                  • A agarny

                    @Konstantin-Tokarev, I appreciate what you are saying, hence my "??" in relation to make above.

                    Still, and just to be 100% sure, I have just rebuilt Qt WebKit using:

                    $ cd [QtWebKit]
                    $ PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig qmake
                    $ make
                    

                    and sure enough, the resulting libraries don't work (they refer to the system version of ICU, i.e. version 52.1) while everything works fine (i.e. the libraries refer to version 56.1 of ICU) when building Qt WebKit using:

                    $ cd [QtWebKit]
                    $ export PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig:$PKG_CONFIG_PATH
                    $ qmake
                    $ make
                    

                    Anyway, the latter works fine and, at this stage, this is what matters to me, evenb though I don't understand why I need to export a new PKG_CONFIG_PATH rather than modify it 'inline'...

                    K Offline
                    K Offline
                    Konstantin Tokarev
                    wrote on last edited by
                    #11

                    @agarny Ah, unless you run qmake with "-r" option it is recursively called in subdirs in make time

                    A 1 Reply Last reply
                    0
                    • K Konstantin Tokarev

                      @agarny Ah, unless you run qmake with "-r" option it is recursively called in subdirs in make time

                      A Offline
                      A Offline
                      agarny
                      wrote on last edited by
                      #12

                      Well, I have just given it a try, i.e.

                      $ cd [QtWebKit]
                      $ PKG_CONFIG_PATH=[ICU]/install/lib/pkgconfig qmake -r
                      $ make
                      

                      First, I got the following at the end of the call to qmake:

                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WTF/WTF.pro
                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/JavaScriptCore/JavaScriptCore.pro
                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/ThirdParty/ANGLE/ANGLE.pro
                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/ThirdParty/leveldb/leveldb.pro
                       Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/ThirdParty/leveldb/Target.pri
                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebCore/WebCore.pro
                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit/WebKit1.pro
                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit2/WebKit2.pro
                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/QtWebKit.pro
                       Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/api.pri
                       Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/widgetsapi.pri
                       Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit2/WebProcess.pro
                       Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit2/PluginProcess.pro
                       Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit/qt/declarative/declarative.pro
                        Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit/qt/declarative/public.pri
                        Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit/qt/declarative/experimental/experimental.pri
                       Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit/qt/examples/examples.pro
                        Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WebKit/qt/examples/platformplugin/platformplugin.pro
                      WARNING: DESTDIR: Cannot access directory '/opt/Qt/5.6/gcc_64/plugins/webkit'
                      Reading /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Tools/Tools.pro
                      

                      Then, when building Qt WebKit, I eventually got:

                      /usr/bin/ld: warning: libicui18n.so.56, needed by /opt/Qt/5.6/gcc_64/lib/libQt5Core.so, may conflict with libicui18n.so.52
                      /usr/bin/ld: /home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/WTF//.obj/wtf/unicode/icu/CollatorICU.o: undefined reference to symbol 'ucol_setAttribute_56'
                      /opt/Qt/5.6/gcc_64/lib/libicui18n.so.56: error adding symbols: DSO missing from command line
                      collect2: error: ld returned 1 exit status
                      make[2]: *** [../../bin/jsc] Error 1
                      make[2]: Leaving directory `/home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/JavaScriptCore'
                      make[1]: *** [sub-jsc-pro-make_first-ordered] Error 2
                      make[1]: Leaving directory `/home/alan/Desktop/qtwebkit-opensource-src-5.6.1/Source/JavaScriptCore'
                      make: *** [sub-Source-JavaScriptCore-JavaScriptCore-pro-make_first-ordered] Error 2
                      

                      Well, needless to say that I am calling it a day. :) In the end, I have got a working solution, so I am 'happy' to accept that I don't and might never understand why I need to export a new PKG_CONFIG_PATH rather than modify it 'inline'...

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved