Trac is being migrated to new services! Issues can be found in our new
YouTrack instance and WIKI pages can be found on our
website.
- Timestamp:
-
Aug 6, 2007, 3:32:49 AM (17 years ago)
- Author:
-
John Bailey
- Comment:
-
update to help people being bitten by G_GNUC_NULL_TERMINATED
Legend:
- Unmodified
- Added
- Removed
- Modified
-
v6
|
v7
|
|
25 | 25 | The command above for Debian systems will install only the build dependencies of Pidgin, Finch, and libpurple. The command shown for Fedora will install all of those, as well as the development headers for libpurple, Finch, and Pidgin. |
26 | 26 | |
27 | | Once you have installed these dependencies, download a source tarball. You will want to use the source tarball that matches the version of Pidgin you are running, as it's generally a good idea to compile against the same version you run your plugins with. |
| 27 | Once you have installed these dependencies, download a source tarball. You will want to use the source tarball that matches the version of Pidgin you are running, as it's generally a good idea to compile against the same version you run your plugins with. You can, however, safely build a plugin against Pidgin 2.0.0 and run it with any Pidgin version 2.x.y. |
28 | 28 | |
29 | 29 | For the purposes of this How-To, we will assume the following: |
… |
… |
|
254 | 254 | Now that we have a complete plugin source file, we need to compile it. From `~/development/pidgin-2.0.2/libpurple/plugins`, run `make helloworld.so` (if using Windows, `make -f Makefile.mingw helloworld.dll`). If you copied and pasted the code correctly, this should compile without incident. You can move the resulting .so file to `~/.purple/plugins` (move the resulting .dll file to `%APPDATA%\.purple\plugins` on Windows). Now when you open the Plugins dialog in Pidgin or Finch, the plugin should show up. When you load it you should see a message pop up. |
255 | 255 | |
| 256 | == Having Trouble Compiling? == |
| 257 | ''Note that this section has been added after the initial completion of this document and as such may break continuity with the preceeding sections and the closing section. Apologies if this makes the document harder to understand.'' |
| 258 | |
| 259 | If you're having trouble compiling and the error messages being spit out reference `G_GNUC_NULL_TERMINATED`, you are compiling against Pidgin and libpurple version 2.1.0 or newer. In that case, add the following code to your helloworld.c file ''after'' the `#include <glib.h>` directive: |
| 260 | {{{ |
| 261 | #!c |
| 262 | #ifndef G_GNUC_NULL_TERMINATED |
| 263 | # if __GNUC__ >= 4 |
| 264 | # define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) |
| 265 | # else |
| 266 | # define G_GNUC_NULL_TERMINATED |
| 267 | # endif /* __GNUC__ >= 4 */ |
| 268 | #endif /* G_GNUC_NULL_TERMINATED */ |
| 269 | }}} |
| 270 | |
| 271 | This section of preprocessor code is only needed if you're building against version 2.1.0 or newer. There were some additions to some function prototypes in libpurple to add GCC 4.x's NULL sentinel attribute. This will cause issues on many platforms, including Windows, if the version of GLib in use is rather old (2.6.x or older). There is an additional wrinkle to the problem in that only GCC 4.x have this function attribute, so the workaround is a more complex set of preprocessor directives than we'd like. |
| 272 | |
| 273 | In libpurple we have fixed this internally, and this fix is technically available to plugins built within the Pidgin source tree. It is not used here, however, because no third-party plugins are able to use this internal fix, and the point of this series of How-To documents is to help budding third-party plugin developers. These developers will need to include the fix themselves. |
| 274 | |
| 275 | If you run into this issue in the future installments of this How-To document series, this same snippet of preprocessor code can be added to the later example plugins in the same place. It should yield the same effect there as it did here. |
| 276 | |
256 | 277 | == Going Beyond Hello, World! == |
257 | 278 | Consider C Plugins 101 complete. We have more to get to in this tutorial series. See the other documents listed on the [wiki:CHowTo C Plugin How-To]. |
All information, including names and email addresses, entered onto this website or sent to mailing lists affiliated with this website will be public. Do not post confidential information, especially passwords!