Monday, July 30, 2012

Nano editor for windows

There are 2 binary versions of nano (gnu Pico), a replacement for vim. The one on the gnu nano site is built with Cygwin, and comes with several Cygwin dlls. The other is built with MinGW, and has many syntax files, which is truly cool.
Both have great color, and are nearly identical. But have the same issues, when called from a shell, (1) window can't be resized, and (2) after closing nano it erases whatever was in the shell previously, and leaves behind some garbage. Vim doesn't do this, and nano doesn't either on Linux.
I tried to compile it myself with mingw32, but there are several patches which you can find online, so I gave up and tried a different approach. I made q small bash script that is s windows START command to open a new shell with a preset size. It works for editing, but doesn't work with Git.

Monday, July 23, 2012

pretty Github ribbon

Github ribbons have moved. See this blog post on Github. Update your templates today! Also, note that the <img ...> in their sample code needs to be closed with either </img> or a slash included at the end of the <img ... />.


For example:
<a href="https://github.com/you"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_left_red_aa0000.png" alt="Fork me on GitHub"/></a>
Note the / right at the end. Or ...
<a href="https://github.com/you"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_left_red_aa0000.png" alt="Fork me on GitHub"></img></a>
Note the </img> at the end.

Quote unquote bad windows path

This issue: Bug 677470; PyGTK command prompt script missing quotation marks, stumped me, which isn't that hard I guess. Point is don't ever put quotes in the windows PATH environment variable.

Wednesday, July 18, 2012

building dbus-python on windows with mingw

dbus-python Build Instructions for Windows (x86) with MinGW

Revision history

  1. r0.0.20120706 - First draft
  2. r0.1.20120718 - Clean up markdown and post to poquitopicante.blogspot.com
  3. r1.0.20120720 - Use autolauch
    • Need --with-dbus-session-bus-default-address=autolaunch: for dbus to work out-of-the-box and to keep dbus-python from throwing exception.
    • Also If using git repo, use ./autogen.sh instead of ./configure. Make sure you have autotools installed in your MinGW toolchain.
  4. r1.1.20120723 - Correct GTK path
    • Remove dbus-glib examples Makefile patch; it's not needed if path to GTK runtime bin is correct, i.e.: no quotes in MS-Windows paths!
    • This was not an issue with dbus-binding-tool.exe, #52322 in bugzilla. There are no problems for dbus-glib to create binding "glue" when in glib-server mode if path to GTK bin folder is correctly.
    • setenv.cmd has an issue in which the quotation marks are in the wrong place, causing the quotes to be copied into the path, which is a big no-no in MS-Windows, because it causes inconsistent results. E.g. dbus-binding-tool.exe could be built, but not run.

Overview

These are instructions for building dbus-python, a binding to dbus on a MS-Windows x86 system using MinGW.

Set up MinGW build environment

  1. Download and install most recent version of mingw-get-inst from sourceforge, current version is 20120426. This only needs to be done once because afterwards you can just run ...
    $ mingw-get update
    $ mingw-get install mingw-get
    
    ... to get the latest version. During the install, which is an Inno-Setup GUI, select the option to install the "C compiler" and "MSYS Basic System" but leave other default install options. It should install MinGW in C:\mingw and MSYS in C:\mingw\msys\1.0. It doesn't change your path or add any environmental variables, but it does add a shortcut to the MSYS bash shell on your desktop and start menu, and register mingw-get-inst so you can un-install it later. There is lots of rich material on MinGW and MSYS on the Internet. Also take a look at Configuring and Using mingw-get.
  2. Start the MSYS shell, from the start menu, and install (or update) the developers toolkit. If you need to upgrade a component, use mingw-get upgrade <component>.
    $ mingw-get update
    $ mingw-get install gcc
    $ mingw-get install g++
    $ mingw-get install msys-make
    $ mingw-get install mingw32-make
    $ mingw-get install mingw-developer-toolkit
    
  3. While still in the MSYS shell, install expat.
    $ mingw-get install expat
    $ mingw-get install libexpat
    $ mingw-get install msys-expat
    $ mingw-get install msys-libexpat
    
  4. You also need libz and zlib.
    $ mingw-get install libz
    $ mingw-get install zlib
    $ mingw-get install msys-zlib
    
  5. You may also need or want the following:
    • GNU patch, wget, tar, libxml2 and possibly others (libxslt and libffi). If possible install them from MinGW/MSYS with mingw-get. Use mingw-get list <package> to search for packages.
      $ mingw-get install msys-patch
      $ mingw-get install msys-wget
      $ mingw-get install msys-tar
      $ mingw-get install msys-libxml2
      
    • lib2xml and libxslt are also available from xmlsoft as windows binaries. If use them, copy the files into the matching folders in /local, e.g. bin files go in /local/bin.
    • zlib is also available from zlib, there are links to binaries, but it is easy to build by following the directions on Fragrant Memories, however, the generated library zlib1.dll may conflict with your Intel Wifi controller or something else. The MinGW/MSYS libraries are libz-1.dll and msys-z.dll. The files zlib1.dll, libexpat-1.dll and libxml2-2.dll may actually already be in your GTK runtime bin folder.
      $ which zlib1.dll /c/Program Files/Intel/WiFi/bin/zlib1.dll
    • libffi is available here and on Github and installation instructions are here.

