Tag Archives: OSS

Cellphone sync and linux

I once had a cellphone that played very nicely with Linux, the good old Siemens S55. Unfortunately, my SE P1i doesn’t. I tried various combinations of Multisync or OpenSync, nothing helped. Today I bit the bullet and installed funambol with syncevolution. What shall I say, apart from having to run a ~250Meg Java Application server just for me, it simply works. Period.

And thanks to Blueman, this works with Bluetooth now, too (Via PAN of course, not OBEX).

The new automake meme

Apparently a small meme has spread in the gnome community, the non-recursive automake meme.

Well, rewriting the makefiles for rygel to use the new Vala support in automake-1.11 I also converted it to be non-recursive.

This is what I got:

  • Parallel builds working (but this seems to be more the work of the Vala support)
  • Cleaner Makefiles, less code duplication
  • No possibility to call “make install” for a single plugin only
  • No to very minor speed gain

All in all, this seems less improvement than expected, but the cleanliness of the Makefile.am is worth the minor inconveniences generated by that, though it still needs some more cleanup and flags unification.

Trekstor Vibez & Jaunty

If you use one of the famous beta firmwares for your Trekstor vibez and have jaunty installed, you may experience some weird behaviour if you plugin in your player and hope that a folder pops up showing you your device’s contents.

If you configured your device’s transfer mode to “Mass Storage only” it is likely that the device will not show up and crash on shutdown at the “Saving Settings” screen with a bold “Saving”.

Reason is: in /etc/udev/rules.d/45-libmtp7.rules this device’s USB id is hard-wired to be an MTP device. Just comment the two lines with {idVendor}=="066f" and everything is fine again.

On the other hand the MTP transfer mode seems to work quite well now.

Eternal struggle

My current task is evaluation crypto (here: OpenPGP) solutions for Microsoft Windows; of course including GnuPG.

Well, what do I say. While there is a nice installer for GnuPG on Windows available (either here or here), try to find one for the gpgme supporting library… (including header and .lib import files for Visual Studio, that is).

You can guess… It’s all about build-your-own-stuff. It basically boils down to this:

Preparations

  • Create a directory to collect all the stuff you will need (e.g. C:\gpgme with bin, include and lib sub folders)
  • Get mingw and install it
  • Get MSYS and install it
  • Download libgpg-error and extract it
  • Download gpgme and extract it

Compiling libgpg-error

  • In the MSYS bash, change to the directory you extracted libgpg-error into and run ./configure --prefix=/mingw && make install
  • Call strip src/.libs/libgpg-error-0.dll src/gpg-error.exe as MSVC can’t use gcc’s debug info anyway
  • Copy src/gpg-error.exe and src/.libs/libgpg-error-0.dll to the bin directory created above
  • Copy src/.libs/libgpg-error-0.dll.def to lib/libgpg-error-0.def (note the renaming; otherwise your program will look for a libgpg-error-0.dll.dll)
  • Open the Visual Studio Command Prompt
  • Call lib /machine:i386 /def:lib\libgpg-error-0.def /out:lib\libgpg-error-0.lib to create the import library
  • Copy include/gpg-error.h to include

Compiling gpgme

  • In the MSYS bash, run ./configure --prefix=/mingw && make
  • Call strip src/gpgme-w32spawn.exe src/.libs/libgpgme-11.dll
  • Copy src/gpgme-w32spawn.exe to bin Note: To use the gpgme library, this binary has to live either in the installation dir of gpg (set in windows registry key HKLM\Software\GNU\GnuPG\Installation Directory) or in %PROGRAMFILES%\GNU\GnuPG. Otherwise gpgme will not work!
  • Copy src/.libs/libgpgme-11.dll to bin and src/.libs/libgpgme-11.dll.def to lib/libgpgme-11.def (Once again, note the renaming)
  • Call lib /machine:i386 /def:lib\libgpgme-11.def /out:lib\libgpgme-11.lib to create the import library
  • Copy include/gpgme.h to include

Optional: Creating the documentation

I was not able to create the documentation properly using cygwin so I did this on a Linux host. Install a TeX distribution of your choice as well as texinfo (for Debian Lenny this would mean installing the packages texinfo, texi2html and texlive). Call make pdf in the doc subdir to generate the PDF documentation and manually call texi2html gpgme.texi for a HTML document.

Summary

Now you can add the lib dir to your Visual Studio linker settings and the include dir to your C/C++ common settings. To make gpgme work, be sure you have the gpgme-w32spawn.exe installed properly as noted above.

I hope this helps to guide one or another through the struggle of getting gpgme on windows.

Q&A

  • Q: gpgme does not find libgpg-error

    A: You did not call make install after compiling it

  • Q: My program is looking for {libgpg-error-0.dll.dll|libgpgme-11.dll.dll}

    A: You did not rename the .def file before calling lib.exe

  • Q: I did everything you said, but when I run my program, gpgme_engine_check_version(GPGME_PROTOCOL_OpenPGP) fails with GPG_ERR_INV_ENGINE. If I check the engine info, info->version is empty

    A: First of all, check if you copied gpgme-w32spawn.exe to the correct directory. If this is the case, actually, I have no idea what went wrong