[Kde-bindings] Patches to vastly improve building smokegen/smokeqt/qyoto on Windows

Dimitar Dobrev dpldobrev at yahoo.com
Wed Dec 7 08:35:44 UTC 2011


Hi,
I'm glad you made it! Qyoto.Connect() may not be crashing because yesterday I pushed a few UnmanagedFunctionPointer attributes to the Slot functions. I haven't tested QFileDialogyet but I'm happy you no longer have a problem.
About your questions:
1) It doesn't matter where they are, when you deploy you have to copy them to your app dir anyway; that's what I personally do; it is true that it is more convenient if they are in the path but deployment is a hassle you'll have to go through anyway so you might just as well do at least some of it now;

2) As I said, it doesn't matter where they are and I didn't pay attention; however, as you mention ARCHIVE/RUNTIME, I have to tell you these were once again not accepted, you can see a message from Arno Rehn from yesterday about it; I don't intend to learn CMake any more than necessary so I'll just ask him how he thinks the problem should be solved, otherwise I'm just going to leave the CMakeLists patched on my Windows system;
3) This is an issue, "solved" by patching your generated make files, I sent a message a week or so ago about that; however, I intend this evening just to replace [DllImport("qyoto...")] with [DllImport("libqyoto...")] in the C# source files and push that, this way it will work with no changes to the CMake scripts;
4) This is just like 1) - you don't actually need them in your GAC because you'll have to deploy them anyway; however, there may be again some Windows bug in the scripts because about a week ago I built Qyoto on Mac OS X and the assemblies were actually sent to the GAC; however, I won't spare any effort on this (because of deployment, as I said).

I can also see that you are looking for trouble, and I'll give you some. :) 1 or 2 days ago I wrote to this list about a small sample using QObject.Sender() that causes a crash. So far there is no progress on it. I tried to test it on Mac OS X last night to see if it happens on a non-Windows system but it crashes for other reasons before I reach that spot (the mac apparently needs more work). So it'd be great if you tested it on Linux, because I haven't even set up the Qyoto build system on mine.

Dimitar Dobrev



________________________________
 From: Steven Boswell II <ulatekh at yahoo.com>
To: Dimitar Dobrev <dpldobrev at yahoo.com>; KDE bindings <kde-bindings at kde.org> 
Sent: Tuesday, December 6, 2011 11:38 PM
Subject: Re: [Kde-bindings] Patches to vastly improve building smokegen/smokeqt/qyoto on Windows
 

I have some good news, Dimitar -- I finally built a version of Qyoto that runs under Windows!  One pleasant surprise...the two bugs that I reported before, with QObject.Connect() crashing when methods are called directly (versus turning those methods into Q_SLOTs), and QFileDialog crashing immediately, aren't happening to me!  So now I have to beat on it more to figure out what's not working.

I see one minor item, one that I saw with the binaries you built...on startup, I get a message on the console that says "Qt: Could not initialize OLE (error 80010106)".  Google suggests it's a relatively common problem, but there's little in the way of suggesting a solution.


I still have a few build issues left, and would like your opinion on them.

1) Should the DLLs be in the bin directory or the lib directory?  I've been putting them in the bin directory, mostly so that I only have to add one directory to the system path.

2) My DLL installation line in all my cmake files looks like this:
    install(TARGETS <target-name>
        LIBRARY DESTINATION ${LIB_INSTALL_DIR}
        ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
        RUNTIME DESTINATION bin)
and for all the targets, except the one for "qyoto" in qyoto/CMakeLists.txt, this installs the DLL in the bin directory.  But libqyoto.dll ends up in the lib directory.  I'm not sure why.

3) When I launch my C# app, it crashes and says it can't find the "qyoto" DLL.  I solved that by renaming libqyoto.dll to qyoto.dll, which was unexpected.  I'm not sure how to resolve this properly.

4) I assume that assemblygen is the program that converts the assembly DLLs into the magic-named format that goes in C:\Windows\assembly\GAC?  Because right now the assembly DLLs end up in the lib directory, and thus aren't automatically found by MonoDevelop's assembly browser -- I have to import them.

If anyone can help with these issues, then I will be able to submit a final set of patches, and hopefully get them submitted to the git repositories.

Steven Boswell



________________________________
 From: Dimitar Dobrev <dpldobrev at yahoo.com>
To: Steven Boswell II <ulatekh at yahoo.com>; KDE bindings <kde-bindings at kde.org> 
Sent: Tuesday, December 6, 2011 9:54 AM
Subject: Re: [Kde-bindings] Patches to vastly improve building smokegen/smokeqt/qyoto on Windows
 

Yep, there is - CMAKE_SHARED_LIBRARY_SUFFIX. I attached a patch that uses it and works fine on Windows, if you can test it on Linux, I'll recommend it for application.



________________________________
 From: Dimitar Dobrev <dpldobrev at yahoo.com>
To: Steven Boswell II <ulatekh at yahoo.com>; KDE bindings <kde-bindings at kde.org> 
Sent: Tuesday, December 6, 2011 6:36 PM
Subject: Re: [Kde-bindings] Patches to vastly improve building smokegen/smokeqt/qyoto on Windows
 