Python

Download and install Python (2.7.3) with the Python Windows Installer.

PyGTK or GTK+

  1. Download and install either the PyGTK all-in-one installer for your Python version (e.g. 2.7) or the GTK-2.0 all-in-one installer. If you're determined to build GLib from source see this post on Bootstrapping GLIB with MinGW.
  2. Fix the setenv.bat by either removing the quotes entirely from the SET PATH statements, or correcting them as in the patch below.
    --- a/python27/lib/site-packages/gtk-2.0/runtime/bin/setenv.cmd
    +++ b/python27/lib/site-packages/gtk-2.0/runtime/bin/setenv.cmd
    @@ -23,14 +23,14 @@
     call:abspath PYTHON_PKGCONFIG "%PYTHON_ROOT%\Lib\pkgconfig\"
    
     if defined PATH (
    -    set PATH="%PYTHON_ROOT%;%PYTHON_SCRIPTS%;%RUNTIME_BIN%;%PATH%"
    +    set "PATH=%PYTHON_ROOT%;%PYTHON_SCRIPTS%;%RUNTIME_BIN%;%PATH%"
     ) else (
    -    set PATH="%PYTHON_ROOT%;%PYTHON_SCRIPTS%;%RUNTIME_BIN%"
    +    set "PATH=%PYTHON_ROOT%;%PYTHON_SCRIPTS%;%RUNTIME_BIN%"
     )
     if defined PKG_CONFIG_PATH (
    -    set PKG_CONFIG_PATH="%PYTHON_PKGCONFIG%;%RUNTIME_PKGCONFIG%;%PKGCONFIG_PATH%"
    +    set "PKG_CONFIG_PATH=%PYTHON_PKGCONFIG%;%RUNTIME_PKGCONFIG%;%PKGCONFIG_PATH%"
     ) else (
    -    set PKG_CONFIG_PATH="%PYTHON_PKGCONFIG%;%RUNTIME_PKGCONFIG%"
    +    set "PKG_CONFIG_PATH=%PYTHON_PKGCONFIG%;%RUNTIME_PKGCONFIG%"
     )
    
     cls
    
  3. After correcting the setenv.cmd script as above, make a GTK bash shell environment by copying the MSYS/MinGW shell icon on the desktop (or making a shortcut to c:\mingw\msys\1.0\msys.bat) , right-clicking, selecting Properties, editing the Target: to be C:\WINDOWS\system32\cmd.exe /C ""C:\Python27\Lib\site-packages\gtk-2.0\runtime\bin\setenv.cmd"&&"C:\MinGW\msys\1.0\msys.bat" and renaming it to GTK MinGW shell. If the icon gets screwed up, select Properties again, Change Icon and point it to the same location as the original MSYS/MinGW shell shortcut's icon path. Note you will still have to point PKG_CONFIG to the GTK runtime pkgconfig.exe and add both /usr/local/lib/pkgconfig, /mingw/lib/pkgconfig and /usr/lib/pkgconfig to your PKG_CONFIG_PATH in your ./configure commands, but this should add all of the other GTK and PKG_CONFIG paths and environmental variables you'll need, especially for dbus-glib. An alternative is to simply add the GTK runtime to the path of your bash shell by editing (or creating) your ~/.bashrc file.
    $ export GTK_BASEPATH="/c/Python27/Lib/site-packages/gtk-2.0/runtime/"
    $ export PATH=$GTK_BASEPATH/bin:$PATH
    
    Another alternative is to start the PyGTK/GTK Command Prompt which executes setenv.cmd, creating several environmental variables in that shell such as PYTHON_ROOT, PYTHON_PKGCONFIG, RUNTIME_PKGCONFIG, PKG_CONFIG_PATH and RUNTIME_BIN, thereby making sure that your GTK environment is correctly configured. Then type c:\mingw\msys\1.0\msys.bat to start a MSYS/MinGW shell which will also set up your MinGW/MSYS environment. Note: you may have already added GTK to your path during installation, depending on what options you selected.
    The library libgio-2.0-0.dll and other binaries are used by dbus-binding-tool.exe and others, so you will need to use this shell, or make the GTK runtime bin folder available, whenever you wan to use dbus-glib.

