Opened 14 years ago

Closed 14 years ago

#107 closed enhancement (fixed)

Provide WPI archives for runtime and development bundles

Reported by: Dmitry A. Kuminov Owned by:
Priority: blocker Milestone: Qt GA
Component: General Version: 4.5.1 Beta 3
Severity: low Keywords:
Cc:

Description

Now, after we implemented the portability feature for the binary builds (#78), we may create WPI archives of the runtime distribution and the development distribution of the Qt library. This will greatly simplify the life for end-users and for developers wishing to create/port Qt applications on OS/2.

Change History (16)

comment:1 Changed 14 years ago by Dmitry A. Kuminov

I put this to Beta 5 since it really makes sense to provide the WPIs for this beta.

comment:2 Changed 14 years ago by Dmitry A. Kuminov

Note that as opposed to Qt3, we export all Qt4 classes by name rather than by ordinal. As a consequence, this slightly increases the DLL size and the application startup time (ordinal lookup is faster than name lookup) but on the other hand this provides better compatibility with applications built for other Qt4 versions with no extra effort from our side (provided, that the classes are not renamed and the binary class layout is not changed, older applications will work well with newer DLLs).

In Qt3, we achieved this sort of binary compatibility by maintaining a map file that mapped function names to ordinals. This file was used when generating a new DLL to make sure that previously assigned ordinals will not be occupied by the new symbols even if the old symbols corresponding to those ordinals go away. I'm not sure we should take this approach for Qt4 as this requires special maintenance of this map file and most computers are fast enough these days anyway to make the described load delays insignificant.

comment:3 Changed 14 years ago by Silvan Scherrer

i agree with that. if we find out that too many users complain about it we might consider to add the map file aproach

comment:4 Changed 14 years ago by Dmitry A. Kuminov

I introduced the following new qmake variables recognized on OS/2: DEF_FILE_VERSION, DEF_FILE_DESCRIPTION and DEF_FILE_VENDOR. When generating DLLs, these variables are used to compose the DESCRIPTION statement in the .DEF file according to the IBM signature rules:

DESCRIPTION '@#vendor:version#@ description'

If not set explicitly, they default as follows, for compatibility with qmake variables recognized by Win32:

  • DEF_FILE_VERSION is set to VERSION
  • DEF_FILE_DESCRIPTION is set to a combination of QMAKE_TARGET_PRODUCT, QMAKE_TARGET_DESCRIPTION and QMAKE_TARGET_COPYRIGHT
  • DEF_FILE_VENDOR is set to QMAKE_TARGET_COMPANY

Note that for all Qt4 DLLs, when generating the official netlabs.org binary build, I set DEF_FILE_VENDOR to netlabs.org instead (because Nokia doesn't actually provide OS/2 binaries) still retaining Nokia copyright in the DESCRIPTION field. Otherwise, it defaults to the value of the USER environment variable (or to anonymous if it is not set). This may be later used to distinguish official builds from non-official ones.

The version field for Qt4 DLLs will look like this:

X.Y.Z-rREV_os2-g++

where X, Y and Z are major, minor and patch Qt version numbers and REV is the SVN revision the build is made from.

comment:5 Changed 14 years ago by Dmitry A. Kuminov

This all is too fragile and takes ages. Every small change requires many hours of testing. I don't think that I will be ready with WPIs today.

comment:6 Changed 14 years ago by Dmitry A. Kuminov

Okay, yet another stupidity similar to what I fixed in r170 that broke the final pre-release build! I don't know what to do this time.

comment:7 Changed 14 years ago by Dmitry A. Kuminov

All in all, this turned to be quite time consuming task. I only created the Qt Runtime archive so far. Anyway, I release Beta 5 now. Both the runtime WPI and the source ZIP are available for downloading from the main page.

The rest (the development WPI will be done a bit later, so I'm setting the milestone to GA. Later, I will also provide all the scripts necessary to create Qt WPI archives. I'm really exhausted now.

comment:8 Changed 14 years ago by Dmitry A. Kuminov

Milestone: Qt Beta 5Qt GA

comment:9 Changed 14 years ago by Dmitry A. Kuminov

Priority: majorblocker

comment:10 Changed 14 years ago by Dmitry A. Kuminov

Created the "dev" package (available from the wiki page). Please test.

The remaining thing is the "examples" package + put all the scripts to create WPIs to SVN.

comment:11 Changed 14 years ago by Dmitry A. Kuminov

I've just packed the examples bundle and put a link to the main page. You have to try to build the demo package :)

comment:12 Changed 14 years ago by Silvan Scherrer

Severity: low

comment:13 Changed 14 years ago by Dmitry A. Kuminov

Okay, great! The nightly final build of Qt GA failed due to a weird error complaining that some temporary object file is not an a.out format. Just restarting the build made it run normally so I have no good idea on what happened and how to prevent it. It will take a f*ing while to build again so I'm not sure I will release GA today.

comment:14 Changed 14 years ago by Dmitry A. Kuminov

The error was reported by the emxomf tool. It looks that for some reason g++ generated a wrong or incomplete a.out file out of an assembler file (generated from the c++ source) and emxomf failed to convert it to the OMF object format. Maybe it was some memory allocation problem or a failure to write to the temporary file.

comment:15 Changed 14 years ago by Dmitry A. Kuminov

Oops, qmime.h includes private/qpmobjectwindow_pm_h which is very bad as it is a private header that is not officially available and not provided with the development package. I will have to temporarily include it into the distribution...

comment:16 Changed 14 years ago by Dmitry A. Kuminov

Resolution: fixed
Status: newclosed

Ugggghhhhh. I really worked hard on packaging these days (also fixed a bunch of various bugs I found along the way). But I hope WPIs are really nice now and it will greatly help us in the future.

Committed the packaging scripts in r544. The process is almost fully automatic (see the README) and it may even run unattended if necessary (I wish I would have spare server to do automatic non-stop builds).

Cooking packages is a real pain, slow, and you have to rebuild every little bit after every little change. I think that building the packages once a week will have a great impact on preparing the final release since it will reveal problems early.

Important thing to note is that the examples archive now contains all executables pre-built, which makes it really easy to install and play with Qt or just study it's possibilities. I hope that it is also a good demonstration of the results of our work.

The next thing to for packaging is alternative ZIP archives for every WPI. I'm pretty sure there are people that will complain otherwise. This is for another defect though; closing this one.

P.S. Haven't slept since yesterday morning and didn't have good food since yesterday evening so I'll probably disappear shortly until tomorrow evening.

Note: See TracTickets for help on using tickets.