Here you go: the ARCHIVE/RUNTIME DESTINATION applied to all assemblygen/assemblies. There are more changes on my machine but I cannot mail them as they are not cross-platform. One type of change is that the generated libs are named *.so in the CMake lists while the compiled files are *.dll-s. I noticed you used a CMAKE_EXECUTABLE_SUFFIX for smokegen. There may be a CMAKE_LIBRARY_SUFFIX (or something) which has the same function for libraries.



________________________________
 From: Steven Boswell II <ulatekh at yahoo.com>
To: Dimitar Dobrev <dpldobrev at yahoo.com>; KDE bindings for other programming languages <kde-bindings at kde.org> 
Sent: Tuesday, December 6, 2011 4:20 PM
Subject: Re: [Kde-bindings] Patches to vastly improve building smokegen/smokeqt/qyoto on Windows
 

Don't call yourself lazy -- you've done a lot to get me started on this project.  This is called "teamwork"! :-)


They should take the parts for ARCHIVE/RUNTIME DESTINATION -- they didn't have any apparent effect on Linux.  I could go double-check that, if they're worried about it, but I compared the Linux builds before/after my patch, just to be paranoid.

I'd appreciate a pre-release of any Windows-related patches you have.  I'll be happy to test them on my end.

My next goal is to figure out how to debug unmanaged code under Windows, so that I can track down problems in Qyoto.  It looks possible with Visual Studio, but I'm hoping for an open-source solution.

Steven Boswell



________________________________
 From: Dimitar Dobrev <dpldobrev at yahoo.com>
To: Steven Boswell II <ulatekh at yahoo.com>; KDE bindings for other programming languages <kde-bindings at kde.org> 
Sent: Tuesday, December 6, 2011 1:39 AM
Subject: Re: [Kde-bindings] Patches to vastly improve building smokegen/smokeqt/qyoto on Windows
 

Great work! These actually contain some of the issues I didn't post workarounds for, for example the searching for "smokegen" while the file is named "smokegen.exe". It's good you compensated for my laziness. :)
I hope they take the parts for "ARCHIVE DESTINATION and RUNTIME DESTINATION". They do work and I had prepared such for smokegen. It was not accepted, though, because its validity on non-Windows system was doubted even though I actually read about it on a Linux-related mailing list, and I didn't have the time to check that AS WELL. Now that you tested it on Linux both yours and mine should be admitted. Once this happens, I'll send a patch for all CMakeLists in assemlygen/assemblies/qyoto-*/native.



________________________________
 From: Steven Boswell II <ulatekh at yahoo.com>
To: "kde-bindings at kde.org" <kde-bindings at kde.org> 
Sent: Tuesday, December 6, 2011 5:22 AM
Subject: [Kde-bindings] Patches to vastly improve building smokegen/smokeqt/qyoto on Windows
 

A few days ago, I reported a massive number of weird build issues that I ran into while trying to compile smokegen, smokeqt, and qyoto for Windows.  Most of them could be solved by someone that knows CMake.  I finally learned about CMake over the weekend...it was a lot less nasty than I was expecting.  I guess autoconf has traumatized me. :-)

Anyway, I found what I would consider to be proper solutions to the vast majority of the build problems I ran into!  Enclosed is an archive with three patches, one for each project, against the latest state of the public git repositories.  Here's what they do:

smokegen:
Adds CMAKE_EXECUTABLE_SUFFIX to the end of SMOKE_GEN_BIN and SMOKE_API_BIN, so that the installed SmokeConfig.cmake will have proper paths to the executables.
Put quotes around several references to path variables, so that spaces can appear in the installation path.
Added ARCHIVE DESTINATION and RUNTIME DESTINATION to the install line of cppparser.  (No apparent effect under Linux.)

smokeqt:
Put quotes around the reference to SMOKE_CMAKE_MODULE_DIR, so that spaces can appear in the installation path.

qyoto:
Modified paths to C# sources under Windows, changing forward-slashes to backward-slashes.  (Apparently, Microsoft's C# compiler can't handle forward slashes.)
When looking for the C# compiler, if the environment variable CSC refers to the 2.0 compiler, don't use it.  (The Qyoto C# files use .NET 3.0 features.)
If CMakeDetermineCSharpCompiler.cmake has to look for a Microsoft compiler, use the 3.5 version.
Don't compile QtDBus-related items unless the related library was found (i.e. only if SMOKE_QTDBUS_LIBRARY is defined).
Added ARCHIVE DESTINATION to the install line of qtscript-sharp, qttest-sharp, qtuitools-sharp, and qtwebkit-sharp.
Changed the external definition of Qyoto_handlers[] in src/qyoto.cpp from Q_DECL_IMPORT to Q_DECL_EXPORT, to match the way it's declared elsewhere.
Define QDESIGNER_UILIB_LIBRARY when compiling uics for Win32, to get rid of a ton of linker errors.

I know that no one has time to help Dimitar and I port Qyoto to Windows, but at the very least, could you look over these changes and consider them for inclusion in the public git repository?  I'll send a push request if that would make things easier for you.

Steven Boswell

_______________________________________________
Kde-bindings mailing list
Kde-bindings at kde.org
https://mail.kde.org/mailman/listinfo/kde-bindings
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-bindings/attachments/20111207/93ba2e07/attachment-0001.html>


More information about the Kde-bindings mailing list