Build DBus

  1. Download the tarball or clone the git repository a folder in C:\, e.g. C:\DBus. Note: If you clone the repo, then instead of ./configure you will need to use ./autogen.sh which requires autotools. Use mingw-get to install autoconf, automake, m4 and libtool for both MSYS and MinGW. Also you may want to checkout the latest stable tag into your own private branch git checkout -b <myBranch> dbus-1.6.4.
    $ mingw-get install autoconf
    $ mingw-get install automake
    $ mingw-get install libtool
    $ mingw-get install msys-autoconf
    $ mingw-get install msys-automake
    $ mingw-get install msys-m4
    $ mingw-get install msys-libtool
    
  2. Apply the MemoryBarrier macro patch. The location of this patch is debatable, and there have been some mailing list posts, tickets, forks and suggeted patches [1, 2, 3, 4, 5, 6, 7, 8]. I applied it to dbus\dbus-sysdeps-win.c which is where the macro is used. I also added a prototype in the header so that gcc won't warn me about it. I have no idea whether this works as intended, or even what the intent was, so use it at your own risk. It is identical to the macro used by mingw-w64 in winnt.h. The other options are to get rid of the MemoryBarrier() call or use a different compiler such as MSVC or MinGW-w64.

    MemoryBarrier.patch for dbus-sysdeps-win.c

    --- a/dbus/dbus-sysdeps-win.c
    +++ b/dbus/dbus-sysdeps-win.c
    @@ -54,6 +54,13 @@
     #include <windows.h>
     #include <ws2tcpip.h>
     #include <wincrypt.h>
    +
    +__CRT_INLINE VOID MemoryBarrier(VOID)
    +{
    +  LONG Barrier = 0;
    +  __asm__ __volatile__("xchgl %%eax,%0 "
    +    :"=r" (Barrier));
    +}
    
     /* Declarations missing in mingw's headers */
     extern BOOL WINAPI ConvertStringSidToSidA (LPCSTR  StringSid, PSID *Sid);
    

    MemoryBarrierHeader.patch for dbus-sysdeps-win.h

    --- a/dbus/dbus-sysdeps-win.h
    +++ b/dbus/dbus-sysdeps-win.h
    @@ -38,6 +38,8 @@
    
     #define DBUS_CONSOLE_DIR "/var/run/console/"
    
    +
    +void MemoryBarrier(void);
    
     void _dbus_win_set_errno (int err);
     const char* _dbus_win_error_from_last_error (void);
    
    You can use git apply --ignore-space-change --ignore-whitespace <path/to/MemoryBarrier.patch> followed by commit -am "<your message>" or patch <path/to/dbus-sysdeps-win.c> <path/to/MemoryBarrier.patch> if you are using the tarball.
  3. configure, make and install
    $ ./configure --with-dbus-session-bus-default-address=autolaunch: PYTHON=/c/Python27/python PYTHON_INCLUDES=-I/c/Python27/include/ PYTHON_LIBS='-L/c/Python27/Lib -lpython27' PKG_CONFIG=/c/Python27/Lib/site-packages/gtk-2.0/runtime/bin/pkg-config.exe PKG_CONFIG_PATH=/c/Python27/Lib/pkgconfig:/c/Python27/Lib/site-packages/gtk-2.0/runtime/lib/pkgconfig:/c/mingw/msys/1.0/local/lib/pkgconfig:/c/mingw/msys/1.0/lib/pkgconfig:/c/mingw/lib/pkgconfig am_cv_python_pythondir='${prefix}/Lib/site-packages' am_cv_python_pyexecdir='${exec_prefix}/Lib/site-packages'
    $ make
    $ make install
    
  4. Check that it works by opening a daemon, and monitoring it using two MSYS shells.

    MSYS shell with daemon

    $ dbus-daemon --session
    

    MSYS shell with monitor

    $ dbus-monitor
    signal sender=org.freedesktop.DBus -> dest=:1.0 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired   string ":1.0"
    method call sender=:1.0 -> dest=org.freedesktop.DBus serial=3 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='method_call'"
    method call sender=:1.0 -> dest=org.freedesktop.DBus serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='method_return'"
    method call sender=:1.0 -> dest=org.freedesktop.DBus serial=5 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='error'"
    
    You should see dbus-daemon and dbus-monitor as processes in ms-windows task manager. Use ctrl-c to kill the processes in each MSYS window.

