The Document Foundation Planet


June 24, 2016

Michael Meeks

2016-06-24 Friday.

  • Out for a run before school with J. On Brexit - I voted in, so disappointed, but interested to see what the result will be; presumably not an Irish style neverendum; will the golden rule be applied to exiters ? why are the CAC40 and EURO STOXX 50 down 8.5% now when the FTSE 100 is down 5% ? when does the curse of "interesting times" go away again.

June 24, 2016 09:17 AM

June 23, 2016

Michael Meeks

2016-06-23 Thursday.

  • Up early, mail chew, customer call, pleased to see our first product integration on the market with ownCloud. Some ideas take lots of time to mature - I recall discussing what was needed with Markus Rex at CeBIT, March 2014. Some amazing work from the Collabora team to get everything together for today.
  • Lunch. Plugged away at slideware until late.

June 23, 2016 09:00 PM

Official TDF Blog

LibreOffice 5.1.4 available for download

noun_23937Berlin, June 23, 2016 – The Document Foundation (TDF) announces LibreOffice 5.1.4, the fourth minor release of the LibreOffice 5.1 family, targeted at individual users and enterprise deployments. Users of previous LibreOffice releases should start planning the update to the new version.

For enterprise deployments, The Document Foundation suggests the backing of professional support by certified developers, migrators and trainers (the full list is available at:

People interested in technical details about the release can access the change log here: (fixed in RC1) and (fixed in RC2).

LibreOffice Conference

In 2016, LibreOffice Conference will be hosted by the Faculty of Information Technology at Brno University of Technology, and organized by OpenAlt, from September 7 to 9.

Details of Call for Papers, open until July 15, 2016, are available at: Registration for the conference is open at:

Download LibreOffice

LibreOffice 5.1.4 is immediately available for download from the following link:

LibreOffice users, free software advocates and community members can support The Document Foundation with a donation at

by Italo Vignoli at June 23, 2016 10:58 AM

June 22, 2016

Michael Meeks

2016-06-22 Wednesday.

  • Mail chew; meeting / slideware prep. poked partners. Admin, paperwork, etc.
  • Reviewed Noel's nice patch after dinner and stories for VclPtr'ing all Menus - turns up some surprising things in the code. Boggled with Azorpid at the namespace mis-handling corner-cases in the code.

June 22, 2016 09:00 PM

June 21, 2016

Michael Meeks

2016-06-21 Tuesday.

  • Mail chew; customer / partner calls; sync. with Philippe, poked Azorpid's GSOC work, and filed mid-term review.

June 21, 2016 09:00 PM

Official TDF Blog

TDF Marketing Activity (and a Debian Bug Squashing Party!)

As we head towards the second half of the year – and an exciting new release of LibreOffice in August – I wanted to recap some work from the Marketing Team that I’ve been involved in over the last few months. But before that, I’d also like to say congratulations to the LiMux team for a great Debian Bug Squashing Party!

LiMux is a project by the City of Munich to transition away from proprietary software and closed document formats to free software and open standards. GNU/Linux and LibreOffice are key components in this migration, and on 27 – 29 May the LiMux offices hosted a Debian Bug Squashing Party. As the name suggests, this is a mini hackfest where developers work to fix bugs in the Debian GNU/Linux distribution (and related software).

LiMux is based on Kubuntu, which in turn builds on Debian’s mighty foundations; other developers associated with KDE, Kolab and LibreOffice were present as well. Lots of hacking was done and bugs fixed – but it was also a great opportunity just to chat about the state of LiMux, make new contacts, and try great food! The Indian dishes on the first evening were especially good…

Marketing updates

Moving on to Marketing at The Document Foundation: we’ve had a busy few months, attending the CeBIT show in Hannover with new flyers and other materials. Thanks to the ever-industrious community, we received audio translations for our LibreOffice 5.1 New Features videos – so there are now versions in French, German and Spanish. Following this, we started work on the 2015 Annual Report, a summary of last year’s news and activity inside The Document Foundation and LibreOffice. It will be online soon, so stay tuned to this blog!

The LibreOffice main website and The Document Foundation wiki are packed with useful information, but some of it is duplicated or slightly dated, so we’ve been going through both sites to perform cleanups and updates. In addition, we added a new page to track migrations to LibreOffice, a First Steps guide for potential contributors to the marketing project, along with a style guide. On the main website we updated the screenshots and added a new “Who uses LibreOffice?” page.

The Document Liberation Project (DLP) is another effort supported by The Document Foundation, and we’ve been working to raise awareness about its mission and spread the word. After talking with the teams at Inkscape and Scribus, both of those projects now feature DLP logos on their sites, while the DLP front page has been redesigned to more succinctly express what it does. On top of that, we made a short video summarising the DLP’s goals.

Month of LibreOffice

Most recently, we had our Month of LibreOffice campaign, highlighting activity across all areas of the software. Many people think that contributing to an open source project is all about code – but we’ve tried to show that it’s possible to help in other ways including translations, confirming bugs, writing documentation and simply spreading the word. We awarded over 330 badges, so thanks to everyone who got one, and we plan to do another campaign like this later in the year.

The next few months are going to be busy as well: LibreOffice 5.2 is due to be released in August with many new features, and then we’ll have our yearly conference in September. We hope to see you there!

by Mike Saunders at June 21, 2016 11:46 AM

June 20, 2016

Michael Meeks

2016-06-20 Monday.

  • Up early; music practice with the babes - mail chew; team calls, partner bits; customer call; board call somewhere.

June 20, 2016 09:00 PM

Official TDF Blog

Friday 24 June: Next Bug Hunting Session

Help to fix bugs in the next version of LibreOffice, and make it the best yet! As we mentioned last week, we are holding a Bug Hunting Session on Friday 24 June, from 07:00 to 20:00 UTC, and everyone is welcome to take part. All you have to do is:

And as thanks for your help, if you find or confirm a bug we’ll award you a shiny Badge that you can proudly show on your website, blog or social media. For more details, see the full Bug Hunting Session wiki page.

We hope to see you on Friday, at some point between 07:00 to 20:00 UTC – and thanks in advance for your help!

by Mike Saunders at June 20, 2016 03:07 PM

June 19, 2016

Markus Mohrhard

Crash reporting for LibreOffice

Starting with LibreOffice 5.2 the LibreOffice project will have an automated crash reporting tool with server side analysis of the reports. This has been active in the builds since and was really working since beta 2.

You can find some of the current results at the 5.2.0 beta result page. A typical report that provides a lot of useful information can be found here.

Client side

On the client we are using breakpad to generate a minidump whenever we are hitting a crash. As we are not wanting to do more than necessary in the crashing process we are checking for crash reports during the next start and ask the user if he wants to upload the crash report. Together with the minidump, which only contains a backtrace and some system information (OS, CPU, loaded modules and time) we are also collecting some information that are helpful in fixing crashes.

Currently this is limited to information about OpenGL with information whether our OpenGL backend was activated, which OpenGL driver, device and vendor where used and hopefully in a bit whether the crash happened in our OpenGL render path. These info will help to quickly detect broken drivers and put them onto our blacklist.

We might be collecting more information in the future but of course there always needs to be a balance between the privacy of the user and the necessary information to identify the causes for crashes.

Server side

Originally my plan was to use Socorro from the Mozilla project but the code is quite heavily connected to their release process. So back in December I naively decided to write an own small django web service that takes the ideas from Socorro and adapts them to the LibreOffice release process. It turned out to be a lot more work but we are finally at a place where the server is usable and provides all the information that we might need for now. There are still a number of open issues and there is still a lot of room for improvements (if you are interested in django web development and want to help the LibreOffice project please contact me).

Also the UX is horrible until now and my lacking skills in CSS are obvious while looking at the web site. Help in fixing many of these issues are greatly appreciated.

Despite these short comings we have already found a few nasty issues in the beta2builds  with the reported crashes and we hope to fix more in the future.


Other parts

Currently the crash reporting is only enabled and useful in official TDF builds but I hope to get a working master daily build with enabled crash reporting working at some point.

There is some initial connection support to LibreOffice’s bugzilla instance but we are working on improving this both on the Bugzilla side and on the crash reporting server side. Look forward to some improvements there.

Additionally as I have no Mac and nobody else stepped up there is currently only support for Windows and Linux. Together with support for Android this is something that should be implemented at some point in the future.


A special thanks to all the people who helped making this possible, especially Norbert Thiébaud who does an amazing job maintaining the LibreOffice development infrastructure and Christian Lohmaier who has the difficult task of producing the builds and uploading the symbols. Additionally Riccardo Magliocchetti and Aybüke Oezdemir have contributed to the server side.

Of course this would also not possibly without the amazing code produced by the Socorro developers who provided some valuable code and information around the Windows SEH exception handling (especially on 64 bit) and the server side development.

by Markus Mohrhard at June 19, 2016 05:01 PM

June 17, 2016

LibreOffice Design Blog

Easyhackers wanted!

LibreOffice is a community-driven product, meaning you don’t only help the development by filing bug reports and writing ideas for features. You can do even more. Quite a few of the tickets in the bug tracker have been identified as …

by The LibreOffice Design Team at June 17, 2016 01:54 PM

Official TDF Blog

Document Liberation Project: progress so far in 2016

If you haven’t heard of the Document Liberation Project (DLP) before, we made a short video explaining what it does and why it’s important. In summary: it supports development of software libraries to read documents from many (usually proprietary) applications. If you’ve ever opened a file generated by Apple Pages, WordPerfect or Microsoft Works in LibreOffice, you’ve benefitted from the hard work of the DLP team. And DLP libraries are used in many other prominent FOSS tools such as Inkscape and Scribus as well.

For example, here’s a file being created in Apple Pages, and the same file being rendered in LibreOffice thanks to DLP libraries (click for a bigger version):

So, what has been going on in the DLP so far this year? Here’s an overview.

New releases

In January, libetonyek 0.1.6 was released with a bunch of new features. This library, which helps applications to read files produced by Apple Keynote, Pages and Numbers, can now properly parse links, lists and text languages in Keynote 6 files, while resizing of tables is handled properly. Text containing non-ASCII characters (ie, the majority of non-English languages) is now managed much better as well.

Scribus 1.5.1 was released in February, as part of the development process towards a stable 1.6 release of this desktop publishing tool. Along with many new features and updates, Scribus 1.5.1 makes use of the libfreehand 0.1.1 library, which allows it to read documents created in Adobe FreeHand. This feature is still marked as experimental – as it’s very early days – but is already working well and will be very useful to some Scribus users.

March saw the release of two other DLP libraries: libpagemaker 0.0.3 (for parsing Adobe PageMaker documents) can now read big-endian (Mac) files, while writerperfect 0.9.5 (for conversion of various document formats to ODF, EPUB and AbiWord) includes a number of build fixes and can also convert old StarOffice files.

Website updates

In order to make the goals of the Document Liberation Project clear and accessible, and attract potential new contributors, we redesigned the front page of the DLP website. We broke up the big chunks of text that used to dominate the front page, and added logos and links to several projects that use DLP libraries.

Here’s a before-and-after comparison:

In addition, we added a link to the aforementioned video that describes DLP and tries to make it accessible to a wider audience. As more and more computer users recognise the downsides of non-standard file formats and vendor lock-in, projects like the DLP will become increasingly important.

Get involved!

DLP is always looking for new contributors, and appreciates all help with coding, testing and documentation. If you enjoy programming and tackling new challenges, creating a new import library can be especially rewarding! Fathoming out the insides of a closed file format is fascinating, and you’ll get plenty of appreciation from users in the future who can finally open their old documents without struggling to run ancient software in a virtual machine…

So to join, visit the contributor page for pointers to get started.

by Mike Saunders at June 17, 2016 10:50 AM

June 16, 2016

Björn Michaelsen

A third of a LibreOffice snap

Take your time, hurry up
The choice is yours, don’t be late
Take a rest as a friend
— Nirvana, Come As You Are

I have just updated the LibreOffice snap package. The size of the package available for download created some confusion. As LibreOffice 5.2 is still in beta, I built and packed it with full debug symbols to allow analysis of possible problems. Comparing this to the size of e.g. the default install from Ubuntu *.deb packages is misleading:

  • The Ubuntu default install misses LibreOffice Base and Java unless you explicitly install them
  • The Ubuntu default install misses debug symbols unless you install the package libreoffice-dbg too

As many people are just curious about running LibreOffice 5.2 without wanting to debug it right now, I replaced the snap package. The download and install instructions are still the same as noted here — but it is now 287MB instead of 1015MB (and it still contains Base, but no debug symbols).

The package file including full debug symbols — in case you are interested in that — has been renamed to libreoffice-debug.

(Note that if you downloaded the file while I moved files around, you might need to redo your download.)

by bmichaelsen at June 16, 2016 10:42 AM

Official TDF Blog

The Document Foundation and GNOME Foundation to tighten their relationship, by exchanging seats in their Advisory Boards

gnome-logosBerlin, June 16, 2016 – The Document Foundation and GNOME Foundation have decided to tighten their relationship, in a move intended to create stronger ties between the two communities, and to foster the integration between LibreOffice and one of the most popular desktop environments for Linux.

The GNOME Foundation is a non-profit organization that furthers the goals of the GNOME Project, which is composed of both volunteers and paid contributors, helping it to create a free software computing platform for the general public that is designed to be elegant, efficient, and easy to use.

GNOME is a desktop environment that is composed entirely of free and open source software, targeting Linux but also supported on most derivatives of BSD. Since the release of GNOME 3.0, the GNOME Project has focused on the development of a set of programs known as the GNOME Core Applications, for the adherence to the current GNOME HUD guidelines and the tight integration with underlying GNOME layers.

“The GNOME Foundation oversees one of the cornerstones of the FLOSS desktop, and we are extremely happy to work with them on an organizational level to improve the desktop software experience and user interface. We can also learn from each other, as we are both based on volunteer-driven governance,” says Michael Meeks, Director, The Document Foundation.

“GNOME and LibreOffice both aim to bring competitive Free Software products to as many people as possible. Our growing partnership will help us to further this mission, by increasing cooperation and sharing information, expertise and best practices. We’re excited about this new chapter in the relationship between the two projects!”, says Shaun McCance, President of the Board of GNOME Foundation.

About GNOME Foundation

The nonprofit GNOME Foundation is an independent organization committed to supporting the advancement of the GNOME Project and software freedom. It provides financial, organizational and legal support to the GNOME Project and helps determine its vision and roadmap. GNOME software is used by millions of people around the world. More information about GNOME and the GNOME Foundation can be found at

by Italo Vignoli at June 16, 2016 10:02 AM

Florian Reisinger

SI-GUI usage statistc + Github

Just 2 small hints:

A new usage statistic is available here.

And anyone with a GitHub account can change the list, which is used for the “Update list of versions” feature.



by Florian Reisinger at June 16, 2016 09:12 AM

June 14, 2016

Björn Michaelsen

LibreOffice 5.2.0 beta2 as a snap package

What’s been happening in your world?
What have you been up to?
— Arctic Monkeys, Snap out of it

So — here is what I have been up to:

<figure class="wp-caption aligncenter" data-shortcode="caption" id="attachment_1187" style="width: 749px">LibreOffice 5.2.0 beta2 installed as a snap on Ubuntu 16.04<figcaption class="wp-caption-text">LibreOffice 5.2.0 beta2 installed as a snap on Ubuntu 16.04</figcaption></figure>

The upcoming LibreOffice 5.2 packaged as a nice new snap package. This:

  • is pretty much a vanilla build of LibreOffice 5.2 beta2, using snapcraft, which is making packaging quite easy
  • contains all the applications: Writer, Calc, Impress, Draw, Math, Base
  • installs easily on the released current LTS version of Ubuntu: 16.04
  • allows you to test and play with the upcoming LibreOffice version to your hearts delight without having to switch to a development version of Ubuntu

So — how can you “test and play with the upcoming LibreOffice version to your hearts delight” with this on Ubuntu 16.04? Like this:

sha512sum -c libreoffice_5.2.0.0.beta2_amd64.snap.sha512sum && sudo snap install --devmode libreoffice_5.2.0.0.beta2_amd64.snap

and there you have a version of LibreOffice 5.2 running — for example, you can prepare yourself for the upcoming LibreOffice Bug Hunting Session. And its even quite easy to remove again:

sudo snap remove libreoffice

This is one of the things that snap packages will make a lot easier: upgrading or  downgrading versions of an application, having multiple installed in parallel and much more. Watch out as there are more exciting news about this coming up!

Update: As this has been asked a few times: Yes, snap packages are available on Ubuntu. No, snap packages are not only available on Ubuntu. This text has more details.

Update 2: The original download included debug symbols and thus was quite big. The download now has 287MB. This post has all the details.

by bmichaelsen at June 14, 2016 08:03 AM

Jan Iversen

Like to socialize while hacking on open source ?

In libreoffice we have a very active development (among others) community.

Captura de pantalla 2016-06-14 a las 9.40.32

source Active stat

259 people (or to be exact “nick”) visited our IRC development channel (#libreoffice-dev connect via web chat). A lot of these people are developers who want to help, and have questions about how to solve a problem.

Come and join us, except for the weekends, this is one of the best places to get your development questions answered (remark, we only exceptionally answer user questions on this channel).

If you are new, and want help to get started, have a look at: Get involved


by jan at June 14, 2016 07:55 AM

June 09, 2016

Italo Vignoli

Support Post with Official Mugshot

italo-wantedToday, I have added another amazing title to my open source CV: persona non grata. This morning, while entering the hotel where a company is hosting an event focused on open source software (I am a member of Open Source Initiative board of directors), with a couple of presentations about LibreOffice (I am one of the founders of the LibreOffice project, and I am handling marketing and communications for The Document Foundation), I have been called by first name by the hotel security and I have been invited to stay away from the event. I suppose they have used a mugshot selecting one of the many pictures shot at events where I have been able to participate, sometimes even as a special guest (unlike what happened this morning).

Since I have my own reputation, even photographic, I make available to all those who will want to report me as persona non gratain the future, an official and approved mugshot, released under CC-BY license (true, this represents an obligation of assignment, but in the case of a mugshot it also takes away the embarrassment of the associating the name to the picture, which could represent an intrusion into my privacy).

by italovignoli at June 09, 2016 10:11 AM

June 08, 2016

Caolán McNamara

spellchecking calendar/calender

A short 2009 article about Microsoft's group with responsibility for spellchecking that mentions the calendar/calender masking problem. Sometimes you probably do want correctly spelled words to be flagged.

by Caolán McNamara ( at June 08, 2016 12:08 PM

June 06, 2016

Jiri Eischmann

Flatpak is gaining momentum

The Xdg App project has been renamed to Flatpak to get an easy-to-remember name and reflect that after almost two years of development it’s finally ready for broader adoption.


It has also got a brand-new official website –

Since then the project has gained momentum. Last week, LibreOffice for Flatpak was announced. This is something Stephan Bergmann of the Red Hat team of LibreOffice has been working on for the last couple of months (read his blogpost about it). You can now easily install the latest LibreOffice (5.2 Beta) directly from The Document Foundation to your system and use is side by side with the system version.


LibreOffice 5.2 Beta in F24 via Flatpak

There are nightly builds of 23 GNOME apps, Darktable, GIMP, Inkscape, MyPaint.

The KDE community has prepared a testing version of KDE runtime, so now you can also easily build KDE/Qt apps for Flatpak. Dan Vrátil worked on the KDE runtime when he was in my team. Dan has not been with Red Hat for half a year, but it’s great to see that his initial work stirred some interest in the KDE community.

Aleix Pol tweeted that he was working on Krita for Flatpak.

Mario Sanchez Prada is working on Chromium for Flatpak.

Flatpak finds its way to distributions, too. Simon McVittie wrote a blogpost about adopting Flatpak in Debian.

Installing Flatpak applications currently requires a couple of commands. Easy to do, but not the best UX. That is going to change soon, too. GNOME Software 3.21 already supports and associates with .flatpak files, so you’ll just double-click the file and everything necessary for installation will be taken care of.

2016 may not be the Year of Linux Desktop, but perhaps it will be remembered as the year when distribution of Linux desktop apps was redefined.

by eischmann at June 06, 2016 01:48 PM

June 03, 2016

Andreas Mantke

Change To New Multilanguage Framework

I did the the next step to migrate the current LibreOffice extensions and templates site to a new Plone environment. I changed the multilanguage framework from LinguaPlone to the new with Archetype support. The content of the site was reindexed after the change.

by andreasma at June 03, 2016 06:51 PM

Jan Iversen

Good news for me from the document foundation.

This morning I received a nice email  welcoming me as member of the document foundation.

What an amazing organization, even though I am also staff and therefore paid to help new people, the Membership Committee deemed my work (assuming they looked on my voluntary work) interesting enough to invite me as member.

I am also an Apache Software Foundation member and proud of being that.

It is interesting to see the difference between the two foundations, which both are fantastic and both in general have the same aims. I find that The Document Foundation not only focusses on the people in the community, but also follows it trough in a grass root manner. Just an example, the wast majority of the donations to the project have an average of less the 10,- USD showing support from real people.

If you want to be part of a never sleeping, positive community, come and join us:

Hoping to see you soon.

Jan Iversen

by jan at June 03, 2016 06:28 AM

June 02, 2016

Miklos Vajna

Classification toolbar in LibreOffice: Multiple Categories

I explained the concept of the classification toolbar appearing in LibreOffice 5.2 in a previous post. One incremental update on top of that is support for multiple categories, which I’m describing here.

TSCP in its BAILSv1 spec defines 3 different policy types (IntellectualProperty, NationalSecurity and ExportControl), and you can set different classification categories for different policy types. Giving a practical example, if you’re communicating with someone, then you can declare what policy type will you be using for that communication, and tag a single document multiple times, once for all used policy types.

This multiple-categories feature wasn’t supported by LibreOffice previously, we simply read the IntellectualProperty type from the document, and also only wrote that. Now the user interface still reacts to the IntellectualProperty policy type (since in case there are multiple policies and each of them wants a different e.g. watermark, the UI has to pick one in some way), but other than that we read all types from the document, all values are shown on the toolbar and of course you can also set all of them.

All internal APIs and the .uno command that can be used from macros take a type parameter to get/set a given type of category, if wanted. As usual, you can try this right now with a 5.2 or 5.3 daily build. :-)

June 02, 2016 06:27 AM

June 01, 2016

Stephan Bergmann

LibreOffice 5.2 Beta Flatpak

Flatpak (formerly known under its working title “xdg-app”) is a cool new way of distributing images of Linux applications that run on a wide range of different distros, and run there in a secure way. I have blogged and spoken about making LibreOffice available in this format before in various places (see, e.g., these two previous blog posts and this conference talk).

Now is the time to announce availability of a LibreOffice.flatpak bundle of LibreOffice 5.2 Beta at!

To try it out, do the following:

  • First, you need to install Flatpak itself. See here for details.
  • Second, you need to add the Flatpak repository that contains the GNOME runtime (on which the LibreOffice.flatpak depends; see here for details):
      $ wget
      $ flatpak remote-add --user --gpg-import=gnome-sdk.gpg gnome
      $ flatpak install --user gnome org.gnome.Platform 3.20

    Update: If you use another locale than en-US, and want LibreOffice to automatically come up with a matching UI localization, additionally

      $ flatpak install --user gnome org.gnome.Platform.Locale 3.20
  • Then, with the LibreOffice.flatpak file downloaded from the link above, do
      $ flatpak install --user --bundle LibreOffice.flatpak

    to install it. (Don’t worry, it does not interfere with any other LibreOffice you might already have installed on your machine, like the one shipped with your Linux distro.)

  • And now you can run it, either from the command line
      $ flatpak run org.libreoffice.LibreOffice

    or by clicking on one of its icons (LibreOffice Start Center, Writer, etc.) in your distro’s application launcher.

(And if you happen to have an older version of xdg-app installed, installing the LibreOffice.flatpak bundle into it should work, too.)

Behind the scenes, the LibreOffice.flatpak links to a repository on the server that will get updated with later versions of LibreOffice Fresh. So once a new version of LibreOffice Fresh is released (starting with LibreOffice 5.2 proper), you can simply update your installation with

  $ flatpak update --user org.libreoffice.LibreOffice

A few items to note:

  • LibreOffice.flatpak is based on the GNOME 3.20 runtime, using LibreOffice’s much-improved GTK3 backend. This should offer the most complete set of features in LibreOffice, paving the way to Wayland etc.
  • The single bundle contains all localizations available for LibreOffice (as it doesn’t really affect the bundle’s overall size that much).
  • Flatpak-based apps are not yet able to reach out to other applications installed on the machine (like browsers) to e.g. open URLs through them. That means that e.g. clicking on a hyperlink in a LibreOffice Writer document might not work yet. And since the LibreOffice.flatpak does not contain all the help documentation (for all the localizations!), but instead wants to use the online help through a browser, pressing F1 does not yet work, either.
  • The LibreOffice.flatpak does not include a Java Runtime Environment (JRE). That means that some LibreOffice functionality that requires a JRE will not work.
  • At this time, there is no Flatpak version of the LibreOffice Software Development Kit (SDK).

by stbergmann at June 01, 2016 09:53 AM

May 31, 2016

Andreas Mantke

Upgrade Of The Extensions-Templates-Sites

I worked on some test environment for an upgrade of the LibreOffice extensions and templates websites to the latest Plone 4 version during the last week. I had to find solutions for some issues. In the end the upgrade in my test instance were successful.

I worked on the current LibreOffice extensions and templates instance with my experience, that I got from the test instance today. I upgraded the Plone buildout from version 4.2.6 to 4.3.9. I had to fix an unexpected error during the upgrade of the instance zope database. Apart from this the upgrade runs smoothly. The LibreOffice extensions and templates websites are up again, running on Plone 4.3.9 for now.

The next step will be the change of the multilanguage framework to a newer Plone add-on.

by andreasma at May 31, 2016 07:42 PM

May 30, 2016

>Jaskaran Singh

Gsoc at Libreoffice : Week 1

So the first week has finally concluded. It was a week of balancing. Balancing between my exams and my project. I promised myself that I would focus on my exams and start my work from 7th . I ended up breaking the promise I made to myself.

So the summary of the week is that I have Implemented Code for border Import. It hasn’t been merged into the master not because the code wasn’t working or I was just too lazy to do the work but because I had done some coding style mistakes like sandwitching operator between 2 tokens (eg: if (a==b)) . Multipple rejections by the code-reviewer to merge my code has left me very happy. Im a happy because I learnt something which I would have never learnt by myself. These are the things that neither competitive programming teaches you nor your proffessor.

Writing Code is like writing an essay. You have to be very clear with your thought and convey your thought with that much clarity to the reader. There were times when choosing a variable name seemed difficult task. I dedicated alot of time to things like these (which otherwise seem trivial) but would help someone else understand the source code.

I still have some exams left So would continue with the rest of the work from 7th June. I would go for number formatting and cell protection in the coming week. Thanks for reading. Have a nice day(or night).

May 30, 2016 06:06 PM

May 29, 2016

Andreas Mantke

Update Of New Extensions-Templates-Repository Test-Site

I updated the test-website for the new LibreOffice extensions and templates repository with my latest developments today. I worked on four additional validators and fixed some issues in the view templates for the content. I added also a new theming add-on, based on the default Plone 5 theming product, named Barceloneta. The test-site is available at

by andreasma at May 29, 2016 11:25 AM

May 28, 2016

Andreas Mantke

New Release For The Extension Part Add-On

Despite the sunny weather I found some time and created and published a new release of the Plone add for the extension part of the new LibreOffice extensions and templates website. The add-on is available in the ‚Cheeseshop‘ ( yet.

by andreasma at May 28, 2016 03:18 PM

May 27, 2016

Andreas Mantke

AddOns For The New Extension-Template-Website

Although I had to diversify my focus for various reasons in the last weeks I managed to work through some smaller remaining topics of the Plone add-ons for the new LibreOffice extensions and templates website. I already created a new release for the templates part and uploaded it to the ‚Cheeseshop‘. A new release for the extension part will follow soon.
Besides this I created a new theming add-on for the website based on the default Plone 5 theme, Barceloneta, that could be improved later.
I also worked with the user/contributor of the current site, started the preparation of the site stuff for the migration to the newer framework. I did some work on the buildout environment for an upgrade to the latest Plone 4.3 version. I’ll run this upgrade during the next days, once all tests are completed.

by andreasma at May 27, 2016 08:00 PM

Jan Iversen

Computer student? Enhance your job chances this summer


Why not use this summer to enhance your job chances ?

When you apply for a development position in one of the bigger companies, changes are high that they will look at your opensource involvement. They expect to see something in your CV, and might also have a look at

The LibreOffice project is one of the biggest opensource projects and very well known, with a multi million user base around the world. The libreoffice community is a vibrant set of volunteers who welcomes new people.

We have people dedicated to help you get started (I am one of those), and we have furthermore identified simple problems to be solved easyhacks together with a recipe for success getInvolved

If you decide to join our community, you will be able to write in your CV, that you have worked on a project with more then 7 million lines of code. If you are active in our community  and need references we can help with that.

Let us together make the world just a little bit better and you get an extra point on your CV.

Feel free to contact me if you have questions or comments.

Have a nice summer.

Jan Iversen


by jan at May 27, 2016 10:29 AM

May 26, 2016

>Akshay Deep

Introduction: GSoC 2016 with Libreoffice

This is my first blog related to my Google Summer of Code project with Libreoffice. I would be working on the Template Manager of Libreoffice to solve the basic software design problems which were quite surfacing in it’s previous instance. I have been assigned two mentors for my project, Mr. Yousuf (Jay) Philips and Mr. Samuel Mehrbrodt, who will guide me and review my ideas. This blog mainly focuses on keeping all the proposed changes under one roof and will be followed by a series of related blog posts about the actual changes made in LibreOffice.

The Template Manager will undergo a major rework and installation of new features. Few insights to the changes and additions are given below:

  • UI concept:

    1. Redesigning the Template Manager

      • New User Interface for better UX
        • Remove the feels of a file manager
      • Fuzzy Search and Filter controls for easier accessibilty
      • Use of context menus instead of toolbox controls for non-browse focused entries
      • Removal of tabs (Drop 90’s design)
      • No regression on previous functionalities:
        • Non-browse focused functions (Edit, Set As Default, Delete, etc)
        • Browse focused functions (Move, Export, Import)
      • blog25

        Template Manager mock-up

    2. Making Impress A UX Princess

      • Scrap off the ‘Presentation Wizard‘ from Impress module
        • Exclude Libreoffice 5.2
      • Modal dialog for template selection
        • Minimal version of ‘Templates‘ dialog
      • ‘On’ by default with easy means of disabling
        • Impress > Tools > Libreoffice Impress > General > Start with wizard
  • Challenges:

    1. Improve Save as Template workflow

      • Current workflow fails to use Template Manager efficiently
      • Plan to create a new ‘Save as Template’ dialog
    2. Better integration of Template Manager with Start Center

      • Improved accessibility of templates in Start Center
      • Reduce back-end to minimal code
      • Better thumbnail previews
    3. Integration of online templates

      • Not decided yet ( Not mentioned in GSoC project proposal )
      • The current LO site does not provide with API
      • New website (not launched) has a JSON API
    4. CMIS Integration

      • Currently an experimental feature
      • Tools > Options > LibreOffice > Advanced > Enable Experimental Features
      • Not sure about interoperability w.r.t. templates.


For other queries and discussions, please comment or ping me (IRC nick: Akki) on libreoffice-dev / libreoffice-design channel on Freenode.


by akkidevblog at May 26, 2016 02:57 PM

>Marius Popa Adrian

Tensorflow and why i love it

I work for my paper for master degree (Artistic style Implementation with Tensor Flow) and i love Tensorflow Here are a few reasons why : It's python also i can use it quite easily with my gpus (gtx) also it's distributed across servers using gRPC Tensor Flow has a clean, modular architecture with multiple frontends and execution platforms. Details are in the white paper.

by Adrian Marius Popa ( at May 26, 2016 01:11 PM

May 22, 2016

TDF Infrastructure Status

Downtime of Pumbaa

Due to network restructuring at Hetzner, pumbaa will not be available during between 25 May 2016 23:00 hours (CEST) and 26 May 2016 05:00 hours (CEST) for a maximum of 5 minutes.

The following services are affected:

  • Redmine
  • mail-adresses
  • private mailing lists

by The Document Foundation at May 22, 2016 10:00 PM

Charles Schulz

The Month of LibreOffice

This month of May is quite unique for the LibreOffice project. It has been decided that May would be a month dedicated to celebrate both LibreOffice and its community of volunteers. The project is awarding badges and barnstars matching several kinds of contributions and activities; volunteers will be able to harbor them on their own webpage, twitter handle and other social networks platforms. It’s important to understand that this isn’t a “feel good” operation. Volunteers, just like anybody else, want to feel appreciated, especially when nothing forces them to contribute to such a project. By doing so the community acknowledges the contributions of its members.

It also helps spread the word about LibreOffice. Remember, Free/Libre & Open Source Software does not directly produce products. Rather, it develops and releases software through community of contributors, that may then be monetized in one way or another – or perhaps not at all. In other words, this means that the distinction between outbound and inbound marketing that is commonly found in the corporate world is more blurry as any user is also a potential contributor. Marketing our community really means marketing LibreOffice itself. This is what we’re doing this month and it makes me happy. I’m excited at the stats and figures that we will draw from this experiment. If you happen to be a LibreOffice contributor, or just a fan of LibreOffice, you could get a badge. All you need is to contribute to the project in one of the several ways described here and it will be awarded to you: remember, we’re already at the end of the month!

by Charles at May 22, 2016 11:03 AM

May 18, 2016

Miklos Vajna

Recent undo/redo fixes in LibreOffice Impress

I’ve recently spent some time fixing a few bugs around undo/redo in Impress, in the area of table shapes. I’m mentioning these here as they’re all bugfixes, so they are backported to LibreOffice 5.1, and no major release notes will point them out. So if you are using Impress table shapes and you consider their usability suboptimal, then read on, I have some great news. :-)

The first problem is tdf#99396, where there were actually two problems:

  1. Vertical alignment is a cell property, but when setting that property, the undo code was simply missing.

  2. When editing cell text (the user is inside "text edit") the undo stack is in a special mode — and ending text edit made the cell property undo items go away. This wasn’t a problem for vertical alignment only, it was a problem for example when the background color of the cell was changed, too. These cell property changes are now added to the undo stack after finishing text edit, so you can still undo them later.

The second bugreport is tdf#99452 where resizing a table shape row separator and then undoing the resize didn’t restore the original state. See the commit for all the details, but the bottom line is: it isn’t a good idea to automatically re-layout the table when we’ve already resized the shape as part of undo, but the table rows were not yet resized to reflect their original sizes.

As usual, you can try this right now with a 5.2 daily build. :-) (Or even with an 5.1 one, actually.)

May 18, 2016 07:34 AM

May 13, 2016

Stephan Bergmann


Flatpak is the new name of xdg-app. So following up on my previous LibreOffice in a Box post, here is some more technical detail on how an upcoming LibreOffice 5.2 will be available as a Flatpak bundle.

There is now a shell script demonstrating how to do all the downloading of sources, building, and bundling up. I decided against using flatpak-builder (nee xdg-app-builder) for that mostly out of convenience, mainly because the way LibreOffice fetches its external dependencies is so different from the typical way of building a Linux app. So I felt more comfortable doing these things manually, calling the raw xdg-app build steps from a script. But given enough pressure (e.g., to make the LibreOfficeKit widget buried within the LibreOffice installation set available to other Flatpak apps), this might get revisited.

The script proceeds in six steps (see the above link for details):

First, building LibreOffice requires an Archive-Zip Perl module not found in the org.gnome.Sdk we build against. The easiest solution (easier than to try and get rid of that Perl dependency in the LibreOffice build machinery, that is) is to download it and make it available to the build via the PERLLIB environment variable.

Second, we need the LibreOffice sources themselves. The current master branch has all the necessary changes needed for a Flatpak’ed LibreOffice (as will the coming libreoffice-5-2 branch).

Third, we need to fetch LibreOffice’s external dependencies. LibreOffice has a long list of external projects that it can either use from the underlying system or build/bundle itself. Those external projects covered by Flatpak’s org.gnome.Platform runtime are taken from there, but whatever remains is bundled with the LibreOffice app. The sources for these external projects are normally downloaded during the build, but an xdg-app build does not have network connectivity, so they need to be downloaded upfront. So bootstrap enough of a LibreOffice build here to execute the make fetch part.

Fourth, LibreOffice is built in xdg-app. The choice of building against the org.gnome.Platform 3.20 is somewhat arbitrarty, but it’s the latest revision available. And given LibreOffice’s strong GTK3 support (which e.g. also enables running on Wayland), this should make the resulting app more versatile than basing it on the more fundamental org.freedesktop.Platform. Building LibreOffice doesn’t exactly follow the make && make install mantra, but there happened to already be a make distro-pack-install target that produces the build artifacts in (almost) the right way for our purposes here.

Fifth, the build artifacts from the previous step are assembled in the way xdg-app expects them. Some of the metadata desktop and icon files need to be renamed, to match xdg-app’s expectation that metadata files belonging to the org.libreoffice.LibreOffice app have names actually starting with “org.libreoffice.LibreOffice”.

Finally, everything is bundled up into a LibreOffice.flatpak that can be distributed to users, who can then install it with xdg-app install --bundle LibreOffice.flatpak.

The bundle contains all the available LibreOffice localizations. It doesn’t make that much of a difference for the size of the resulting LibreOffice.flatpak, and should be easier to handle for both producers and consumers than to provide dedicated single-language apps. For reasons of size, the help content is not bundled, though; the intent is to (transparently) use the online help content. However, one caveat with the current state of xdg-app is that an app cannot reach out to other applications on the machine via xdg-open (a portal will be needed for that). When asked to process “external” URLs (e.g., when clicking on a hyperlink in a text document, but also when accessing the online help), LibreOffice tries to pass those URLs to xdg-open, but that doesn’t work yet in xdg-app.

by stbergmann at May 13, 2016 01:52 PM

May 12, 2016

Stephan Bergmann

Between an assert and a [[fallthrough]]

LibreOffice now has Clang -Wimplicit-fallthrough enabled to catch places where a break has been missing between cases in a switch statement. See “Re: clang -Wimplicit-fallthrough and missing breaks” for some further details.

Of course, a code base as large as LibreOffice has quite a number of places where such fall-through from one case to the next is intentional, and where warnings thus need to be suppressed. The solution is the [[clang::fallthrough]] annotation (which will be available as plain [[fallthrough]] in C++17), wrapped up as a SAL_FALLTHROUGH macro for now (so it doesn’t confuse other compilers).

All fine and dandy.

Until you realise that there is quite a number of places like the following in the code base:

Foo * p;
switch (kind) {
    assert(false); // cannot happen
case Kind1:
    p = new Foo(1);
case Kind2:
    p = new Foo(2);
case Kind3:
    p = new Foo(3);

Maybe kind is of an enumeration type that can only legitimately take on one of the values Kind1Kind3 (see “”enum union” with set of values restricted to exactly its enumerators?” for a discussion how such a type cannot reasonably be modeled in C++), or it is a type that can take on a wider set of values, but some invariant guarantee is that it will only take on values Kind1Kind3 here. Regardless, some compilers will warn about unhandled cases, and/or about p being used uninitialized in some cases. So the default assert part got added at some point in time, logcially marking any unhandled cases as unreachable. If a compiler/NDEBUG-configuration combo is smart enough to conclude that the assert is non-returning, it will not emit a warning. If, on the other hand, the compiler/NDEBUG-configuration combo assumes fall-through to case Kind1, it will not emit a warning about p being used uninitialized, either.

All fine and dandy.

Except that, in the NDEBUG case, Clang will now warn about a missing [[fallthrough]] annotation between the default branch and case Kind1. Under non-NDEBUG configuration (i.e., assert actually expands to some code), it is smart enough to conclude that the assert(false) will never return, so it concludes that there will be no fall-through, so will not warn. But under NDEBUG configuration (i.e., the assert expands to nothing), it sees an empty statement in the default branch, causing fall-through, causing a -Wimplicit-fallthrough warning.

But when you add a [[fallthrough]] annotation to appease the NDEBUG configuration, the non-NDEBUG configuration will start to complain about an unreachable [[fallthrough]] annotation (as it considers the assert to be non-returning, see above).

Caught between a rock and a hard place.

One way out is to rewrite the code as follows:

Foo * p;
switch (kind) {
case Kind1:
    p = new Foo(1);
case Kind2:
    p = new Foo(2);
case Kind3:
    p = new Foo(3);
    for (;;) std::abort(); // cannot happen

The std::abort marks the default branch as dead independent of NDEBUG. The infinite loop around it is there to make even the most lame compiler aware that that statement will not return, so it will refrain from emitting a warning about p being used uninitialized. (And the default branch can now go at the end, where it feels more naturally at home.)

And no, there should be no fears that the second variant will behave differently now in production NDEBUG builds. In the first variant, should kind ever take on an invalid value, it would silently treat it as Kind1, proceeding (though, of course, proceeding in the most unfortunate of “defensive programming” ways), not (immediately) crashing in the user’s face. In the second variant, it would abort outright (“crashing in the user’s face!”, one might fear). But that’s a red herring. The assert (and, similarly, the std::abort) codifies the invariant that kind must be one of Kind1Kind3 here. So if it ever did have a different value, all bets about the state of the program would be off, anyway. And it would better fail fast.

by stbergmann at May 12, 2016 08:20 PM

Jean Hollis Weber

2016 LibreOffice Conference

In 2016, LibreOffice Conference will be hosted by the Faculty of Information Technology at Brno University of Technology, Czech Republic, and organized by OpenAlt, from September 7 to 9.

Details of Call for Papers, open until July 15, 2016, are available at:

Registration for the conference is open at:

by Jean at May 12, 2016 08:16 PM

LibreOffice 5.1.3 released

The Document Foundation (TDF) announced LibreOffice 5.1.3, the third minor release of the LibreOffice 5.1 family, supporting Google Drive remote connectivity on GNU/Linux and MacOS X.

LibreOffice 5.1.3 is targeted at technology enthusiasts, early adopters
and power users. For more conservative users, and for enterprise
deployments, TDF suggests the “still” version: LibreOffice 5.0.6.

LibreOffice 5.1.3 is available for download from

by Jean at May 12, 2016 08:13 PM

Rosemary Sebastian

About this blog

Hello, I’m Rosemary, aka roses in the IRC. This year, my project proposal with LibreOffice got accepted for GSoC. In this blog, I’ll be writing mainly about my work for the project, which is “Saving ODF XML of Change-tracking as a Sequence of Pre-defined Changes“.



by Rosemary Sebastian at May 12, 2016 07:16 PM

May 11, 2016

>Jaskaran Singh

Installation of Opencl On Linux+Intel HD!

Intallation of OpenCl could be a a bit difficult(compared to Nvidia) on system with Intel GPU running Linux. In this post I will tell you how to Install Opencl on Linux+IntelHD.

  1. First and the very basic step is to Install OpenCl drivers for your Device. After going through a few sites I had noticed that none of them tell you to first install OpenCL Drivers. Without These , you won’t be able to execute your code on your device. Also, Intel has hidden the Opencl drivers download page for which I don’t know the reason. None the less, go here to download opencl Drivers.

  2. The next thing would be to install these on your system. If your OS is RPM based then installation would be simple. If it isn’t the case then the following script would work for you.

for f in *.rpm; do
  fakeroot alien --to-deb $f
for f in *.deb; do
  sudo dpkg -i $f

  1. Now, you must install opencl SDK. Both Intel and AMD have their SDK. While Intel’s SDK is closed source and only works on Intel Hardware, AMD’s SDK is open source and Runs quite good on Intel Hardware as well. I prefer AMD’s version since I was able to find more documentation and other material for OpenCl developers on their awesome site . Download AMD OpenCL SDK or you can [Download Intel OpenCL SDK]

  2. Unzip the downloaded material(whether Intel’s or AMD’s both need to be unzipped ). AMD’s folder would only contain 1 shell script. Running this script with sudo would install it for every user. Intel’s folder would have a script to install from GUI. Just run that and rest is easy.

  3. If you’ve installed AMD’s SDK. Then you would need to :-

cd ~/AMDAPPSDK-3.0/samples 
cmake .
cd ../bin

Suppose if your system is x86_64 you would need to do :-

cd x86_64

If Everything is successful , you would be able to see a big log of information about your device. Else, if you can only see some error , then it means that either there is a problem with your installation of OpenCL driver or compilation of code for your architecture.

If you have installed Intel’s SDK

You would need to open up vim . Copy and paste the following into it.

/* Copyright 1993-2009 NVIDIA Corporation.  All rights reserved.
   Modified by Mark Zwolinski, December 2009 
   Modified by Robert McGibbon, August 2013
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#include <CL/cl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <sstream>
#include <fstream>

void clPrintDevInfo(cl_device_id device) {
  char device_string[1024];

  clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(device_string), &device_string, NULL);
  printf("  CL_DEVICE_NAME: \t\t\t%s\n", device_string);

  clGetDeviceInfo(device, CL_DEVICE_VENDOR, sizeof(device_string), &device_string, NULL);
  printf("  CL_DEVICE_VENDOR: \t\t\t%s\n", device_string);

  clGetDeviceInfo(device, CL_DRIVER_VERSION, sizeof(device_string), &device_string, NULL);
  printf("  CL_DRIVER_VERSION: \t\t\t%s\n", device_string);

  cl_device_type type;
  clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(type), &type, NULL);
  if( type & CL_DEVICE_TYPE_CPU )
    printf("  CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_CPU");
  if( type & CL_DEVICE_TYPE_GPU )
    printf("  CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_GPU");
    printf("  CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_ACCELERATOR");
    printf("  CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_DEFAULT");

  cl_uint compute_units;
  clGetDeviceInfo(device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(compute_units), &compute_units, NULL);
  printf("  CL_DEVICE_MAX_COMPUTE_UNITS:\t\t%u\n", compute_units);

  size_t workitem_dims;
  clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof(workitem_dims), &workitem_dims, NULL);
  printf("  CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:\t%u\n", workitem_dims);

  size_t workitem_size[3];
  clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof(workitem_size), &workitem_size, NULL);
  printf("  CL_DEVICE_MAX_WORK_ITEM_SIZES:\t%u / %u / %u \n", workitem_size[0], workitem_size[1], workitem_size[2]);

  size_t workgroup_size;
  clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(workgroup_size), &workgroup_size, NULL);
  printf("  CL_DEVICE_MAX_WORK_GROUP_SIZE:\t%u\n", workgroup_size);

  cl_uint clock_frequency;
  clGetDeviceInfo(device, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(clock_frequency), &clock_frequency, NULL);
  printf("  CL_DEVICE_MAX_CLOCK_FREQUENCY:\t%u MHz\n", clock_frequency);

  cl_uint addr_bits;
  clGetDeviceInfo(device, CL_DEVICE_ADDRESS_BITS, sizeof(addr_bits), &addr_bits, NULL);
  printf("  CL_DEVICE_ADDRESS_BITS:\t\t%u\n", addr_bits);

  cl_ulong max_mem_alloc_size;
  clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(max_mem_alloc_size), &max_mem_alloc_size, NULL);
  printf("  CL_DEVICE_MAX_MEM_ALLOC_SIZE:\t\t%u MByte\n", (unsigned int)(max_mem_alloc_size / (1024 * 1024)));

  cl_ulong mem_size;
  clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(mem_size), &mem_size, NULL);
  printf("  CL_DEVICE_GLOBAL_MEM_SIZE:\t\t%u MByte\n", (unsigned int)(mem_size / (1024 * 1024)));

  cl_bool error_correction_support;
  clGetDeviceInfo(device, CL_DEVICE_ERROR_CORRECTION_SUPPORT, sizeof(error_correction_support), &error_correction_support, NULL);
  printf("  CL_DEVICE_ERROR_CORRECTION_SUPPORT:\t%s\n", error_correction_support == CL_TRUE ? "yes" : "no");

  cl_device_local_mem_type local_mem_type;
  clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(local_mem_type), &local_mem_type, NULL);
  printf("  CL_DEVICE_LOCAL_MEM_TYPE:\t\t%s\n", local_mem_type == 1 ? "local" : "global");

  clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(mem_size), &mem_size, NULL);
  printf("  CL_DEVICE_LOCAL_MEM_SIZE:\t\t%u KByte\n", (unsigned int)(mem_size / 1024));

  clGetDeviceInfo(device, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(mem_size), &mem_size, NULL);
  printf("  CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:\t%u KByte\n", (unsigned int)(mem_size / 1024));

  cl_command_queue_properties queue_properties;
  clGetDeviceInfo(device, CL_DEVICE_QUEUE_PROPERTIES, sizeof(queue_properties), &queue_properties, NULL);
  if( queue_properties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE )
  if( queue_properties & CL_QUEUE_PROFILING_ENABLE )

  cl_bool image_support;
  clGetDeviceInfo(device, CL_DEVICE_IMAGE_SUPPORT, sizeof(image_support), &image_support, NULL);
  printf("  CL_DEVICE_IMAGE_SUPPORT:\t\t%u\n", image_support);

  cl_uint max_read_image_args;
  clGetDeviceInfo(device, CL_DEVICE_MAX_READ_IMAGE_ARGS, sizeof(max_read_image_args), &max_read_image_args, NULL);
  printf("  CL_DEVICE_MAX_READ_IMAGE_ARGS:\t%u\n", max_read_image_args);

  cl_uint max_write_image_args;
  clGetDeviceInfo(device, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, sizeof(max_write_image_args), &max_write_image_args, NULL);
  printf("  CL_DEVICE_MAX_WRITE_IMAGE_ARGS:\t%u\n", max_write_image_args);

  size_t szMaxDims[5];
  printf("\n  CL_DEVICE_IMAGE <dim>");
  clGetDeviceInfo(device, CL_DEVICE_IMAGE2D_MAX_WIDTH, sizeof(size_t), &szMaxDims[0], NULL);
  printf("\t\t\t2D_MAX_WIDTH\t %u\n", szMaxDims[0]);
  clGetDeviceInfo(device, CL_DEVICE_IMAGE2D_MAX_HEIGHT, sizeof(size_t), &szMaxDims[1], NULL);
  printf("\t\t\t\t\t2D_MAX_HEIGHT\t %u\n", szMaxDims[1]);
  clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_WIDTH, sizeof(size_t), &szMaxDims[2], NULL);
  printf("\t\t\t\t\t3D_MAX_WIDTH\t %u\n", szMaxDims[2]);
  clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_HEIGHT, sizeof(size_t), &szMaxDims[3], NULL);
  printf("\t\t\t\t\t3D_MAX_HEIGHT\t %u\n", szMaxDims[3]);
  clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_DEPTH, sizeof(size_t), &szMaxDims[4], NULL);
  printf("\t\t\t\t\t3D_MAX_DEPTH\t %u\n", szMaxDims[4]);

  cl_uint vec_width [6];
  clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, sizeof(cl_uint), &vec_width[0], NULL);
  clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, sizeof(cl_uint), &vec_width[1], NULL);
  clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, sizeof(cl_uint), &vec_width[2], NULL);
  clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, sizeof(cl_uint), &vec_width[3], NULL);
  clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, sizeof(cl_uint), &vec_width[4], NULL);
  clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, sizeof(cl_uint), &vec_width[5], NULL);
  printf("CHAR %u, SHORT %u, INT %u, FLOAT %u, DOUBLE %u\n\n\n",
   vec_width[0], vec_width[1], vec_width[2], vec_width[3], vec_width[4]);

int main(int argc, const char** argv) {
  // start logs
  printf("clDeviceQuery Starting...\n\n");
  bool bPassed = true;
  std::string sProfileString = "clDeviceQuery, Platform Name = ";

  // Get OpenCL platform ID for NVIDIA if avaiable, otherwise default
  char cBuffer[1024];
  cl_platform_id clSelectedPlatformID = NULL;
  cl_platform_id* clPlatformIDs;

  cl_uint num_platforms;
  cl_int ciErrNum = clGetPlatformIDs(0, NULL, &num_platforms);
  if (ciErrNum != CL_SUCCESS) {
    printf(" Error %i in clGetPlatformIDs Call!\n\n", ciErrNum);
    bPassed = false;
  } else {
    if (num_platforms == 0) {
      printf("No OpenCL platform found!\n\n");
      bPassed = false;
    } else {
      // if there's one platform or more, make space for ID's
      if ((clPlatformIDs = (cl_platform_id*)malloc(num_platforms * sizeof(cl_platform_id))) == NULL) {
	printf("Failed to allocate memory for cl_platform ID's!\n\n");
	bPassed = false;

      printf("%d OpenCL Platforms found\n\n", num_platforms);
      // get platform info for each platform
      ciErrNum = clGetPlatformIDs (num_platforms, clPlatformIDs, NULL);
      for(cl_uint i = 0; i < num_platforms; ++i) {
	ciErrNum = clGetPlatformInfo (clPlatformIDs[i], CL_PLATFORM_NAME, 1024, &cBuffer, NULL);
	if(ciErrNum == CL_SUCCESS) {
	  clSelectedPlatformID = clPlatformIDs[i];
	  // Get OpenCL platform name and version
	  ciErrNum = clGetPlatformInfo (clSelectedPlatformID, CL_PLATFORM_NAME, sizeof(cBuffer), cBuffer, NULL);
	  if (ciErrNum == CL_SUCCESS) {
	    printf(" CL_PLATFORM_NAME: \t%s\n", cBuffer);
	    sProfileString += cBuffer;
	  } else {
	    printf(" Error %i in clGetPlatformInfo Call !!!\n\n", ciErrNum);
    bPassed = false;
  sProfileString += ", Platform Version = ";

  ciErrNum = clGetPlatformInfo (clSelectedPlatformID, CL_PLATFORM_VERSION, sizeof(cBuffer), cBuffer, NULL);
  if (ciErrNum == CL_SUCCESS) {
    printf(" CL_PLATFORM_VERSION: \t%s\n", cBuffer);
    sProfileString += cBuffer;
  } else {
    printf(" Error %i in clGetPlatformInfo Call !!!\n\n", ciErrNum);
    bPassed = false;

  // Log OpenCL SDK Version # (for convenience:  not specific to OpenCL)
  sProfileString += ", NumDevs = ";

  // Get and log OpenCL device info
  cl_uint ciDeviceCount;
  cl_device_id *devices;
  printf("OpenCL Device Info:\n\n");
  ciErrNum = clGetDeviceIDs (clSelectedPlatformID, CL_DEVICE_TYPE_ALL, 0, NULL, &ciDeviceCount);

  // check for 0 devices found or errors...
  if (ciDeviceCount == 0) {
    printf(" No devices found supporting OpenCL (return code %i)\n\n", ciErrNum);
    bPassed = false;
    sProfileString += "0";
  } else if (ciErrNum != CL_SUCCESS) {
    printf(" Error %i in clGetDeviceIDs call !!!\n\n", ciErrNum);
    bPassed = false;
  } else {
    // Get and log the OpenCL device ID's
    ciErrNum = clGetPlatformInfo (clSelectedPlatformID, CL_PLATFORM_NAME, sizeof(cBuffer), cBuffer, NULL);
    printf(" %u devices found supporting OpenCL on: %s\n\n", ciDeviceCount, cBuffer);
    char cTemp[2];
    sprintf(cTemp, "%u", ciDeviceCount);
    sProfileString += cTemp;
    if ((devices = (cl_device_id*)malloc(sizeof(cl_device_id) * ciDeviceCount)) == NULL) {
      printf(" Failed to allocate memory for devices !!!\n\n");
      bPassed = false;
    ciErrNum = clGetDeviceIDs (clSelectedPlatformID, CL_DEVICE_TYPE_ALL, ciDeviceCount, devices, &ciDeviceCount);
    if (ciErrNum == CL_SUCCESS) {
      for(unsigned int i = 0; i < ciDeviceCount; ++i )  {
        printf(" ----------------------------------\n");
clGetDeviceInfo(devices[i], CL_DEVICE_NAME, sizeof(cBuffer), &cBuffer, NULL);
printf(" Device %s\n", cBuffer);
printf(" ---------------------------------\n");
sProfileString += ", Device = ";
sProfileString += cBuffer;
            } else {
      printf(" Error %i in clGetDeviceIDs call !!!\n\n", ciErrNum);
      bPassed = false;

  // masterlog info
  sProfileString += "\n";
  printf("%s", sProfileString.c_str());

  // Log system info(for convenience:  not specific to OpenCL)
  printf( "\nSystem Info: \n\n");
  char timestr[255];
  time_t now = time(NULL);
  struct tm  *ts;

  ts = localtime(&now);

  strftime(timestr, 255, " %H:%M:%S, %m/%d/%Y",ts);

  // write time and date to logs
  printf(" Local Time/Date = %s\n", timestr);
  // write proc and OS info to logs
  // parse /proc/cpuinfo
  std::ifstream cpuinfo( "/proc/cpuinfo" ); // open the file in /proc
  std::string tmp;

  int cpu_num = 0;
  std::string cpu_name = "none";
  do {
    cpuinfo >> tmp;

    if( tmp == "processor" )

    if( tmp == "name" ) {
      cpuinfo >> tmp; // skip :

      std::stringstream tmp_stream("");
      do {
	cpuinfo >> tmp;
	if (tmp != std::string("stepping")) {
	  tmp_stream << tmp.c_str() << " ";

      while (tmp != std::string("stepping"));

      cpu_name = tmp_stream.str();
  while ( (! cpuinfo.eof()) );

  // Linux version
  std::ifstream version( "/proc/version" );
  char versionstr[255];

  version.getline(versionstr, 255);

  printf(" CPU Name: %s\n # of CPU processors: %u\n %s\n\n\n",

  // finish
  printf("TEST %s\n\n", bPassed ? "PASSED" : "FAILED !!!");

Now to compile this and run , bash $g++ -o clDeviceQuery -I/opt/intel/opencl-1.2-3.0.67279/include clDeviceQuery.cpp -lOpenCL && ./clDeviceQuery

If everything is alright , then you would be able to see a big log with a TEST PASSED printed at the bottom of it. If not, then you’ve messed up with your OpenCL driver installation or SDK installation(chances are very less).

Hope you get that up and running.

May 11, 2016 08:37 AM