Buld dbus-glib

  1. Download the tarball or clone the git repository on your hardrive, e.g. c:\dbus-glib. If you are using the git repo, checkout the latest tag into your own branch, and then use ./autogen.sh instead of ./configure. Also you may need to add --disable-gtk-doc as a configure option. I did not, but I used the tarball.
  2. confgure, make and install
    $ ./configure PYTHON=/c/Python27/python PYTHON_INCLUDES=-I/c/Python27/include/ PYTHON_LIBS='-L/c/Python27/Lib -lpython27' PKG_CONFIG=/c/Python27/Lib/site-packages/gtk-2.0/runtime/bin/pkg-config.exe PKG_CONFIG_PATH=/c/Python27/Lib/pkgconfig:/c/Python27/Lib/site-packages/gtk-2.0/runtime/lib/pkgconfig:/c/mingw/msys/1.0/local/lib/pkgconfig:/c/mingw/msys/1.0/lib/pkgconfig:/c/mingw/lib/pkgconfig am_cv_python_pythondir='${prefix}/Lib/site-packages' am_cv_python_pyexecdir='${exec_prefix}/Lib/site-packages'
    $ make
    $ make install
    

Build dbus-python, finally!

  1. Download the wip-windows tarball or clone the git repository and checkout 2012-07-04 branch on your hardrive, e.g. c:\dbus-python. Again, if using Git, you should use ./autogen.sh instead of ./configure, with the same arguments.
  2. configure, make and install
    $ ./configure PYTHON=/c/Python27/python PYTHON_INCLUDES=-I/c/Python27/include/ PYTHON_LIBS='-L/c/Python27/Lib -lpython27' PKG_CONFIG=/c/Python27/Lib/site-packages/gtk-2.0/runtime/bin/pkg-config.exe PKG_CONFIG_PATH=/c/Python27/Lib/pkgconfig:/c/Python27/Lib/site-packages/gtk-2.0/runtime/lib/pkgconfig:/c/mingw/msys/1.0/local/lib/pkgconfig:/c/mingw/msys/1.0/lib/pkgconfig:/c/mingw/lib/pkgconfig am_cv_python_pythondir='${prefix}/Lib/site-packages' am_cv_python_pyexecdir='${exec_prefix}/Lib/site-packages'
    
  3. Check that it works by starting Python by adding your MSYS environment site-packages folder to your Python path, starting Python and import dbus.
    $ export PYTHONPATH="c:\\mingw\\msys\\1.0\\local\\lib\\site-packages"
    $ python
    Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import dbus
    >>> session_bus = dbus.SessionBus()
    
  4. You now have a working dbus-python module. Yay!

Links

  1. https://bitbucket.org/bradpitcher/mingw-cross-env/src/5f91fb4e0199/src/dbus-1-fixes.patch
  2. https://sourceforge.net/tracker/?func=detail&atid=102435&aid=3420424&group_id=2435
  3. http://msdn.microsoft.com/en-us/library/ms684208%28VS.85%29.aspx
  4. https://bugs.freedesktop.org/show_bug.cgi?id=41423
  5. https://sourceforge.net/mailarchive/message.php?msg_id=24260705
  6. http://lists.gnu.org/archive/html/mingw-cross-env-list/2011-09/msg00033.html
  7. https://github.com/mxe/mxe/commit/d51ad53b664859b38c3cee61f18c4e8e8810fcef
  8. https://bitbucket.org/vog/mingw-cross-env/changeset/8bfc6d601bb1
This zip file contains an install script, patches, generated binaries, libraries and doc files.

Do not use it for evil.

Generated using markdown_py 2.2.0

Geany in Windows

Updated 2012-07-20

Geany, a lightweight IDE for Java, Python, C/C++ and other computer languages, is available for MS-Windows. You can install it with or without the GTK libraries, which is a nice option, if you already have either GTK+ or PyGTK installed. But, and there's always a "but" isn't there, the executable and shortcuts won't work because they will require GTK to be part of your  MS-Windows PATH, which it probably won't be. Honestly, I can't remember if I was given an option to add GTK to the PATH during install, but it's not on my PATH now. Conveniently, though, GTK was nice enough to add a batch file that starts a shell with their environmental variables preset, such as adding <path to GTK runtime>\bin to %PATH%. You need to fix setenv.cmd first, though. See this post. So, to get the Geany shortcuts to run, all you need to do is edit the "Target:" field to include the nice batch file from GTK. Right click on the Geany shortcut and select properties. On my machine I typed ...
C:\WINDOWS\system32\cmd.exe /C ""C:\Python27\Lib\site-packages\gtk-2.0\runtime\bin\setenv.cmd"&&"C:\Program Files\Geany\bin\Geany.exe""
... into the "Target:" field since I have PyGTK which installs the GTK binaries in the Python directory.

BTW: %COMSPEC% is usually a shortcut for "C:\WINDOWS\system32\cmd.exe" and %PROGRAMFILES% does the same for "C:\Program Files, so you could also use this.
%COMSPEC% /C ""C:\Python27\Lib\site-packages\gtk-2.0\runtime\bin\setenv.cmd"&&" %PROGRAMFILES% \Geany\bin\Geany.exe""
(Update 2012-07-20) One more place you will have to make this change is to your explorer shell. Now if you are uncomfortable with changes to your registry, then you should backup your entire registry before doing this. From the start menu type regedit, and the registry editor opens. Click file and export and select the All radio button to backup the entire registry. Now go to each of the following keys:
HKEY_CLASSES_ROOT\Geany.ProjectFile\Shell\open\command
HKEY_CLASSES_ROOT\*\Shell\OpenWithGeany\command
and change the value to include the GTK setenv batch file.
C:\WINDOWS\system32\cmd.exe /C ""C:\Python27\Lib\site-packages\gtk-2.0\runtime\bin\setenv.cmd"&&"C:\Program Files\Geany\bin\Geany.exe" "%1""
Alternately you can copy the text below and import the keys using import under the file menu option in regedit, or from a command line, type REG IMPORT <filename.reg> where filename is a file saved with the keys below. Or use REGEDIT <filename.reg>. Also you can just double click on the file and it will automatically import your keys, or right-click on them and select merge. Note you must be an administrator to import these keys. Also note that quotes and backslashes in the value must be "escaped" with a backslash, and then the entire value should be enclosed in quotes.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Geany.ProjectFile\Shell\open\command]@="C:\\WINDOWS\\system32\\cmd.exe /C \"\"C:\\Python27\\Lib\\site-packages\\gtk-2.0\\runtime\\bin\\setenv.cmd\"&&\"C:\\Program Files\\Geany\\bin\\Geany.exe\" \"%1\"\""
[HKEY_CLASSES_ROOT\*\Shell\OpenWithGeany\command]@="C:\\WINDOWS\\system32\\cmd.exe /C \"\"C:\\Python27\\Lib\\site-packages\\gtk-2.0\\runtime\\bin\\setenv.cmd\"&&\"C:\\Program Files\\Geany\\bin\\Geany.exe\" \"%1\"\""
If you have the standalone version of GTK, you may not have the convenient setenv.cmd file, so here are the settings that it gives you. Of course you could just add your GTK bin folder to your MS-Windows PATH, but maybe there was a reason you didn't do that when you installed GTK. Hm, maybe there's some conflict? A .dll namesake lurking around somewhere? If you choose the option I present here, you'll have to do this everywhere you have a shortcut, or just create a shortcut or batch file once in the Geany bin folder and point all your shortcuts to that.
set RUNTIME_BIN="<the bin file that has libglib-2.0.0.dll, a bunch of .exe's and .dll's>" set RUNTIME_PKGCONFIG="%RUNTIME_BIN%\..\lib\pkgconfig\"
set PYTHON_ROOT="<where ever your python directory is>"
set PYTHON_SCRIPTS="%PYTHON_ROOT%\Scripts\"
set PYTHON_PKGCONFIG="%PYTHON_ROOT%\Lib\pkgconfig\"
set PATH="%PYTHON_ROOT%;%PYTHON_SCRIPTS%;%RUNTIME_BIN%;%PATH%"
set PKG_CONFIG_PATH="%PYTHON_PKGCONFIG%;%RUNTIME_PKGCONFIG%;%PKGCONFIG_PATH%"
Taa-daa!



Sadly, one thing you'll miss is the terminal screen, if you are used to the Linux version.

Tuesday, July 3, 2012

Google redirect virus

I visited regexbuddy and regextester, then eew, every Google search leads to blank page. I think regextester was the culprit. Quick search (on my phone) yielded numerous hits - suggested solution is malware scan.

Sunday, July 1, 2012

Setting up eclipse with web platform tools and other plugins on Windows and Ubuntu

This is easy.Use the Java EE and IDE version of eclipse on the windows machine

On Ubuntu, use the Ubuntu Software Center repository and install every "eclipse-" option, but not the source or sdk, unless you need it. Some of the plugins on Ubuntu include the CDT4 package (C/C++) , the xml package, datatools, modeling and EGit/JGit. Although, you may choose to install Egit/Jgit from eclipse instead, so that you can stay current with the most recent updates.


Then use the following p2 repos to install the WTP and PyDev plugin.
http://download.eclipse.org/webtools/repository/indigo/ for WTP, don't install incubation projects.
http://pydev.org/updates for pydev, but unclick the box that allows it to look for updates from other urls, because this will screw up your installation. See this post.

See this post about updating your eclipse installation on Ubuntu. Basically, if you installed it from the Ubuntu Software Center, then do not update it from eclipse. So be explicit about exactly what you choose to update by selecting its p2 repo url. you can update packages the same way you install them; eclipse will say that it's changing an installation to an update, because of the obvious.

Do *Not* Update eclipse installed from Ubuntu Software Center

This will completely screw up your eclipse installation. All of your plugins will be there, but not working.

[UPDATE 2013-03-05] If you are determined to update your eclipse installation from within eclipse, or if you just want to separate your eclipse installation from the Ubuntu software repository, then you should consider installing eclipse on Ubuntu as add-on software. Trust me, in general you will be much happier!

git checkout a new branch with a tag

[UPDATED 1/23/2013] I am a moron.

    git checkout <tag-name> -b <tag-name>

Git told me to name the branch after I typed in git checkout <tag-name>. Smarty pants. If you've already checkout the tag it says you are in a detached HEAD state, use git co -b <new-branch-name> which could have been combined with the checkout. Hence the command above. QED

Eclipse available software windows is blank

Completely empty!

Probably a corrupt .metadata file. Make a mental note of your workspace settings, then delete the .metadata file and restart the workspace. Now set up your preferences the way you had them before if you want to.

PyDev internal error "loading bundles"

This was caused by some bad updates that were installed. Uninstall PyDev and reinstall it, but unclick the use all websites to find updates radio button. This is what they say on the PyDev issues forum somewhere, I'll look for the link.


Note, this isn't my image, but mine was nearly the same.

Building DBus for Windows XP with MinGW

Background

I was trying to contribute to Meld, a great diff/merge tool. On Linux, Meld has great version control (VC) integration, which is convenient, because if you run git difftool from the terminal, git locks the terminal until you are done. Great for merges.

So I cloned the meld repository, but the master branch no uses dbus, so that if you do a diff and Meld is already open, it will just add a new tab to the current instance of Meld, instead of starting a new one. Unfortunately there is no nicely packaged windows installer for dbus or dbus-python, so I started on the murky compile and build quest. Obviously without the module, import dbus fails.

Building DBus using MinGW32 (aka MinGW)

This was nearly an exercise in futility. Unfortunately (or fortunately) I didn't read the fine print on the DBus [link] page on Windows porting, that says that it has been successfully ported using MinGW-w64 which, who knew?, is different from MinGW. How is it different? Who knows? I haven't tried MinGW-w64 yet, so I'll let you know when I do. Familiar always seems better, but I will reserve judgement until some later date. One thing I like about MinGW is `mingw-get` which is kind of like `apt-get` or `yum` and makes is super easy to add packages from either MSYS or MinGW.

Step 1: MinGW

Download and install mingw-get-inst. Then install the basic packages: make, msys-make, gcc, g++. Then make sure you download  expat, msys-expat, libexpat, msys-libexpat, which are used during the build process. You'll probably also want the mingw-developers-toolkit which has autoconf/make, libtools, etc.

Step 1.5: GTK

download and install either pyGTK, GTK-2.0 all-in-one installers for windows, or get the glib tarball and see this to bootstrap glib.
http://www.mingw.org/wiki/Bootstrapping_GLIB_with_MinGW

Step 1.75: Doxygen

For kicks install doxygen for really nice help documents.

Step 2: DBus

Download the latest dbus tarball and extract it to your c:\ folder. This is important because in general spaces cause issues, and if you need to add it to your path, it will have the shortest possible length, which is nice.

Step 2.5: add MemoryBarrier macro

Patch the "dbus/dbus-sysdeps-win.c" file at the top right after the "#includes" and "#defines" with the following snippet:

__CRT_INLINE VOID MemoryBarrier(VOID)
{
  LONG Barrier = 0;
  __asm__ __volatile__("xchgl %%eax,%0 "
    :"=r" (Barrier));
}

Step 3: configure, make and install

Read the INSTALL text file in the extracted folder. The build, make & installation process is the same for almost all Linux/Unix packages packaged using GNU autotools. There is a copy of pkg-config.exe in your GTK distribution. Otherwise you can try to build it, but it depends on glib, which depends on it - sort of a catch-22.

    $ ./configure PKG_CONFIG=/c/Python27/Lib/site-packages/gtk-2.0/runtime/bin/pkg-config.exe PYTHON=/c/Python27/python
    $ make
    $ make install

Step 4: check that it works

This test is the same as for building dbus with cmake, except that you don't need to copy the libexpat.dll to dbus bin folder, because mingw/msys/autotools does a better job of helping dbus find this file.
Open two msys shells, and start a dbus-daemon in the first shell using the default session configuration, but output the address to a file. Unfortunately, unless you enabled verbose output during the build with the flag -DDBUS_VERBOSE, you can't add it now. You could try make uninstall, make clean, make distclean and start over again, if you really need to debug dbus.

msys shell #1

$ dbus-daemon --session --print-address > /home/dbus.txt

msys shell #2

$ export DBUS_SESSION_BUS_ADDRESS="<paste from dbus.txt, don't forget quotes>"
$ dbus-monitor --address $DBUS_SESSION_BUS_ADDRESS

signal sender=org.freedesktop.DBus -> dest=:1.0 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired   string ":1.0"
method call sender=:1.0 -> dest=org.freedesktop.DBus serial=3 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='method_call'"
method call sender=:1.0 -> dest=org.freedesktop.DBus serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='method_return'"
method call sender=:1.0 -> dest=org.freedesktop.DBus serial=5 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='error'"
If you see this, "yay!" it works, I think...

EGit can't decrypt AES passwords for ssh

look for the most current Orbits bundle p2 repository, then update to the latest version of JSch. Another option is to set the GIT_SSH variable to your openSSH client. See SO and other links.

python.m4 macro not for windows mingw32

This might not be a problem for you, but for a n00b like me, it's no fun.

python.m4 is part of automake-1.10. The issue is that if python is installed using windows binaries, then the mingw msys shell command:

    $ `$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')"

or

    $`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))"

returns ${prefix}\Lib\site-packages which in the msys shell turns into ${prefix}Libsite-packages which is nonsense.

My patch for it was to add use replace() to the command, i.e.: sysconfig.get_python_lib().replace('\\\\\','/'), to convert the windows backslash to a posix forward slash. I couldn't figure out how to fix this in the automake python.m4 macro, but I don't think it matters, since automake is really only used for Linux/Unix.

build and install dbus with cmake, msvc and nmake

Here are the directions for building dbus using the cmake folder and Microsoft Visual Studio C++ (MSVC).
  1. Install MSVC of your choice, e.g.: 2008 Express (MSVC90) or  2010 Express (MSVC100), then get all updates and service packs.
  2. Download and install CMake (2.8.8). I'll list the software versions I used in parentheses.
  3. Download and install Expat (2.1.0)
  4. Download and install doxygen (1.8.1.1)
  5. Download and install NullSoft (2.46)
  6. Download and extract dbus (1.6.2) to folder with no spaces, e.g.: c:\dbus-1.6.2-msvc90
  7. Start CMake gui from start menu
  8. Enter the path to your source, e.g.: "C:\dbus-1.6.2-msvc90\cmake"
  9. Make a folder called, "build" in the same folder and enter it as the build directory, e.g.:  "C:\dbus-1.6.2-msvc90\cmake\build"
  10. add the following variables using the "Add Entry" button. The format I use here is NAME:TYPE=value, which is the how cmake expects it at the command line, but in the gui you just fill in the boxes.
    • LIBEXPAT_LIBRARIES:FILEPATH="C:\Program Files\Expat 2.1.0\Bin\libexpat.lib"
    • LIBEXPAT_INCLUDE_DIR:PATH="C:\Program Files\Expat 2.1.0\Source\lib"
  11. (UPDATED - 2012-07-17)  Optional: Edit CMakeLists.txt so that the default session address is autolaunch: instead of the nonce-tcp:, see the "D-Bus Windows help" thread in the mailing list.
    • DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="autolaunch:"
  12. Click Configure, select either MSVC90 (Visual Studio 2008) or MSVC100 (Visual Studio 2010), then generate.
  13. close CMake and start MSVC from the start menu.
  14. Load the dbus.sln from the build folder you created in step 8.
  15. Select configuration manager from build pull down in menu bar, and select doc, INSTALL and PACKAGE.
  16. Build the solution.
  17. Make sure that all projects built successfully.
  18. If there are any errors clean the the solution, quit and go back to step 1.
  19. Use the configuration manager to change from Debug to Release, and build the solution again.
  20. (UPDATED - 2012-07-03) Copy the libexpat.dll to the dbus bin folder ("C:\Program Files\dbus\bin") and the libexpat.lib file to the dbus lib folder, otherwise you will get an error saying that dbus-daemon can't find expat application and that re-installing expat might fix the problem. Setting the PATH to include expat does not fix this issue, sorry. Not sure if dbus also needs library but it can't hurt.
  21. (UPDATED - 2012-07-03) Test the daemon using a windows command shell, navigate to the dbus bin folder and try dbus-daemon --session --print-address > dbus_address.txt (or whatever), and then open dbus_address select and copy the address. Note for added excitement, set DBUS_VERBOSE=1 first, and the dbus-daemon will display everything that it's thinking in the terminal, which gives you the sense that it's actually working!
  22. $ cd "C:\Program Files\dbus\bin"
    $ set DBUS_VERBOSE=1
    $ dbus-daemon --session --print-address > dbus_address.txt

  23. (UPDATED - 2012-07-03) Open another windows shell, navigate to the dbus bin folder again and set DBUS_SESSION_BUS_ADDRESS="<paste the address from the dbus_address.txt file here>". Don't forget the quotes, or you;'ll get a string of errors. (Note: if you edited the CMakeLists.txt file in the optional step 11, then you can just use dbus-monitor, and it should work out of the box.) Now type dbus-monitor --address %DBUS_SESSION_BUS_ADDRESS% and you should see the following text in the monitor shell (and a ton of stuff if you enabled verbose in the daemon shell):
  24. $ cd "C:\Program Files\dbus\bin"
    $ set DBUS_SESSION_BUS_ADDRESS="<paste from dbus_address.text, don't forget quotes>
    $ dbus-monitor --address %DBUS_SESSION_BUS_ADDRESS%
    signal sender=org.freedesktop.DBus -> dest=:1.0 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired   string ":1.0"
    method call sender=:1.0 -> dest=org.freedesktop.DBus serial=3 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='method_call'"
    method call sender=:1.0 -> dest=org.freedesktop.DBus serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='method_return'"
    method call sender=:1.0 -> dest=org.freedesktop.DBus serial=5 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch   string "eavesdrop=true,type='error'"

Done!

Now try using nmake.

from the start menu start msvc command prompt
add cmake to the path by typing the following:
    $ set PATH="C:\Program Files\Cmake-2.8.0\bin";%PATH%
change the folder where you extracted dbus, e.g. C:\dbus-1.6.0 and make a new folder called build
    $ cd C:\dbus-1.6.0
    $ mkdir build
    $ cd build
Run cmake with the following options
    $ cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE=Release -D LIBEXPAT_LIBRARIES:FILEPATH="C:\Program Files\Expat 2.1.0\Bin\libexpat.lib" -D LIBEXPAT_INCLUDE_DIR:PATH="C:\Program Files\Expat 2.1.0\Source\lib" "C:\dbus-1.6.0\cmake"
Now build the solution
    $ nmake /A
then finally ...
    $ nmake install
I think you can build the package this way too ...
    $ nmake package
Fork me on GitHub