<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://techbase.kde.org/skins/common/feed.css?0.2"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://techbase.kde.org/api.php?action=feedcontributions&amp;user=Jstaniek&amp;feedformat=atom</id>
		<title>KDE TechBase - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://techbase.kde.org/api.php?action=feedcontributions&amp;user=Jstaniek&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Special:Contributions/Jstaniek"/>
		<updated>2013-05-24T21:12:24Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/KDE4/Windows</id>
		<title>Getting Started/Build/KDE4/Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/KDE4/Windows"/>
				<updated>2013-02-12T20:27:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: Redirected page to Getting Started/Build/Windows/emerge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Getting_Started/Build/Windows/emerge]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows</id>
		<title>Getting Started/Build/Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows"/>
				<updated>2013-02-12T20:26:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: Redirected page to Getting Started/Build/Windows/emerge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Getting_Started/Build/Windows/emerge]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Policies/Library_Code_Policy</id>
		<title>Policies/Library Code Policy</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Policies/Library_Code_Policy"/>
				<updated>2012-12-05T19:51:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: update link to http://wiki.qt-project.org/index.php?title=API_Design_Principles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes some of the recommended conventions that should be applied in the KDE libraries (not applications). Respecting these guidelines helps create a consistant API and also may help ease maintainence of the libraries later. While these conventions are not mandatory, they are important guidelines, and should be respected unless you have a good reason to disregard them.&lt;br /&gt;
&lt;br /&gt;
As an introduction, you should read the document [http://wiki.qt-project.org/index.php?title=API_Design_Principles Qt-Style C++ API Design Principles].&lt;br /&gt;
&lt;br /&gt;
For kdelibs, it is recommended to follow the [[Policies/Kdelibs_Coding_Style | Kdelibs Coding Style]].&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
In KDE, we basically follow the same naming conventions as Qt.&lt;br /&gt;
&lt;br /&gt;
Class names starts with a capital K. The rest is in camel case. Function names starts with a lower case, but the first letter of each successive word is capitalized.&lt;br /&gt;
&lt;br /&gt;
Unless dealing with central libraries (kdecore, kdeui), classes should be in the library namespace. In that case, it is the namespace which starts with K and the classes inside may not start with it. New libraries should choose their namespace.&lt;br /&gt;
&lt;br /&gt;
The prefix 'set' is used for setters, but the prefix ''''get'''' is not used for accessors. Accessors are simply named with the name of the property they access. The exception is for accessors of a boolean which may start with the prefix ''''is''''.&lt;br /&gt;
&lt;br /&gt;
Acronyms are lowercased too. Example:&lt;br /&gt;
&amp;lt;tt&amp;gt;KUrl&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KURL&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;isNssEnabled()&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;isNSSEnabled()&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessors should usually be &amp;lt;tt&amp;gt;const&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This example shows some possible functions names&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
public:&lt;br /&gt;
    void setColor(const QColor&amp;amp; c);&lt;br /&gt;
    QColor color() const;&lt;br /&gt;
    void setDirty(bool b);&lt;br /&gt;
    bool isDirty() const;&lt;br /&gt;
&lt;br /&gt;
private Q_SLOTS:&lt;br /&gt;
    void slotParentChanged();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Make one public class for every .h file. Add the &amp;lt;tt&amp;gt;_EXPORT&amp;lt;/tt&amp;gt; macro related to the library they are in.&lt;br /&gt;
Private classes should be declared in the .cpp file, or in a _p.h file.&lt;br /&gt;
&lt;br /&gt;
== D-Pointers ==&lt;br /&gt;
In order to more easily maintain binary compatibility, there shouldn't be private members in a public class. For more information about binary compatibility, read [[Policies/Binary_Compatibility_Issues_With_C++|Binary Compatibility Issues With C++]].&lt;br /&gt;
&lt;br /&gt;
By convention, the private class will be named the same as the public class, with &amp;lt;tt&amp;gt;Private&amp;lt;/tt&amp;gt; appended to the name.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class KFooPrivate;&lt;br /&gt;
class KFoo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    /* public members */&lt;br /&gt;
private:&lt;br /&gt;
    const QScopedPointer&amp;lt;KFooPrivate&amp;gt; d;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the .cpp file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class KFooPrivate&lt;br /&gt;
{&lt;br /&gt;
    public:&lt;br /&gt;
        int someInteger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
KFoo::KFoo() : d(new KFooPrivate)&lt;br /&gt;
{&lt;br /&gt;
    /* ... */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
KFoo::~KFoo()&lt;br /&gt;
{ &lt;br /&gt;
 // You must define a non-inline destructor in the .cpp file, even if it is empty&lt;br /&gt;
 // else, a default one will be built in placed where KFooPrivate is only forward&lt;br /&gt;
 // declare, leading to error in the destructor of QScopedPointer&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Notice that the member d is &amp;lt;tt&amp;gt;const&amp;lt;/tt&amp;gt; to avoid modifying it by mistake.&lt;br /&gt;
&lt;br /&gt;
If you are implementing an implicitly shared class, you should consider using {{qt|QSharedData}} and {{qt|QSharedDataPointer}} for d.&lt;br /&gt;
&lt;br /&gt;
Sometimes, complex code may be moved to a member method of the Private class itself. Doing this may give the compiler an extra register to optimize the code, since you won't be using &amp;quot;d&amp;quot; all the time. Also, remember to '''inline''' such methods if they are called only from one place.&lt;br /&gt;
&lt;br /&gt;
=== Shared D-Pointers ===&lt;br /&gt;
&lt;br /&gt;
If your class hierarchy is large and/or deep, you may want to try the concept of shared d-pointers. You'll be trading the added complexity for a smaller memory footprint in the main object (there will be only one &amp;quot;d&amp;quot; variable in it). Other advantages include:&lt;br /&gt;
&lt;br /&gt;
:* direct access to the private data of the whole hierarchy (in other words, the Private classes are in fact &amp;quot;protected&amp;quot;, not &amp;quot;private&amp;quot;)&lt;br /&gt;
:* access to the parent's d-pointer methods&lt;br /&gt;
&lt;br /&gt;
The latter advantage is especially useful if your class has moved the code from the main class to the Private class. If that's the case, you should be calling the Private methods instead: since they are not exported, they will create simpler relocations in the final library (or none at all). By simply calling the Private method instead of the public one, you contribute to a faster load-time of your library.&lt;br /&gt;
&lt;br /&gt;
To implement a &amp;quot;shared d-pointer&amp;quot;, you need to:&lt;br /&gt;
:# define a '''protected''' variable (d_ptr) in the least derived class of your hierarchy&lt;br /&gt;
:# in each class of the hierarchy, define a '''private''' function called d_func() that reinterpret_casts that d_ptr to the current class's Private class&lt;br /&gt;
:# use Q_D(Foo) at the beginning of the functions to have access to a variable &amp;quot;d&amp;quot;&lt;br /&gt;
:# the private classes derive from one another just like the public hierarchy; they also have virtual destructors&lt;br /&gt;
:# add one extra, protected constructor that takes the private class as a parameter&lt;br /&gt;
:# in each constructor for all derived classes, call the parent's constructor that takes the d pointer as a parameter&lt;br /&gt;
&lt;br /&gt;
There's an example of such a construct in a [[/Shared_D-Pointer_Example|separate page]].&lt;br /&gt;
&lt;br /&gt;
=== Q_DECLARE_PRIVATE ===&lt;br /&gt;
&lt;br /&gt;
This is a handy macro that hides the ugly stuff for you. It creates the &amp;lt;tt&amp;gt;d_func()&amp;lt;/tt&amp;gt; function for you, using the variable called &amp;lt;tt&amp;gt;d_ptr&amp;lt;/tt&amp;gt;. If yours has that name, you can use this macro. If it has another name, maybe you should create a macro to make your code look nicer.&lt;br /&gt;
&lt;br /&gt;
=== Q-Pointers ===&lt;br /&gt;
&lt;br /&gt;
Q-pointers are like d-pointers, but work in the reverse direction: they are in the Private class and they point to the public class. Needless to say, this is only possible for classes that don't share their d-pointers. Examples of classes that might benefit from q-pointers are all those derived from QObject, while classes with implicit sharing are those that potentially can't use it.&lt;br /&gt;
&lt;br /&gt;
Q-pointers are especially useful if your class has moved most of the code to the Private class as recommended. In that case, you may need to emit signals from the Private class. You would do it as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
    emit q-&amp;gt;signalName();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(You need to declare the Private class a friend of your public one; Q_DECLARE_PRIVATE does that for you)&lt;br /&gt;
&lt;br /&gt;
Q-pointers may also use the a shared q-pointer technique just like [[#Shared D-Pointers|d-pointers]] can. What's more, Qt also provides a macro called &amp;lt;tt&amp;gt;Q_DECLARE_PUBLIC&amp;lt;/tt&amp;gt; and one &amp;lt;tt&amp;gt;Q_Q&amp;lt;/tt&amp;gt; to hide the ugly parts of the implementation.&lt;br /&gt;
&lt;br /&gt;
== Inline Code ==&lt;br /&gt;
For binary compatibility reasons, try to avoid inline code in headers. Specifically no inline constructor or destructor.&lt;br /&gt;
&lt;br /&gt;
If ever you add inline code please note the following:&lt;br /&gt;
* Installed headers should compile with the following preprocessor defines: &amp;lt;tt&amp;gt;QT_NO_CAST_FROM_ASCII&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;QT_NO_CAST_TO_ASCII&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;QT_NO_KEYWORD&amp;lt;/tt&amp;gt;. So don't forget {{qt|QLatin1String}}.&lt;br /&gt;
* No C casts in the header. Use &amp;lt;tt&amp;gt;static_cast&amp;lt;/tt&amp;gt; if types are known. Use &amp;lt;tt&amp;gt;qobject_cast&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;dynamic_cast&amp;lt;/tt&amp;gt; if types are QObject based. dynamic_cast is not only slower, but is also unreliable across shared libraries.&lt;br /&gt;
* In general, check your code for [[Development/Tutorials/Common_Programming_Mistakes|common mistakes]].&lt;br /&gt;
&lt;br /&gt;
These recommendations are also true for code that are not in headers.&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
Try to avoid meaningless boolean parameters in functions. Example of a bad boolean argument:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
static QString KApplication::makeStdCaption( const QString &amp;amp;caption,&lt;br /&gt;
                                             bool withAppName,&lt;br /&gt;
                                             bool modified);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because when you read code that uses the above function, you can't easily know the significance of the parameters&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
window-&amp;gt;setCaption(KApplication::makeStdCaption( &amp;quot;Document Foo&amp;quot;,&lt;br /&gt;
                         true, true));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution is to use {{qt|QFlags}}. If the options only apply to one function, call the &amp;lt;tt&amp;gt;enum FunctionNameOption&amp;lt;/tt&amp;gt; and the QFlags typedef &amp;lt;tt&amp;gt;FunctionNameOptions&amp;lt;/tt&amp;gt;. Do that even if there is only one option, this will allow you to add more options later and keep the binary compatibility.&lt;br /&gt;
&lt;br /&gt;
So a better API would be:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class KApplication&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    /* [...] */&lt;br /&gt;
    enum StandardCaptionOption {&lt;br /&gt;
        /**&lt;br /&gt;
         * Indicates to include the application name&lt;br /&gt;
         */&lt;br /&gt;
        WithApplicationName = 0x01,&lt;br /&gt;
        /**&lt;br /&gt;
         * Note in the caption that there is unsaved data&lt;br /&gt;
         */&lt;br /&gt;
        Modified = 0x02&lt;br /&gt;
    };&lt;br /&gt;
    Q_DECLARE_FLAGS(StandardCaptionOptions, &lt;br /&gt;
                    StandardCaptionOption)&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Builds a caption using a standard layout.&lt;br /&gt;
     *&lt;br /&gt;
     * @param userCaption The caption string you want to display&lt;br /&gt;
     * @param options a set of flags from MakeStandartCaptionOption&lt;br /&gt;
     */&lt;br /&gt;
    static QString makeStandardCaption(const QString&amp;amp; userCaption,&lt;br /&gt;
       const StandardCaptionOptions&amp;amp; options = WithApplicationName);&lt;br /&gt;
    /* [...] */&lt;br /&gt;
};&lt;br /&gt;
Q_DECLARE_OPERATORS_FOR_FLAGS(KApplication::StandardCaptionOptions)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Const References ==&lt;br /&gt;
Each object parameter that is not a basic type (int, float, bool, enum,  or pointers) should be passed by reference-to-const. This is faster, because it is not required to do a copy of the object. Do that even for object that are already implicitly shared, like QString:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
QString myMethod( const QString&amp;amp; foo,&lt;br /&gt;
                  const QPixmap&amp;amp; bar,&lt;br /&gt;
                  int number );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Avoid const references for return types though. Returning for example&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
const QList&amp;lt;int&amp;gt; &amp;amp;someProperty() const;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
means exposing the internal data structure for someProperty() and it's very difficult to change it in the future while preserving binary compatibility. Especially for implicitly shared objects the one refcount that one avoids by returning a const reference is often not worth it the exposure of implementation.&lt;br /&gt;
&lt;br /&gt;
There are cases where it makes sense, where performance is absolutely critical and the implementation is very fixed. So think twice about it and consider returning a value instead:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
QList&amp;lt;int&amp;gt; someProperty() const;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Signals and Slots ==&lt;br /&gt;
In the libraries, use &amp;lt;tt&amp;gt;Q_SIGNALS&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Q_SLOTS&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;signals&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;slots&amp;lt;/tt&amp;gt;. They are syntactically equivalent and should be used to avoid conflicts with boost signals, and with python's use of &amp;quot;slots&amp;quot; in its headers.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
Consider using &amp;lt;tt&amp;gt;Q_PROPERTY&amp;lt;/tt&amp;gt; for properties. The reason is that properties (especially those marked &amp;lt;tt&amp;gt;SCRIPTABLE&amp;lt;/tt&amp;gt;) will be accessible through the javascript interface.&lt;br /&gt;
&lt;br /&gt;
If you follow the propname / setPropname naming scheme, moc sets a special flag for the {{qt|QMetaProperty}}.&lt;br /&gt;
&lt;br /&gt;
== Explicit Constructors ==&lt;br /&gt;
For each constructor (other than the copy constructor), check if you should make the constructor &amp;lt;tt&amp;gt;explicit&amp;lt;/tt&amp;gt; in order to minimize wrong use of the constructor.&lt;br /&gt;
&lt;br /&gt;
Basically, each constructor that may take only one argument should be marked &amp;lt;tt&amp;gt;explicit&amp;lt;/tt&amp;gt; unless the whole point of the constructor is to allow implicit casting.&lt;br /&gt;
&lt;br /&gt;
== Avoid including other headers in headers ==&lt;br /&gt;
Try to reduce as much as possible the number of includes in header files. This will generally help reduce the compilation time, especially for developers when just one header has been modified. It may also avoid errors that can be caused by conflicts between headers.&lt;br /&gt;
&lt;br /&gt;
If an object in the class is only used by pointer or by reference, it is not required to include the header for that object. Instead, just add a forward declaration before the class.&lt;br /&gt;
&lt;br /&gt;
In this example, the class KFoo uses KBar by reference, so we do not need to include KBar's header:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;kfoobase.h&amp;gt;&lt;br /&gt;
class KBar;&lt;br /&gt;
class KFoo : public KFooBase&lt;br /&gt;
{&lt;br /&gt;
    public:&lt;br /&gt;
        /* [...] */&lt;br /&gt;
        void myMethod(const KBar&amp;amp; bar);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting #includes right ==&lt;br /&gt;
&lt;br /&gt;
There are two types of #include statements: &amp;lt;tt&amp;gt;#include &amp;lt;foo.h&amp;gt;&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;#include &amp;quot;foo.h&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Say we have the file &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;/usr/include/mylib/&amp;lt;/tt&amp;gt; that contains the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;header1.h&amp;gt;&lt;br /&gt;
#include &amp;quot;header2.h&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The preprocessor will search for the file &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt; in all the paths given as &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; arguments and then replace the line with the contents of that file.&lt;br /&gt;
&lt;br /&gt;
For line 2 the preprocessor tries to use the file /usr/include/mylib/header2.h first and if it does not exist search for the file like it did for &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt;. The important part to note here is that the preprocessor does not look in the directory of the source file that includes &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; but in the directory where &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; resides.&lt;br /&gt;
&lt;br /&gt;
Now, which include statement is the one to use? After all you can specify every directory you want using &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; (or rather CMake's &amp;lt;tt&amp;gt;include_directories()&amp;lt;/tt&amp;gt;) and thus could use &amp;lt;tt&amp;gt;#include &amp;lt;...&amp;gt;&amp;lt;/tt&amp;gt; everywhere.&lt;br /&gt;
&lt;br /&gt;
=== As application developer ===&lt;br /&gt;
* Include headers from '''external''' libraries using '''angle brackets'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore/QDate&amp;gt;&lt;br /&gt;
#include &amp;lt;zlib.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Include headers from your '''own project''' using '''double quotes'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;myclass.h&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Rationale: ''The header files of external libraries are obviously not in the same directory as your source files. So you need to use angle brackets.''&lt;br /&gt;
&lt;br /&gt;
''Headers of your own application have a defined relative location to the source files of your application. Using KDE4's cmake macros your source directory is the first include switch to the compiler and therefore there's no difference in using angle brackets or double quotes. If you work with a different buildsystem that does not include the current source directory or disable CMAKE_INCLUDE_CURRENT_DIR then all includes (inside your application) using angle brackets will break.''&lt;br /&gt;
&lt;br /&gt;
''Ideally the buildsystem would not need to specify &amp;lt;tt&amp;gt;-I&amp;amp;lt;source directory&amp;amp;gt;&amp;lt;/tt&amp;gt; though as that can break with library headers that have the same filename as a header of your project (i.e.: If a library has the header file &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; and your project has a different file with the same filename the compiler will always pick the header from your project instead of the one from the library because the source directory of the project is specified first.)''&lt;br /&gt;
&lt;br /&gt;
=== As library developer ===&lt;br /&gt;
* Include headers from '''external''' libraries using '''angle brackets'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore/QDate&amp;gt;&lt;br /&gt;
#include &amp;lt;zlib.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Include headers of your '''own library''' and libraries that belong to it using '''double quotes'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;xyz.h&amp;quot; // same library and same directory&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rationale: ''The header files of external libraries are obviously not in a fixed location relative to your source files. So you need to use angle brackets.''&lt;br /&gt;
&lt;br /&gt;
''Headers of your own libraries have a fixed relative location in the filesystem. Therefore you'' can ''use double quotes. You should use double quotes because otherwise the include statement could include a different header file than expected. An example how angle brackets can break the build:''&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;tt&amp;gt;/usr/include/libxyz/xyz.h&amp;lt;/tt&amp;gt; includes &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; using angle brackets and expects to have it replaced with the contents of the file &amp;lt;tt&amp;gt;/usr/include/libzyx/foo.h&amp;lt;/tt&amp;gt;. Assuming there's another library that also ships a &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; file in the directory &amp;lt;tt&amp;gt;/usr/include/anotherlib/&amp;lt;/tt&amp;gt;. If the application that uses both libraries compiles with &amp;quot;&amp;lt;tt&amp;gt;g++ -I/usr/include/libxyz -I/usr/include/anotherlib ...&amp;lt;/tt&amp;gt;&amp;quot; libxyz will work as expected. If the application compiles with &amp;quot;&amp;lt;tt&amp;gt;g++ -I/usr/include/anotherlib -I/usr/include/libxyz ...&amp;lt;/tt&amp;gt;&amp;quot; the header &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; will include the file &amp;lt;tt&amp;gt;/usr/include/anotherlib/foo.h&amp;lt;/tt&amp;gt; instead of the file that is shipped with libxyz. The same problem can appear if an application has a header file of the same name as a library and specifies &amp;lt;tt&amp;gt;-I./&amp;lt;/tt&amp;gt; as the first include directory.''&lt;br /&gt;
&lt;br /&gt;
=== Include order ===&lt;br /&gt;
&lt;br /&gt;
Another important aspect of include management is the include order. Typically, you have a class named Foo, a file foo.h and a file foo.cpp . The rule is :&lt;br /&gt;
&lt;br /&gt;
: ''In your file foo.cpp, you should include &amp;quot;foo.h&amp;quot; as the first include, before the system includes.''&lt;br /&gt;
&lt;br /&gt;
The rationale behind that is to make your header standalone. &lt;br /&gt;
&lt;br /&gt;
Let's imagine that your foo.h looks like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Bar getBar();&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And your foo.cpp looks like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;bar.h&amp;quot;&lt;br /&gt;
#include &amp;quot;foo.h&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your foo.cpp file will compile, but it will not compile for other people using foo.h without including bar.h . Including &amp;quot;foo.h&amp;quot; first makes sure that your foo.h header works for others.&lt;br /&gt;
&lt;br /&gt;
=== Include guards ===&lt;br /&gt;
Header files should use guards to protect against possible multiple inclusion.&lt;br /&gt;
Your myfoo.h header should look like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef MYFOO_H&lt;br /&gt;
#define MYFOO_H&lt;br /&gt;
... &amp;lt;stuff&amp;gt;...&lt;br /&gt;
#endif /* MYFOO_H */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To be even more careful, you may want to encode a namespace or subdirectory name (e.g. KFOO) into the guard macro name, for example: MYFOO_H, KFOO_MYFOO_H, or _KFOO_MYFOO_H_ are all acceptable macro names.  By convention, the macro name should be all uppercase; but that is not a firm requirement.&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Global static objects in libraries should be avoided. You never know when the constructor will be run or if it will be run at all.&lt;br /&gt;
; Wrong&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
static QString foo; // wrong - object might not be constructed&lt;br /&gt;
static QString bar(&amp;quot;hello&amp;quot;); // as above&lt;br /&gt;
static int foo = myInitializer(); // myInitializer() might not be called&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In particular, &amp;lt;b&amp;gt;never&amp;lt;/b&amp;gt; construct QObject-derived objects this way. On Windows (MS Visual C++) the object's internals will be left uninitialized within a library and will lead to crashes ([http://www.kdedevelopers.org/node/2889 more info]).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
static QFile myFile(&amp;quot;abc&amp;quot;);  // QFile inherits QObject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
; Correct&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
static const int i = 42;&lt;br /&gt;
static const int ii[3] = {1, 2, 3};&lt;br /&gt;
static const char myString[] = &amp;quot;hello&amp;quot;;&lt;br /&gt;
static const MyStruct s = {3, 4.4, &amp;quot;hello&amp;quot;};&lt;br /&gt;
K_GLOBAL_STATIC(QFile, myFile);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use [http://api.kde.org/4.0-api/kdelibs-apidocs/kdecore/html/group__KDEMacros.html#g75ca0c60b03dc5e4f9427263bf4043c7 &amp;lt;tt&amp;gt;K_GLOBAL_STATIC&amp;lt;/tt&amp;gt;] macro (and for QObject-derived objects you should) to create global static objects which will be initialized the first time you use them.&lt;br /&gt;
&lt;br /&gt;
== Signal and Slot Normalization ==&lt;br /&gt;
Since &amp;lt;tt&amp;gt;QObject::connect&amp;lt;/tt&amp;gt; uses a string-based comparison&lt;br /&gt;
of the function signature, it requires some normalization to take&lt;br /&gt;
place. It does that automatically for you, but it takes some CPU&lt;br /&gt;
time, so, if it doesn't hurt your code's readability, normalize&lt;br /&gt;
manually your SIGNAL and SLOT entries.&lt;br /&gt;
&lt;br /&gt;
For example, you may have the following code:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
QObject::connect(this, SIGNAL( newValue(const QString&amp;amp;,&lt;br /&gt;
                                        const MyNamespace::Type&amp;amp;) ),&lt;br /&gt;
                 other, SLOT( value(const QString &amp;amp;) ));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
It would be preferable to write as follows:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
QObject::connect(this, SIGNAL(newValue(QString,MyNamespace::Type)),&lt;br /&gt;
                 other, SLOT(value(QString)));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the absence of extra whitespace and the&lt;br /&gt;
reduction of pass-by-reference-to-const parameters to simple&lt;br /&gt;
pass-by-value ones. The normalization may involve other&lt;br /&gt;
transformations, but these are the most common ones. Also note that&lt;br /&gt;
types in namespaces should always use the full qualified name.&lt;br /&gt;
To be sure what the proper normalization is, read the {{path|.moc}} file&lt;br /&gt;
generated for the class.&lt;br /&gt;
&lt;br /&gt;
'''Note''': If you are unsure about the normalization, don't do it. Let&lt;br /&gt;
QObject do it for you (the performance penalty is negligible in most cases).&lt;br /&gt;
&lt;br /&gt;
== External Dependencies ==&lt;br /&gt;
When a library pulls in a new external dependency due to a new feature or a change in implementation, it is highly preferred to make that dependency optional if at all possible. For some core features in a library this may not be possible, but usually it is even if the cost is a degradation in features when built without that dependency.&lt;br /&gt;
&lt;br /&gt;
All dependencies should be adequately documented in the build system so that they appear in the summary post-configure.&lt;br /&gt;
&lt;br /&gt;
For libraries in the '''kdelibs module''', this is a hard requirement: '''no new non-optional dependencies may be added, all new dependencies must be made optional at configure time'''. Exceptions may be granted for unusual circumstances by sending a request to the kde-core-devel at kde.org mailing list and getting a consensus decision to grant an exception there.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Every class and method should be well documented. Read the [[Policies/Library Documentation Policy|KDE Library Documentation Policy]] for the guidelines to follow when documenting your code.&lt;br /&gt;
&lt;br /&gt;
Also don't forget the license headers and copyrights in each file. As stated in the [[Policies/Licensing Policy|Licensing Policy]], kdelibs code must be licensed under the LGPL, BSD, or X11 license.&lt;br /&gt;
&lt;br /&gt;
Author: [mailto:ogoffart@kde.org Olivier Goffart] March 2006&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/CMake/DashboardBuilds</id>
		<title>Development/CMake/DashboardBuilds</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/CMake/DashboardBuilds"/>
				<updated>2012-06-27T12:46:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* For which modules/packages are there dashboards ? */ KOffice -&amp;gt; Calligra (KOffice does not seem to exist there)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is a dashboard ? =&lt;br /&gt;
&lt;br /&gt;
A dashboard can show the results of Nightly and Continuous builds of a software package. This includes warnings and errors from the configure and build process as well as the results of the executed tests belonging to the software package. This is not only displayed for one machine, but ideally for all supported operating systems such results are submitted, also with different configurations, e.g. one for a minimal system with most optional features disabled and one for a full featured system.&lt;br /&gt;
&lt;br /&gt;
For KDE [http://www.cdash.org CDash-based] dashboards are set up at http://my.cdash.org, a service provided by [http://www.kitware.com Kitware]. CDash only displays the results, the actual building and testing is done decentral on other machines.&lt;br /&gt;
When failures occur, like build errors or failed tests, notification emails can be sent by CDash.&lt;br /&gt;
So by building and testing KDE each day on the supported platforms and collecting the results in a central place, we can make sure that KDE stays compiling and also working on all supported platforms.&lt;br /&gt;
&lt;br /&gt;
You can help too to increase the quality by setting up a Nightly build and submitting the results to http://my.cdash.org.&lt;br /&gt;
&lt;br /&gt;
= For which modules/packages are there dashboards ?=&lt;br /&gt;
&lt;br /&gt;
Currently there are dashboards set up for all modules of KDE, and one for kdesupport. There are not yet dashboards for extragear.&lt;br /&gt;
If you are interested in setting dashboards up for these too, just go to http://my.cdash.org and do it, or ask on the kde-buildsystem mailing list if you have any questions.&lt;br /&gt;
&lt;br /&gt;
So, here comes the list of currently existing KDE dashboards:&lt;br /&gt;
&lt;br /&gt;
* kdesupport&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdesupport kdesupport]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=automoc4 automoc4]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=akonadi Akonadi]&lt;br /&gt;
&lt;br /&gt;
* KDE&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdeaccessibility kdeaccessibility]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdeadmin kdeadmin]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdeartwork kdeartwork]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdebase-apps kdebase/apps]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdebase-runtime kdebase/runtime]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdebase-workspace kdebase/workspace]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdebindings kdebindings]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdeedu kdeedu]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdeexamples kdeexamples]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdegames kdegames]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdegraphics kdegraphics]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdelibs kdelibs]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdemultimedia kdemultimedia]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdenetwork kdenetwork]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdepim kdepim]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdepimlibs kdepimlibs]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdeplasma-addons kdeplasma-addons]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdesdk kdesdk]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdetoys kdetoys]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdeutils kdeutils]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=kdewebdev kdewebdev]&lt;br /&gt;
** [http://my.cdash.org/index.php?project=Calligra Calligra]&lt;br /&gt;
&lt;br /&gt;
= How to set up a Nightly build =&lt;br /&gt;
&lt;br /&gt;
Setting up a Nightly build and this way contributing to keep KDE working is not hard.&lt;br /&gt;
&lt;br /&gt;
You need:&lt;br /&gt;
* A computer. It should be running the Nightly build ''every day'', at some time after 20:00 CET (for the Nightly builds the state of the repository at 20:00 CET is used).&lt;br /&gt;
* A KDE development environment installed on this computer, i.e. &lt;br /&gt;
** CMake &amp;gt;= 2.6.2, &amp;gt;= 2.8.0 is recommended for the Nightly builds (better warning and error reporting)&lt;br /&gt;
** Compiler etc.&lt;br /&gt;
** Subversion client&lt;br /&gt;
** Qt4 and the other required libraries for building KDE4&lt;br /&gt;
* Some time to maintain the Nightly build, i.e. to upgrade the required libraries, e.g. Qt4 when necessary, to install new required libraries etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Under Unix ==&lt;br /&gt;
&lt;br /&gt;
This applies to Linux, FreeBSD and other Unixes. It should also apply to Mac OSX, but this hasn't been tested yet.&lt;br /&gt;
You can figure out how to set up the Nightly builds yourself, but we have also something prepared to make it really easy. Let's assume you want to contribute a Nightly build for the kdeutils modules. That's how you do it:&lt;br /&gt;
&lt;br /&gt;
* Go to http://my.cdash.org and register&lt;br /&gt;
* Once registered, subscribe to the kdeutils project&lt;br /&gt;
* Checkout trunk/quality/nightly-support/ from KDE svn. There, in the KDE/ subdirectory is a ctest-script ready to use for each KDE module.&lt;br /&gt;
* Write a shell script which sets the CMAKE_PREFIX_PATH environment variable so that CMake will find everything required and then execute ctest with the KDEUtilsNightly.cmake script. This will look something like the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
  CMAKE_PREFIX_PATH=/opt/kde-qt:/opt/phonon:/what/ever/else/you/need&lt;br /&gt;
  ctest -V -S /where/you/checked/out/KDE/KDEUtilsNightly.cmake,KDE_CTEST_BUILD_SUFFIX=gcc-4.2.3&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it basically. The -V option for ctest makes ctest verbose, so you can see what it's doing. The KDE_CTEST_BUILD_SUFFIX will be appended to the buildname displayed at http://my.cdash.org/index.php?project=kdeutils. Setting it to the used compiler is a sensible choice.&lt;br /&gt;
&lt;br /&gt;
* Set up a cron job which runs this script every day:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
  $ crontab -e&lt;br /&gt;
  00 22 * * * /where/is/my/script/run_kdeutils_nightly.sh&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it. Probably you first want to run the script manually a few times until everything works, but after that you can just have it executed via cron.&lt;br /&gt;
The next day you should then see your results on http://my.cdash.org.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to contribute Nightly builds for more than one KDE module, it gets a little bit more complicated. You have to make sure that the modules are built in the right order, and that the modules are installed correctly, if other modules depend on them. For examples see kdesdk/cmake/nightly-support/example-scripts/, e.g. [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/cmake/nightly-support/example-scripts/Nightlys-2.6.2 Nightlys-2.6.2] is the shell script I use on my machine to build (and install where necessary) all KDE modules on my Linux machine.&lt;br /&gt;
&lt;br /&gt;
== Under Windows ==&lt;br /&gt;
&lt;br /&gt;
Nobody has done this yet for KDE AFAIK, but it should be quite similar. If you intend to do this, please contact the kde-buildsystem mailing list, we will do our best to get it working quickly.&lt;br /&gt;
&lt;br /&gt;
= How to get notification emails =&lt;br /&gt;
&lt;br /&gt;
So, you don't want to/cannot submit a Nightly build, but you want to receive notification emails from CDash if the compilation of one of the projects fails or if test cases fail.&lt;br /&gt;
&lt;br /&gt;
If that's the case, you need to &lt;br /&gt;
* Go to http://my.cdash.org and register. You will get a confirmation email.&lt;br /&gt;
* Once you have a valid login at http://my.cdash.org, go there&lt;br /&gt;
** Login&lt;br /&gt;
** Click the &amp;quot;My CDash&amp;quot; link in the top left corner&lt;br /&gt;
** Then, click &amp;quot;Show public projects&amp;quot;&lt;br /&gt;
** Search the project you are interested in and click &amp;quot;Subscribe&amp;quot;&lt;br /&gt;
** Go to the &amp;quot;Email preference&amp;quot; and &amp;quot;Email category&amp;quot; tabs and configure what emails you want to receive.&lt;br /&gt;
&lt;br /&gt;
That's all. Now you should receive notification emails whenever problems in this project occur.&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
&lt;br /&gt;
== More fine grained email notifications ==&lt;br /&gt;
&lt;br /&gt;
In order to be really useful for KDE, we need more fine grained email notifications. CDash supports &amp;quot;subprojects&amp;quot;, and users can register to get emails just for subprojects. Setting up these subprojects currently needs quite some manual work: http://www.kitware.com/products/html/CDashSubprojects.html&lt;br /&gt;
&lt;br /&gt;
It would be nice to have a CMake command which takes a list of project()-names and generates the CDash-subproject files, with correct dependencies etc. for them. This needs work in CMake itself.&lt;br /&gt;
&lt;br /&gt;
== Extended viewing methods in CDash ==&lt;br /&gt;
&lt;br /&gt;
Currently in CDash you can see everything for one project at once.&lt;br /&gt;
For KDE we need an additional mode: see everything for one operating system or submitted by one host, also to multiple projects, at once. This way e.g. our Windows contributors would have a quick way to get an overview how KDE is doing on Windows today. This needs work in CDash.&lt;br /&gt;
&lt;br /&gt;
== Dependent builds ==&lt;br /&gt;
&lt;br /&gt;
Building of some modules should be triggered when other modules have changed, e.g. when kdelibs has been built all other modules should be built. This needs work on the CTest-scripts which drive the Nightly builds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to get help=&lt;br /&gt;
&lt;br /&gt;
If you have any questions regarding Nightly or Continuous builds for KDE or about CDash or CTest in general, please ask on the [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem] or [https://mail.kde.org/mailman/listinfo/kde-core-devel kde-core-devel] KDE mailing lists, or also on the [http://public.kitware.com/cgi-bin/mailman/listinfo/cdash CDash mailing list].&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Git/Configuration</id>
		<title>Development/Git/Configuration</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Git/Configuration"/>
				<updated>2012-06-18T19:53:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Multiple Work Branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git Configuration ==&lt;br /&gt;
&lt;br /&gt;
How to set up Git for use in KDE.&lt;br /&gt;
&lt;br /&gt;
=== Quick Start ===&lt;br /&gt;
&lt;br /&gt;
To quickly set up git to just build a copy of KDE you do not need to perform any git configuration, however the following steps will simplify using Git:&lt;br /&gt;
&lt;br /&gt;
* [[../Configuration#URL_Renaming|URL Renaming]]&lt;br /&gt;
&lt;br /&gt;
If you plan to commit to a KDE repository using Git then you should follow all the steps on this page.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Levels ===&lt;br /&gt;
&lt;br /&gt;
Your Git configuration operates at 3 levels:&lt;br /&gt;
* System&lt;br /&gt;
* User&lt;br /&gt;
* Repository&lt;br /&gt;
&lt;br /&gt;
The System Level sets up global Git configuration defaults for every User and Repository on your system.  We will ignore these for our purposes as they are usually blank.&lt;br /&gt;
&lt;br /&gt;
The User Level (aka Global) sets up the default configuration for a particular User to apply to all repositories used by that User.  Settings made at this level will always override any matching System Level settings.  The User Configuration is stored in your ~/.gitconfig file.&lt;br /&gt;
&lt;br /&gt;
The Repository Level sets up the configuration for a particular Repository clone.  Settings made at this level will always override any matching User or System Level settings.  The Repository Configuration is stored in the repository .git/config file.&lt;br /&gt;
&lt;br /&gt;
The recommended KDE Git Configuration will set some settings at a user level and some at a repository level.  You may wish to change the level some settings apply at however as we will assume you only or mostly use Git for developing KDE.&lt;br /&gt;
&lt;br /&gt;
You can set Git settings either by directly editing the config files, but it is far safer to use the ''git config'' command.&lt;br /&gt;
&lt;br /&gt;
To set a Git setting at User level (i.e. in ~/.gitconfig):&lt;br /&gt;
&lt;br /&gt;
 git config --global &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set a Git setting at repo level (i.e in &amp;lt;repo&amp;gt;/.git/config):&lt;br /&gt;
&lt;br /&gt;
 cd &amp;lt;repo&amp;gt;&lt;br /&gt;
 git config &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic Settings ===&lt;br /&gt;
&lt;br /&gt;
If you plan to commit to KDE Git, then you will need to set up git to use your identity.kde.org name and details to help identify your work:&lt;br /&gt;
&lt;br /&gt;
 git config --global user.name &amp;lt;Your Real Name&amp;gt;&lt;br /&gt;
 git config --global user.email &amp;lt;Your identity.kde.org email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name and email address you configure will be used as the author information for every commit you make. Note that in order for commit message keywords such as BUG and CCBUG to work, your Bugzilla account email address has to match the email address used in your commits.&lt;br /&gt;
&lt;br /&gt;
To enable colored output when using git:&lt;br /&gt;
&lt;br /&gt;
 git config --global color.ui true&lt;br /&gt;
&lt;br /&gt;
=== Commit Template ===&lt;br /&gt;
&lt;br /&gt;
The Commit Template is a standard layout for commit messages, usually containing instructions for how a project expects messages to formatted and what details are to be included.  You can choose to set a User Level template as a default, then use any project level variations at a repo level.&lt;br /&gt;
&lt;br /&gt;
It is recommended to use the kdelibs template as your default.  Once you have cloned kdelibs then set as follows to ensure you use the latest available version:&lt;br /&gt;
&lt;br /&gt;
 git config --global commit.template &amp;lt;path/to/kdelibs/&amp;gt;.commit-template&lt;br /&gt;
&lt;br /&gt;
If you don't plan to have kdelibs cloned then download the kdelibs template from [https://projects.kde.org/projects/kde/kdelibs/repository/revisions/master/raw/.commit-template here], save as ~/.commit-template, and configure to use that copy:&lt;br /&gt;
&lt;br /&gt;
 git config --global commit.template ~/.commit-template&lt;br /&gt;
&lt;br /&gt;
When cloning other KDE repositories, you should check to see if they have a project specific commit template, and if so you should set that at a repo level:&lt;br /&gt;
&lt;br /&gt;
 cd &amp;lt;repo&amp;gt;&lt;br /&gt;
 git config commit.template .commit-template&lt;br /&gt;
&lt;br /&gt;
=== Exclusion rules ===&lt;br /&gt;
It's often necessary or desirable to limit the types of files that git will consider when commands like 'git status' and 'git add' or 'git add --all' are run. There are 2 types of exclusion rules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first, is a .gitignore in the repository. This text file will contain a list of wildcard expressions to ignore files and/or dirs. It can also contain bash-like comments (#) in addition to new lines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second method is similar to the first, except it is specified globally and will override (and add to) settings specified on a per-repository basis. This file can be named whatever, wherever, as long as it is specified in your ~/.gitconfig file.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example .gitexcludes file can be found in kdelibs from [https://projects.kde.org/projects/kde/kdelibs/repository/revisions/master/raw/.gitexcludes here], save as ~/.gitexcludes, and configure to use that copy using:&lt;br /&gt;
&lt;br /&gt;
 git config --global core.excludesfile ~/.gitexcludes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or alternatively, edit ~/.gitconfig manually and specify:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [core]&lt;br /&gt;
    excludesfile = ~/.gitexcludes&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remember that this file is meant to be a global exclusion rule, so you probably shouldn't use it on a per-repo basis unless you really feel the need. The file excludes archive files (tar, gz, 7z, rar, etc.) as well as .directory, thumbs.db(Microsoft Windows file), .swp (swap file, used for vim and kate), as well as many many others.&lt;br /&gt;
&lt;br /&gt;
=== Push Default ===&lt;br /&gt;
&lt;br /&gt;
It is recommended for new Git users to set the push default to nothing:&lt;br /&gt;
&lt;br /&gt;
 git config --global push.default nothing&lt;br /&gt;
&lt;br /&gt;
This option forces you to ''always'' enter the name of the remote branch you wish to push to, rather than using a default value.  This is good practice as it ensures you push to the correct remote branch and avoid accidentally pushing all local branches to the remote.&lt;br /&gt;
&lt;br /&gt;
More experienced users may wish to set the option to tracking:&lt;br /&gt;
&lt;br /&gt;
 git config --global push.default tracking&lt;br /&gt;
&lt;br /&gt;
This will default to push to the remote branch your local branch is tracking, but if you setup your local branch incorrectly you may still accidentally push to the wrong remote.&lt;br /&gt;
&lt;br /&gt;
=== URL Renaming ===&lt;br /&gt;
&lt;br /&gt;
Instead of having to remember and type in the different full git addresses for pulling and pushing, we recommend you manually add the following to your Git User Configuration (~/.gitconfig):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[url &amp;quot;git://anongit.kde.org/&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     insteadOf = kde:&lt;br /&gt;
 [url &amp;quot;git@git.kde.org:&amp;quot;]&lt;br /&gt;
     pushInsteadOf = kde:&lt;br /&gt;
&lt;br /&gt;
=== Bash Auto-Completion ===&lt;br /&gt;
&lt;br /&gt;
Bash auto-completion for Git commands and branches may or may not work out-of-the-box for you depending on how Git is installed on your system.  To see if you have auto-completion already working type ''git'' on your command line followed by a space and hit the ''tab'' key twice.  If you see a list of available git commands then you have Git auto-completion enabled.&lt;br /&gt;
&lt;br /&gt;
If auto-completion does not work for you then you can download the [http://git.kernel.org/?p=git/git.git;a=blob_plain;f=contrib/completion/git-completion.bash;hb=HEAD git-completion.bash] script and follow the instructions inside it.&lt;br /&gt;
&lt;br /&gt;
=== Bash Prompt ===&lt;br /&gt;
&lt;br /&gt;
If you have git-completion.bash installed, you can also add details like the branch name and dirty status to your command prompt, which will save repeated uses of ''git branch'' and ''git status''.&lt;br /&gt;
&lt;br /&gt;
To activate this, you need to add the following to your $PS1 environment variable:&lt;br /&gt;
&lt;br /&gt;
 $(__git_ps1 &amp;quot; (%s)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Note that in the &amp;quot; (%s)&amp;quot; part the %s variable is replaced with the branch name, the rest of the text between the quotes is up to you.&lt;br /&gt;
&lt;br /&gt;
If you have not set a PS1 value yourself, then you are likely to be using your distro default value which you can find out by typing:&lt;br /&gt;
&lt;br /&gt;
 echo $PS1&lt;br /&gt;
&lt;br /&gt;
To change this for your user, edit your .bashrc and copy the result of the echo command into there, then change it to add the Git branch.&lt;br /&gt;
&lt;br /&gt;
For example, if ''echo $PS1'' shows:&lt;br /&gt;
&lt;br /&gt;
 $(ppwd \l)\u@\h:\w&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then add the following to your .bashrc:&lt;br /&gt;
&lt;br /&gt;
 PS1='$(ppwd \l)\u@\h:\w$(__git_ps1 &amp;quot; (%s)&amp;quot;)&amp;gt; ' &lt;br /&gt;
&lt;br /&gt;
which will show your prompt as follows:&lt;br /&gt;
&lt;br /&gt;
 odysseus@argo:~/kde/src/trunk/KDE/kdelibs (master + u+2)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can learn more about customizing your bash prompt at http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/.&lt;br /&gt;
&lt;br /&gt;
You can also have the prompt show the 'dirty' status of your repo, i.e. if you have uncommited changes, and whether your branch differs from upstream HEAD:&lt;br /&gt;
&lt;br /&gt;
* * = unstaged changes&lt;br /&gt;
* + = staged changes&lt;br /&gt;
* $ = stashed changes&lt;br /&gt;
* % = untracked files&lt;br /&gt;
* u-1 = behind upstream by 1 commit&lt;br /&gt;
* u+2 = ahead of upstream by 2 commits&lt;br /&gt;
* u= = same as upstream&lt;br /&gt;
&lt;br /&gt;
To enable showing the dirty (unstaged/staged) state, add the following line to your .bashrc 'before' your PS1 setting:&lt;br /&gt;
&lt;br /&gt;
 export GIT_PS1_SHOWDIRTYSTATE=1&lt;br /&gt;
&lt;br /&gt;
To enable showing the stashed state, add the following line to your .bashrc ''before'' your PS1 setting:&lt;br /&gt;
&lt;br /&gt;
 export GIT_PS1_SHOWSTASHSTATE=1&lt;br /&gt;
&lt;br /&gt;
To enable showing the untracked state, add the following line to your .bashrc ''before'' your PS1 setting:&lt;br /&gt;
&lt;br /&gt;
 export GIT_PS1_SHOWUNTRACKEDFILES=1&lt;br /&gt;
&lt;br /&gt;
To enable showing the upstream state, add the following line to your .bashrc ''before'' your PS1 setting:&lt;br /&gt;
&lt;br /&gt;
 export GIT_PS1_SHOWUPSTREAM=&amp;quot;auto verbose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To not show the number of commits ahead or behind remove the &amp;quot;verbose&amp;quot; flag.&lt;br /&gt;
&lt;br /&gt;
To disable showing the dirty state for any one repo:&lt;br /&gt;
&lt;br /&gt;
 cd &amp;lt;repo&amp;gt;&lt;br /&gt;
 git config bash.showDirtyState false&lt;br /&gt;
&lt;br /&gt;
To disable showing the upstream state for any one repo:&lt;br /&gt;
&lt;br /&gt;
 cd &amp;lt;repo&amp;gt;&lt;br /&gt;
 git config bash.showUpstream false&lt;br /&gt;
&lt;br /&gt;
=== Multiple Work Branches ===&lt;br /&gt;
&lt;br /&gt;
You will often want to have more than one build environment in parallel, for example if you want to work on both stable and unstable branches at the same time.&lt;br /&gt;
&lt;br /&gt;
With Git you can easily have many work branches in your repository and easily switch between them.  The problem here however is that you can only work on the one branch at a time, and switching branches will usually trigger a massive rebuild of the entire repository.  &lt;br /&gt;
&lt;br /&gt;
One solution would be to have a separate repository clone for each branch you wish to work on in parallel, but this takes up more disk space, the clones and branches can easily get out-of-sync, and it makes forward/back porting bug fixes between branches more difficult.  If choosing this method then you should make each new clone from your initial local clone rather than from the main repo as this will be quicker.&lt;br /&gt;
&lt;br /&gt;
The ideal solution is for a single git repository clone to provide separate source directories for each branch you wish to work on, without performing full clone (what consumes disk space and requires fetching each clone separately). This can be achieved using the '''git-new-workdir''' script provided in the Git contrib directory.  This script uses symbolic links to create what appears as a new clone in a separate folder but actually uses the same local clone.&lt;br /&gt;
&lt;br /&gt;
The git-new-workdir script may be installed as part of your system git.  If not download the script from [https://github.com/git/git/raw/master/contrib/workdir/git-new-workdir the git repo] and install in your ~/.bin.&lt;br /&gt;
&lt;br /&gt;
For example, assuming your have a kdelibs.git clone living in ~/kde/src/master/kdelibs, then the following command will create a 4.6 work branch in ~/kde/src/4.6/kdelibs:&lt;br /&gt;
&lt;br /&gt;
 git-new-workdir ~/kde/src/master/kdelibs ~/kde/src/4.6/kdelibs KDE/4.6&lt;br /&gt;
&lt;br /&gt;
== RSA Key fingerprint for git.kde.org==&lt;br /&gt;
c8:45:ba:89:85:11:78:b5:a4:09:d9:31:f6:7f:7c:79&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Oxygen/Missing_Icons</id>
		<title>Projects/Oxygen/Missing Icons</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Oxygen/Missing_Icons"/>
				<updated>2012-05-09T19:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The page will help Oxygen team to track and produce icons that are currently missing in KDE4. Additionally it will help developers to make requests for icons that they need for KDE4 related projects.&lt;br /&gt;
&lt;br /&gt;
{{warning|This page is '''deprecated''', the artists don't look here. Icon requests have to go to OpenDocument spreadsheets in SVN at [http://websvn.kde.org/trunk/playground/artwork/Oxygen/docs/ trunk/playground/artwork/Oxygen/docs.]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Instructions to fill out the request =&lt;br /&gt;
&lt;br /&gt;
* This page, being a wiki, obviously does not validate your request. Please take care when providing information about the icons. Note that this page is mainly for the team to know where is mostly needed the work, we'll do our best to fullfill your requests for 4.0 but however we can't guarantee that. =)&lt;br /&gt;
&lt;br /&gt;
* When providing icon names please try to make them compatible with the actual naming scheme.&lt;br /&gt;
&lt;br /&gt;
* Please provide clear but short descriptions about the icons, it needs to help the artists in imagining a good metaphore to make your icon. '''This point is extremely important'''. You may obviously also link your description if it's going to be lengthy. This will help us to manage icon requests, and check if there are any possible duplicates. The most descriptive you are, the best it is for us.&lt;br /&gt;
&lt;br /&gt;
* Screenshots are sometimes a better way to easily show the usage of the icon. Provide metaphores when possible this will help the artist to visualize our reqest faster and give a better understanding of the reqest.&lt;br /&gt;
&lt;br /&gt;
* As someone already noted, this is not the right page to complain or make suggestions about existing icon, this is just to know the remaining work.&lt;br /&gt;
&lt;br /&gt;
* Please sort by module/application/priority&lt;br /&gt;
&lt;br /&gt;
= Missing Icons Table =&lt;br /&gt;
&lt;br /&gt;
== General purpose icons ==&lt;br /&gt;
For icons like the folder, or the desktop.&lt;br /&gt;
&lt;br /&gt;
{|rules=&amp;quot;all&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=center style=&amp;quot;border:1px solid #999; border-right:2px solid #999; border-bottom:2px solid #999;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Icon Name&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Description / Where can be found?&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Done?&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Assigned To&lt;br /&gt;
|-----&lt;br /&gt;
|| mimetypes/application-x-chm || Icon for *.chm (HTML Help files). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| mimetypes/application-x-dvi || Icon for *.dvi (files produced by LaTeX). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| mimetypes/application-x-fictionbook || Icon for *.fb2 (FictionBook document, opens in Okular) and soon *.fb3 (not sure if it will have the same mimetype). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| mimetypes/image-x-nikon-nef || Icon for *.nef (Nikon raw image file). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| Question mark in message box || ||  &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
|| Warning icon in message box || ||  &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KDE main modules ==&lt;br /&gt;
For apps in trunk/KDE/&lt;br /&gt;
&lt;br /&gt;
{|rules=&amp;quot;all&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=center style=&amp;quot;border:1px solid #999; border-right:2px solid #999; border-bottom:2px solid #999;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Module&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Application&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Icon Name&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Description / Where can be found?&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Done?&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Assigned To&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kInfoCenter || devices/button || Icon for the device button found from Solid || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kInfoCenter || apps/dma || Icon for the DMA KCM || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kInfoCenter || apps/interrupts || Icon for the Interrupts KCM || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kInfoCenter || apps/ioports || Icon for the ioports KCM || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kInfoCenter || apps/scsi || Icon for the SCSI KCM || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kInfoCenter || apps/pci || Icon for the PCI Kcm || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kInfoCenter || apps/infosummary || Icon for the InfoSummary KCM || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kInfoCenter || apps/view1394 || Icon for the View1394 KCM || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || khelpcenter || actions/help-contents-alternate || help-contents as open book (used in the glossary tab for example) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || konqueror || actions/edit-undo-close-tab || konqueror undo closed tab [jpetso says: low priority, has a fallback to edit-undo] || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || konqueror || apps/preferences-system-network-proxy || konqueror configuration dialog Proxy || &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; || Pinheiro&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kwin|| apps/preferences-system-windows-effect || Generic effect icon || &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;In Progress&amp;lt;/span&amp;gt; || Pinheiro&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kwin|| apps/preferences-desktop-effect || Desktop effects config module || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kwin|| apps/preferences-system-windows-effect-boxswitch || Boxswitch (alt-tab) effect (low priority) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kwin|| apps/preferences-system-windows-effect-desktop-grid || Desktopgrid (desktop switcher) effect (low priority) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kwin|| apps/preferences-system-windows-effect-presentwindows || Presentwindows effect (low priority) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || Leeo&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kwin|| apps/preferences-system-windows-effect-shadow || Shadow effect (low priority) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || kwrite || apps/preferences-plugin-word-completion-ktexteditor || KWrite word completion plugin || &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; || swalko &lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || drkonqi || apps/drkonqi || icon for the kde crash manager ||&amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; || pinheiro&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || powerdevil || workspace/powerdevil/kcmodule || I miss an icon for &amp;quot;Do nothing&amp;quot;. This could be useful also for other apps. I'd also like to have a &amp;quot;dynamic&amp;quot; icon , and a &amp;quot;conservative&amp;quot; one (for CPU governors) || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || systemsettings || apps/preferences-desktop-screen-edges || Screen edges desktop config module || &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt; &amp;lt;/span&amp;gt; || &lt;br /&gt;
|-----&lt;br /&gt;
|| extragear || show dashboard || places/user-dashboard || icon for the show dashboard plasmoid ||&amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; || pinheiro&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete (misc) || (various) || Emoticons for Kopete, See [[../Missing_Emoticons]] || &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;In Progress&amp;lt;/span&amp;gt; in the emoticons sub dir in trunk || dmiller&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || systray icons || Systray icons indicating status other than online are based on the old kopete icon. Proposal for an update: http://dev.gentoo.org/~earthwings/misc/kopete_icons/ [jpetso says: hm... maybe we could get rid of these special icons by programmatically combining the application icon with the user status icons as emblems? That would be pretty flexible in communicating information (up to four different states shown at once) and would avoid other themes having an inconsistent look if they draw the Kopete icon but not the systray variants.] [Earthwings replies: Good idea, doesn't work for the &amp;quot;all-away&amp;quot; variant but that is more or less superfluous anyway. I'll look at implementing this. Edit: Done]&lt;br /&gt;
 || &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
||plasma||networkmanager|| network-wireless.svg || panel &amp;quot;icon&amp;quot; for plasma, shows a wireless connection, and 3 - 4 steps of signal strength, 3 steps for connection stages, ad-hoc connection mode ||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
||plasma||networkmanager|| network-wired.svg || panel &amp;quot;icon&amp;quot; for plasma, shows a connected or disconnected wired network device, 3 steps for connection stages||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
||plasma||networkmanager|| network-mobile.svg || panel &amp;quot;icon&amp;quot; for plasma, shows a connected or disconnected mobile broadband device and 3 - 4 steps of signal strength, 3 steps for connection stages ||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
||plasma||networkmanager|| network-VPN.svg || panel &amp;quot;icon&amp;quot; for plasma, shows a connected or disconnected VPN connection, 3 steps for connection stages ||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
||plasma||networkmanager|| actions/network-connect || icon to be used on &amp;quot;connect to this network&amp;quot; buttons ||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
||plasma||networkmanager|| actions/network-disconnect || icon to be used on &amp;quot;disconnect from this network&amp;quot; buttons ||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
|| koffice || koffice icons || (various) See http://wiki.koffice.org/index.php?title=Icons || various. icon names listed there are badly broken at the moment, take that wiki with a grain of salt. ||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| koffice || Chart shape ||  || icons for pie chart, ring chart and scatter chart. And nicer icons for bar, line, area and polar charts :-) And the bars, lines and area are needed in 3 variations: normal, stacked and percent || &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;In Progress&amp;lt;/span&amp;gt; ||Pinheiro&lt;br /&gt;
|-----&lt;br /&gt;
|| koffice || Karbon ||  || icon for zoom to selection, icon for zoom to document content; both icons appear in the status bar beside the zoom slider ||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeedu || kalgebra || apps/kalgebra || Application Icon kdeedu/kalgebra/icons || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeedu || klettres || klettres_kids  &amp;amp;  klettres_grownup || Application Icon for Klettres [http://edu.kde.org/klettres/], a letter learning program. my idea was this:  http://www.bdgraue.de/files/images/klettres_kids.svg   http://www.bdgraue.de/files/images/klettres_grownup.svg  i think, someone can do it better . here is a screenshot from klettres where you can see the old icons for 'mode kids' and mode 'grown up': http://edu.kde.org/klettres/  || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeedu || parley || action/insert-row &amp;amp; action/insert-column || Add a new entry in parley || &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;In Progress&amp;lt;/span&amp;gt; (jpetso: done already?) || Leeo&lt;br /&gt;
|----&lt;br /&gt;
|| kdeedu || step || icons for physical objects in Step||Screenshots of current (quite ugly) icons is available on [http://edu.kde.org/step step homepage]. ||||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || kjots || apps/kjots or view-pim-notebooks || Icon for note taking application kjots. ||&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || actions/task-new || The icon for the &amp;quot;New Todo&amp;quot; action. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || actions/journal-new || The icon for the &amp;quot;New Journal&amp;quot; action. I guess view-pim-journal overlayed with the plus icon should do. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || actions/address-book-open || An icon for viewing, opening or selecting from an address book. Also used somewhere else (KAlarm, I believe), and combined with a plus icon it would be possible to get the specified address-book-new icon. [jpetso: Should we just use (copy) mimetypes/x-office-address-book?] || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || apps/preferences-calendar-freebusy || An icon for configuring free/busy time. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || status/appointment-recurring || An icon to show a recurring event. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || status/task-recurring || An icon to show a recurring incidence (event, to-do or journal). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || status/task-complete || An icon to show a completed incidence (event, to-do or journal). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || status/task-inprogress || An icon to show an incidence (event, to-do or journal) is in-progress to being completed. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || status/task-needsattention || An icon to show incidence (event, to-do or journal) needs attention or action. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || status/appointment-reminder || An icon for an event with a reminder. See the note for status/task-reminder below.|| &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || status/task-reminder || An icon to show an incidence (event, to-do or journal) with a reminder. Perhaps could be similar or identical to apps/preferences-desktop-notification-bell - we're using this one for now as a temporary replacement ([[User:Jstaniek|jstaniek]] 16:52, 12 March 2008 (CET)). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || actions/meeting-attending || An icon to show that you will attend a meeting || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || actions/meeting-attending-tentative || An icon to show that you are tentatively scheduled to attend a meeting || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korganizer || status/meeting-organizer || An icon to show that you are the person who organized and is in charge of a meeting || &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korgac || actions/reminder-suspend || suspend a calendar reminder(s) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korgac || actions/reminder-dismiss || dismiss calendar reminder(s) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || korgac || actions/reminder-enable || enable calendar reminder(s) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || kontact || status/event-birthday || maybe a cake with candles to represent someone's birthday || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || kontact || status/event-anniversary || to represent a wedding anniversary || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || kontact || planner || to represent a daily planner (show your appointments, stuff to-do, meetings, etc in an organized way) || [jpetso: I think view-pim-summary (already in Oxygen) is the right icon for this.] ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || kontact || status/event-special || to represent a general special occassion. examples: holidays, birthdays, graduation, etc || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || kontact || status/event-holiday || a non-religious holiday.  examples: independence day, new years, etc || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || kitchensync || actions/sync-start || The action to initiate a synchronization between to devices. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || akregator || actions/feed-fetch || The action to fetch a newsfeed (RSS, Atom, ...), quite similar to fetching mails actually. [jpetso says: low priority, probably post-4.0 stuff - they're already using icons that are not too far off) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || akregator || actions/feed-fetch-all || The action to fetch all newsfeeds (RSS, Atom, ...). [jpetso says: low priority, probably post-4.0 stuff - they're already using icons that are not too far off) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdepim || knode || actions/??? || knode has two buttons with arrows, one with an arrow pointing right (go to the next unread article), the other one used to have a double-arrow pointing right (go to the next unread thread). The former is go-next, the latter is what is needed. Unfortunately I don't know how it could be called. ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kbattleship || kbattleship || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kblackbox || kblackbox || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || killbots || randomteleport || The action teleports the player to a randomly selected location where they may be saved or may die. ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || killbots || safeteleport || The action teleports the player to a randomly selected location where they are guarenteed to be safe for at least one turn. ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || killbots || waitoutround || The action causes the player to stay in place for the remainder of the round. ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kmahjongg || kmahjongg || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kmines || kmines || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || knetwalk || knetwalk || Apps main icon || &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; || johann_ol &amp;amp; trouvnez&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || konquest || konquest || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kpat || kpat || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kreversi || kreversi || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || ksame || ksame || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kshisen || kshisen || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kspaceduel || kspaceduel || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || ksquares || ksquares || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || ktuberling || ktuberling || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || kfourinline || kfourinline || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || lskat || lskat || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegames || palapeli || palapeli || Apps main icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kget || status/network-connecting || Shown while trying to connect to a server. --[[User:Uwolfer|Uwolfer]] 21:05, 29 October 2007 (CET) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/im-aim || Icon for the AIM instant messaging protocol || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || johann_ol&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/im-icq || Icon for the ICQ instant messaging protocol || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || johann_ol&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/im-jabber || Icon for the XMPP/Jabber instant messaging protocol || &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; || johann_ol&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/im-msn || Icon for the MSN instant messaging protocol || &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; || johann_ol&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/im-yahoo || Icon for the Yahoo! instant messaging protocol || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || johann_ol&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || more protocol icons [jpetso: no time for retrieving the whole list right now] || Icon for the [blah blah blah] instant messaging protocol || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || johann_ol&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/preferences-desktop-user-privacy || Configuring privacy settings || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || davigno&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/preferences-plugin-text-effect-kopete || Configuring text formatting special effects || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || davigno&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/preferences-text-autocorrection || Configuring text autocorrect rules || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || davigno&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/preferences-text-highlighting || Configuring text highlighting - icon exists but only in a low resolution || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || davigno&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/preferences-pipes-kopete || Configuring piping settings - Probably like the old 'pipe' icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || status/dock-kopete-flashing || icon flashed in system tray when new messages are received || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || davigno&lt;br /&gt;
|-----&lt;br /&gt;
|| kdenetwork || kopete || apps/preferences-status-manager-kopete || Icon for Status Manager || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdesdk || kapptemplate || apps/kapptemplate || generates KDE 4 templates to start programming || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || plasma || plasma's toolbox || Toolbox icon to replace the wrench icon. The toolbox (on the top right of the desktop, remember all the screenshots) will allow users to zoom in and out of the desktop, add widgets, configure the desktop, lock the desktop, run commands, etc. From what I understand it's a replacement of the right click menu. Several plasma developers suggested a 2D palette similar to plasma's techbase icon. ~Craig || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || plasma || battery.svg || Battery applet uses battery to present different types of batteries. We would need overlay's in svg, similar as existing AC adaptor indicator, that could be used to present different types of icons. We need indicators for following types: primary/notebook (no indicator is OK), mouse, keyboard, mouse+keyboard (not sure if used), pda. ||||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeaccessibility || ktts || apps/ktts(d?).png || App icon for ktts is needed, and will be used for kttsmgr in menus, and for &amp;quot;Speak Page&amp;quot; icon in konq toolbar.  Will probably also likely be used for ktts settings in accessibility system-settings page.  Old icon was a parrot which fits I think. ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeaccessibility || kmousetool || apps/kmousetool.png || App icon for kmousetool is needed, and will be used for the application itselfs as well as it's systray. Kmousetool causes a click event when moving the mouse over click-able object and leaving it there for a certain amount of time. || ||&lt;br /&gt;
|-----&lt;br /&gt;
||kdeutils||Okteta||readonly/readwrite status icon||The loaded file can be set to readonly, by a toggle. Readonly would be the exception, so the icon could be a striked pen, a pen in a prohibition sign (round white with red border) or similar. || &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
||kdeutils||Okteta||actions/bookmark-remove icon|| remove the bookmark from the current location || &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
||kdeutils||Okteta||actions/bookmark-remove-all icon|| remove all bookmarks || &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
||kdeutils||Okteta||actions/bookmark-go-next or go-next-bookmark icon|| go to the next bookmarked location || &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
||kdeutils||Okteta||actions/bookmark-go-previous or go-previous-bookmark icon|| go to the previous bookmarked location || &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kreview || autostart || autostart || Apps main icon || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeutils || kdf || program icon || kdf is a small application that shows the amount of free space on your mounts (like 'df'). || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeutils || kfloppy || program icon || kfloppy can be used to format floppy disks with various filesystems. || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeutils || kgpg || program icon || a graphical frontend for gpg. you can use it to generate new keys, manage existing keys/trust (including communicating with keyservers) and for encrypting files. ||Yes ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeutils || ktimer || program icon || used to launch scripts/programs at certain times. it's basically like a miniature-cron for your desktop. || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeutils || superkaramba || program icon || a piece of software that allows you to create interactive eye-candy for your desktop. || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || context || plasmoid icon || a containment for the Amarok Context || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || pager || plasmoid icon || switch between desktops || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || system tray || plasmoid icon || system section for the panel || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || window list || plasmoid icon || show a list for application windows || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || digital clock || plasmoid icon || the digital clock plasmoid. || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdebase || analog clock || plasmoid icon || the analog clock plasmoid. || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || binary clock || plasmoid icon || a binary clock plasmoid. || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || file watcher || plasmoid icon || a plasmoid that works like &amp;quot;tail -f&amp;quot; || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || fuzzy clock || plasmoid icon || a fuzzy clock plasmoid || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || luna || plasmoid icon || a plasmoid that shows current lunar phase || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || nowplaying || plasmoid icon || a plasmoid that displays what the player is playing || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || timer || plasmoid icon || a count down timer || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || KDE twitter || plasmoid icon || twitter plasmoid || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || frame || plasmoid icon || a picture frame plasmoid || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || 3D world || plasmoid icon || a 3D model for the earth globe || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || weather forecast || status icon || Modify thunderstorm icon to show sun || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdeplasma-addons || weather forecast || status icon || Modify thunderstorm icon to show moon || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdesdk, kdevplatform, kdeutils || Kate, KDevelop, Okteta || go to folder of current document (current name: dirsync or curfiledir), || The icon is on a button which can be used to set the currently viewed folder in the embedded filesystem browser to the one of the currenly focused document (e.g. a text file in Kate) || &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdevelop || miscellaneous || KDevelop Icons || Icons for the KDevelop IDE, as set out in the [http://websvn.kde.org/trunk/playground/artwork/Oxygen/docs/kdevelop-icons.txt?view=markup plan document] || &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| kdegraphics || okular || single page, facing pages, trim margins || The single/facing pages icons existed in KDE3. Maybe the trim margins could show a page with a pair of scissors trimming it? || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Applications in Playground ==&lt;br /&gt;
For apps in trunk/playground/&lt;br /&gt;
&lt;br /&gt;
{|rules=&amp;quot;all&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=center style=&amp;quot;border:1px solid #999; border-right:2px solid #999; border-bottom:2px solid #999;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Module&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Application&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Icon Name&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Description / Where can be found?&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Done?&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Assigned To&lt;br /&gt;
|-----&lt;br /&gt;
||network||kopete-bonjour||bonjour_protocol||The icons to be replaced are here: playground/network/kopete/protocols/bonjour/icons.||||&lt;br /&gt;
|-----&lt;br /&gt;
||base||emoticonskcm|| ||You can found it in kdereview, for now i'm using the face-smile icon but it's too small, i think it would be enough to have a bigger version||||&lt;br /&gt;
|-----&lt;br /&gt;
||utils||filelight|| || Application to display disk usage in a graphical manner, using concentric circles. Currently it uses an icon made by mxcl (I think), made for the KDE 3 version. ||||&lt;br /&gt;
|-----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other 3rd party Application Icons ==&lt;br /&gt;
For all the other applications&lt;br /&gt;
&lt;br /&gt;
{|rules=&amp;quot;all&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=center style=&amp;quot;border:1px solid #999; border-right:2px solid #999; border-bottom:2px solid #999;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Application&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Icon Name&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Description / Where can be found?&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Done?&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot; | Assigned To&lt;br /&gt;
|-----&lt;br /&gt;
|| (unnamed sports and activity tracker) || to be determined || Application app for http://blog.volker-lanz.de/2010/07/28/sports-activity-tracking-app-the-baby-needs-a-name/ || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;  ||&lt;br /&gt;
|-----&lt;br /&gt;
|| Opale || opale.svgz ?&lt;br /&gt;
 || [http://www.freehackers.org/Opale Opale] is a small though stable/maintained account planning application that can be compiled either as a Qt-only or a KDE application. I can be found as 'orzel' on irc.&lt;br /&gt;
 || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;  || &lt;br /&gt;
|-----&lt;br /&gt;
|| Amarok || status/media-track-repeat || An icon for the &amp;quot;repeat the current track&amp;quot; state. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;  ||&lt;br /&gt;
|-----&lt;br /&gt;
|| KPlayer, Amarok || status/media-playlist-repeat ||&lt;br /&gt;
Option to [http://kplayer.sourceforge.net/manual/configuration-playlist.html loop] through the current playlist. See [http://kplayer.sourceforge.net/manual/parts.html screenshot], it's the next-to-last button in the second row.&lt;br /&gt;
|| &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; (...jpetso: used an interim copy of the playlist icon, but without nice &amp;quot;repeat&amp;quot; arrows) ||&lt;br /&gt;
|-----&lt;br /&gt;
|| KPlayer, Amarok || status/media-playlist-shuffle ||&lt;br /&gt;
Option to [http://kplayer.sourceforge.net/manual/configuration-playlist.html shuffle] the current playlist. See [http://kplayer.sourceforge.net/manual/parts.html screenshot], it's the last button in the second row.&lt;br /&gt;
|| Kind of... copied the &amp;quot;roll&amp;quot; icon to that location ||&lt;br /&gt;
|-----&lt;br /&gt;
|| KPlayer, Dragon Player || video-contrast ||&lt;br /&gt;
Button that pops up the slider that lets you change the video contrast. See [http://kplayer.sourceforge.net/manual/parts.html screenshot], it's the fourth-to-last button in the first row.&lt;br /&gt;
|| &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| KPlayer, Dragon Player || video-brightness ||&lt;br /&gt;
Button that pops up the slider that lets you change the video brightness. See [http://kplayer.sourceforge.net/manual/parts.html screenshot], it's the third-to-last button in the first row.&lt;br /&gt;
|| &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| Firefox || apps/firefox || [http://en.www.mozilla.com/img/products/firefox-title.jpg Firefox logo] || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| KMuddy || apps/kmuddy || [http://img177.imageshack.us/img177/4840/hi32appkmuddylq5.png current KMuddy logo] (we don't have the original sources anymore, so we're very inflexible in our logo usage. Just a 16x16 and a 32x32 icon is all we got). KMuddy is a MUD client, so it's a program that allows you to play the fantasy RPGs, run around as elves and dwarves and such. (http://en.wikipedia.org/wiki/Mud_client). #kmuddy on freenode is available || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| GIMP || apps/gimp || [http://upload.wikimedia.org/wikipedia/commons/5/55/GIMP_Icon.png GIMP logo] || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| ktorrent || media-playback-all-start and media-playback-all-stop || For starting and stopping torrents we want to use media-playback-start and media-playback-stop, so we would like some matching icons to start and stop all torrents. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || Leeo&lt;br /&gt;
|-----&lt;br /&gt;
|| ktorrent || apps/preferences-system-network-ip-filter-ktorrent || Icon for KTorrent's IP Filter plugin. This is a blocklist for bad peers. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; (jpetso says: hmmm... have i replaced this with view-filter already? ...) || Leeo&lt;br /&gt;
|-----&lt;br /&gt;
|| ktorrent || apps/preferences-plugin-scan-folder-ktorrent || Icon for KTorrent's folder scanner plugin. This plugin monitors directories for torrent files, and when a new one is detected, it is loaded into ktorrent. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || Leeo&lt;br /&gt;
|-----&lt;br /&gt;
|| ktorrent || apps/preferences-system-network-upnp-ktorrent || Icon for KTorrent's UPnP plugin. || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || Leeo&lt;br /&gt;
|-----&lt;br /&gt;
|| ktorrent || apps/preferences-system-network-discovery || Icon for KTorrent's zeroconf (DNSSD) plugin, also used by the &amp;quot;Network Discovery&amp;quot; page in the System Settings (which makes for the slightly different icon name). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || Leeo&lt;br /&gt;
|-----&lt;br /&gt;
||LyX || apps/lyx || Icon for LyX (http://www.lyx.org). || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; || &lt;br /&gt;
|-----&lt;br /&gt;
|| Minirok (and other media players?) || actions/list-clear || An icon for the &amp;quot;clear (play)list&amp;quot; action. Previously used &amp;quot;view_remove&amp;quot; from crystalsvg, which is now gone. || please use edit-clear - [[User:Djmdave|Djmdave]] 15:07, 10 February 2008 (CET) ||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://qlandkarte.sourceforge.net/ QLandkarte] || apps/qlandkarte || QLandkarte application (Garmin GPS tool for mapping/tracks/waypoints...) currently uses 16x16 world icon from Nuvola and author would be interested to get nice SVG icon for application. || ||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://www.kmess.org/ KMess] || MSN Status icons || If possible, oxygenized msn status icons.. it shouldn't be very long since they could be all color variants of just one image: [http://trac.kmess.org/browser/trunk/kmess/kmess/pics/online.png Online], or with very little changes: [http://trac.kmess.org/browser/trunk/kmess/kmess/pics/lunch.png Lunch] || please see user-* icons in status. if there are others that are needed, then please state them individually - [[User:Djmdave|Djmdave]] 15:07, 10 February 2008 (CET) ||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://www.kmess.org/ KMess] || &amp;quot;Unknown avatar&amp;quot; picture || KMess has been using [http://trac.kmess.org/browser/trunk/kmess/data/pics/unknown.png this picture] to indicate no picture is available. This is however [http://files.dazjorz.com/cache/kmess_baghead.png quite confusing], especially for new users. Therefore, we'd like a new image for this - the size should be 96x96, please. :-) ||||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://www.kde-apps.org/content/show.php/KGrab?content=74086 KGrab] || Main Icon || Its a extragear fork of KSnapshot. At the moment i use the old Ksnapshot icon. We need a new oxygen Icon for KGrab. Tanks ||||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://shaman.iskrembilen.com Shaman] || status-installed, status-notinstalled status-upgradeable action-update || We would are using the Oxygen-Icons in our program, but we can't find any status-icons which fit good :( (Currently using online/offline icons)|| &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://www.ggzgamingzone.org/clients/kde4/ Vencedor] || Standard online gaming actions for use with kdegames: We need &amp;quot;launch a game&amp;quot; vs. &amp;quot;join a game&amp;quot; vs. &amp;quot;watch/spectate a game&amp;quot; || Used in toolbar buttons of Vencedor, the new KDE 4.3 online games launcher || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|----&lt;br /&gt;
|| [http://www.ggzgamingzone.org/clients/kde4/ Vencedor] || Application icon || Currently it lacks an app icon, too || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|----&lt;br /&gt;
|| [http://mame.mindkiller.com/ mameexecutor] || Application icon || Currently lacks an app icon. Talked to pinheiro on IRC and he came up with an idea of an icon with a arcademachine, as the mameexecutor is a frontend for an arcade-emulator. ||&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;in progress&amp;lt;/span&amp;gt;||pinheiro&lt;br /&gt;
|----&lt;br /&gt;
|| [http://extragear.kde.org/apps/kiosktool Kiosktool]|| Application icon || Currently lacks an app icon. Kiosktool is a systems administration application that can tune and configure KDE desktop settings. ||||&lt;br /&gt;
|-----&lt;br /&gt;
|| Amarok || apps/amarok ||&lt;br /&gt;
[http://websvn.kde.org/trunk/extragear/multimedia/amarok/src/images/amarok_icon.svg App icon]. Needs Oxygen colors, we don't really want to change design.&lt;br /&gt;
|| &amp;lt;span style=&amp;quot;color green&amp;quot;&amp;gt;Yes - Jul 24 2007&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://www.kmess.org/ KMess] || Main Icon || We are porting our MSN client for KDE and we'd appreciate a lot an oxygenized version of [http://trac.kmess.org/browser/trunk/kmess/kmess/hi128-app-kmess.png our hummingbird logo] || &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;Yes - Feb 28 2008&amp;lt;/span&amp;gt;||&lt;br /&gt;
|-----&lt;br /&gt;
|| Kaffeine || Icons for (unencrypted) radio and encrypted radio / tv channels || Digital Video Broadcasting (DVB) includes radio and tv channels (devices/video-television is used for tv channels), which may be encrypted. See [http://techbase.kde.org/Projects/Oxygen/KDE4_Missing_Icons here] for context screenshots (I've copied&amp;amp;hacked some oxygen icons as an intermediate solution till an oxygen variant is ready) || ||&lt;br /&gt;
|----&lt;br /&gt;
|| [http://rekonq.sourceforge.net/ Rekonq] || Main/Application Icon || Rekonq needs a (new) application icon, as the current one is not &amp;quot;so good&amp;quot; (If you are able to call it &amp;quot;icon&amp;quot; ;-)) ||||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://k3b.org K3b] || mimetypes/application-x-k3b || K3b project file MIME type icon || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://k3b.org K3b] || actions/tools-rip-audio-cd || Ripping CD Audio disc into audio files || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://k3b.org K3b] || actions/tools-rip-video-cd || Ripping VCD disc into video files || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://k3b.org K3b] || actions/tools-rip-video-dvd || Ripping Video DVD disc into video files (maybe the icon should be the same as the previous one?) || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-----&lt;br /&gt;
|| [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html Apps using XDG icons ] || emblems/emblem-default || indicate default selection, eg default printer || &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Misc Icon Requests =&lt;br /&gt;
* Please see my request on http://www.nabble.com/Suggestion-for-Oxygen:-Highlight-difference-between-Kate-and-KWrite-t4447769.html and the bug report to help you track this wish at: https://bugs.kde.org/show_bug.cgi?id=138170.&lt;br /&gt;
&amp;lt;b&amp;gt;Update&amp;lt;/b&amp;gt;:Thanks Djmdave, for moving this here. Now the KWrite icon is totally missing. See: http://websvn.kde.org/trunk/KDE/kdebase/runtime/pics/oxygen/128x128/apps/kwrite.png?view=markup and other corresponding directories (scalable 64x64 etc). My request for two distinct icons for Kate and KWrite stands. Please see bug for more details and discussion.&lt;br /&gt;
&lt;br /&gt;
* Partly fixed in svn commit r733637 (fabo), missing all unmount icons and some others (MO Device and ZIP Device) used in *.desktop files:&lt;br /&gt;
http://websvn.kde.org/trunk/KDE/kdebase/apps/lib/konq/Templates/&lt;br /&gt;
&lt;br /&gt;
= List of missing icons with screenshot =&lt;br /&gt;
&lt;br /&gt;
List of missing icons from applications with related screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Projects/Oxygen/KDE4_Missing_Icons]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/ISV/Roadmap</id>
		<title>ISV/Roadmap</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/ISV/Roadmap"/>
				<updated>2011-12-02T22:51:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Sub-projects */ koffice inactive for now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|ISV/Roadmap}}&lt;br /&gt;
This page intends to help '''Independent Software Vendors''' (ISVs) understanding the background of the KDE Roadmap.&lt;br /&gt;
&lt;br /&gt;
== KDE development ==&lt;br /&gt;
&lt;br /&gt;
The current KDE development concentrates on KDE 4, which will be a major release. It will include several new features as well as new APIs and frameworks and therefore will break the API compatibility. However, at the same time there are several efforts in the community making porting apps to KDE 4 quite easy.&lt;br /&gt;
&lt;br /&gt;
The Roadmap of KDE 4 is divided into the [[Schedules/KDE4/4.5_Release_Schedule|Release Schedule]] and the [[Schedules/KDE4/4.5_Feature_Plan|Feature Plan]].&lt;br /&gt;
&lt;br /&gt;
== Sub-projects ==&lt;br /&gt;
&lt;br /&gt;
Some KDE sub-projects have their own roadmaps:&lt;br /&gt;
* [http://multimedia.kde.org/roadmap.php KDE Multimedia project] - supported by [http://phonon.kde.org/ Phonon], a new multimedia API.&lt;br /&gt;
* [http://calligra.org Calligra] - a free, integrated office suite for KDE&lt;br /&gt;
&lt;br /&gt;
[[Category:ISV]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects"/>
				<updated>2011-12-02T22:50:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Suites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Projects}}&lt;br /&gt;
{{note|KDE TechBase Translators: The Projects part is rather a scratchpad for arbitrary projects. It contains texts like IRC logs and rough ideas. ''It probably does not make sense to translate this''.  If, however, you wish some part to be translated please either email kde-www@kde.org or comment on #kde-www.}}&lt;br /&gt;
&lt;br /&gt;
{{note|These pages are intended for providing technical documentation for external users of various KDE Projects.  For internal project documentation, such as feature plans and meeting minutes please use http://community.kde.org/.}}&lt;br /&gt;
&lt;br /&gt;
= Infrastructure =&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em 2.5% 0 2.5%; padding: 0 5px;&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Klogo-official-crystal.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/MovetoGit|KDE migration to git]]&lt;br /&gt;
:KDE is moving from svn to git, find progress, todo list, etc. here.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Organisational =&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em 2.5% 0 2.5%; padding: 0 5px;&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Klogo-official-crystal.svg|noframe|left|40px]] ||&lt;br /&gt;
;[http://www.kde.org/community/getinvolved Get Involved with KDE]&lt;br /&gt;
:General information for getting involved with KDE projects. Includes a mentor directory for many projects.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Klogo-official-crystal.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Release_Team|KDE Release Team]]&lt;br /&gt;
:The KDE Release Team.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Klogo-official-crystal.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Documentation|KDE Documentation Project]]&lt;br /&gt;
:Creating and maintaining KDE documentation.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Klogo-official-crystal.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/kde.org|kde.org]] &lt;br /&gt;
:Information around the *.kde.org websites.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Klogo-official-crystal.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Promo|KDE Promotion]]&lt;br /&gt;
:Promoting KDE and conference organization.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Action_world.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Partners|Partner Program]]&lt;br /&gt;
:KDE partner program targetting ISVs.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Usability | KDE Usability project]]&lt;br /&gt;
: The KDE Usability Project is an initiative to apply usability principles and practices to the K Desktop Environment.&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Bugweeks ladybug.png|noframe|left|40px]]||&lt;br /&gt;
;[[Contribute/Bugsquad|KDE BugSquad]]&lt;br /&gt;
:The KDE BugSquad keeps track of incoming bugs in KDE software, and goes through old bugs.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Summer_of_Code|Summer of Code Projects]]&lt;br /&gt;
:Information on Summer of Code projects and prospects related to KDE&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/English Breakfast Network|KDE Code Quality (EBN)]]&lt;br /&gt;
: The English Breakfast Network and associated tools dedicated to KDE Quality, including: KDE API Documentation Validation, User Documentation Validation, Source Code Checking, ...&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KDE Research|KDE Research]]&lt;br /&gt;
: Project and community for everyone who is interested in contributing to (funded) research projects with(in) the KDE community.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Frameworks =&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em 2.5% 0 2.5%; padding: 0 5px;&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:logo_oxygen.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/Oxygen|The Oxygen Project]] &lt;br /&gt;
:Artwork for KDE4.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Klogo-official-crystal.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/kdelibs|KDE Core Libraries]]&lt;br /&gt;
:For the core developers working on the kdelibs module.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Decibel.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/Decibel|Decibel]]&lt;br /&gt;
:Decibel - Realtime communications framework&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KGLEngine2D | KGLEngine2D]]&lt;br /&gt;
: KGLEngine2D is a framework designed to greatly simplify the development of reach multimedia applications on KDE enabled platforms.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KioFuse|KioFuse]]&lt;br /&gt;
: Insert KIO resources (remote, archived or compressed files) into the root filesystem hierarchy.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Nepomuk_logo.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/Nepomuk|Nepomuk]]&lt;br /&gt;
:Nepomuk Semantic Desktop project - Annotation/Indexing/Search/Linking&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Action_filequickprint.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/KDEPrint|KDEPrint]]&lt;br /&gt;
:Printing related information for KDE.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:knetworkmanager.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/Network_Management|Network Management]]&lt;br /&gt;
: Development on Solid Networking, KNetworkManager applet and configuration tool.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/D-Bus-WS|D-Bus Web Service Proxy]]&lt;br /&gt;
: Fusion of D-Bus services and web services.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Silk | Silk]]&lt;br /&gt;
: Project Silk - Deep integration of the web&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Solid | Solid]]&lt;br /&gt;
: Solid - The KDE Hardware Library&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Kbluetooth | Kbluetooth]]&lt;br /&gt;
: Kbluetooth - The KDE Bluetooth Library (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/kdesu|kdesu]]&lt;br /&gt;
: Considerations and coordination to make kdesu work well with several backends.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Telepathy|Telepathy]]&lt;br /&gt;
:Telepathy Realtime Communication Framework - Instant Messaging, VoIP and Collaboration.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/WebKit|WebKit (webkitkde)]]&lt;br /&gt;
: Project which aims to integrate WebKit (QtWebKit) into KDE.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Widgets and Classes|Widgets &amp;amp; Classes]]&lt;br /&gt;
:Widgets and classes that are not in kdelibs but which you may find useful.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KSecretsService|KSecretsService - managing KDE application's secrets]]&lt;br /&gt;
:Secrets management infrastructure for KDE applications and a collection of related tools, superseding KWallet.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Related|Related Projects]]&lt;br /&gt;
: Projects which are related to KDE in any way, as dependencies or build tools.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Programs =&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em 2.5% 0 2.5%; padding: 0 5px;&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Aki128.png|noframe|left|40px]]||&lt;br /&gt;
;[[/Aki | Aki]]&lt;br /&gt;
: Aki - Extensive IRC Client&lt;br /&gt;
|-&lt;br /&gt;
|||&lt;br /&gt;
;[[/Digikam|Digikam]]&lt;br /&gt;
:Digikam - Photo Management Software.&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Hisc-apps-kget.svg|noframe|left|40px]]||&lt;br /&gt;
;[[/KGet|KGet]]&lt;br /&gt;
: KGet, a KDE Downloader&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Gwenview|Gwenview]]&lt;br /&gt;
:Gwenview, the image viewer.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:K3b.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/K3b|K3b]]&lt;br /&gt;
:K3B, optical disc writer&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KDevelop4|KDevelop4]]&lt;br /&gt;
:KDevelop4, the KDE IDE.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Kopete.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Kopete|Kopete]]&lt;br /&gt;
:Kopete, the KDE Instant Messaging program.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Marble.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/Marble|Marble]]&lt;br /&gt;
:Marble Desktop Globe - Can You Feel The Earth Spinning?&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Okular|Okular]]&lt;br /&gt;
:Okular, the unified document viewer.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/rekonq | rekonq]]&lt;br /&gt;
: rekonq - A lightweight Web Browser for KDE based on WebKit&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Ktimetracker.png|noframe|left|40px]] ||&lt;br /&gt;
;[[KTimeTracker]]&lt;br /&gt;
:Time management within the KDE PIM.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/SystemSettings|System Settings]]&lt;br /&gt;
: Development on the System Settings configuration tool.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:superkaramba.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/SuperKaramba|SuperKaramba]]&lt;br /&gt;
:SuperKaramba is a tool that allows you to easily create interactive eye-candy on your KDE desktop.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KWin|KWin]]&lt;br /&gt;
: The KDE Window Manager.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Suites =&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em 2.5% 0 2.5%; padding: 0 5px;&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Action_book2.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Edu|KDE Education Project]] &lt;br /&gt;
:Developing educational software for KDE.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/extragearReleases|Extragear Releases]]&lt;br /&gt;
: A current list of what extragear apps are to be released in sync with the core KDE release schedule.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KdeFinance | KDE Finance]]&lt;br /&gt;
: KDE Finance is a group of KDE-related financial applications&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Kdegameslogo_40.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/Games|KDE Games Project]] &lt;br /&gt;
:Developing desktop's games for KDE.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Action_pencil.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/KOffice|KOffice]] and [http://wiki.koffice.org KOffice.org]&lt;br /&gt;
:Developing an Office suite based on KDE.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Action_pencil.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Calligra/]] and [http://calligra.org Calligra.org]&lt;br /&gt;
:Developing an Office suite for KDE.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Action_mail_generic.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/PIM|KDE PIM Project]]&lt;br /&gt;
:KDE Personal Information Management.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Plasma_logo.jpg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Plasma|Plasma]]&lt;br /&gt;
:Quick and easy creation of widgets. Interactive application launchers, window and task managers, weather checkers; they are all made with plasma.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Kdetoys | Kdetoys]]&lt;br /&gt;
: The Kdetoys project&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:kdeutils-logo.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[/Utils|KDE Utilities Team]]&lt;br /&gt;
:For the developers working on the kdeutils module.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/Necessitas | Necessitas]]&lt;br /&gt;
: Necessitas project&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Platforms =&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em 2.5% 0 2.5%; padding: 0 5px;&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:KDE-Mac.png|noframe|left|40px]] ||&lt;br /&gt;
;[[/KDE on Mac OS X|KDE on Mac OS X]]&lt;br /&gt;
: KDE libraries and applications on Mac OS X.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Konqi-win.png|38px]] ||&lt;br /&gt;
;[[/KDE on Windows|KDE on Windows]]&lt;br /&gt;
: KDE libraries and applications on MS Windows.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KDE on Solaris|KDE on Solaris]]&lt;br /&gt;
: KDE libraries and applications on Sun Microsystems Solaris and OpenSolaris.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[/KDE on FreeBSD|KDE on FreeBSD]]&lt;br /&gt;
: KDE libraries and applications on FreeBSD and other BSDs.&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
;[[Projects/Mobile|Mobile]]&lt;br /&gt;
: Project for porting KDE to the Mobile.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/ISV/Why_use_KDE</id>
		<title>ISV/Why use KDE</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/ISV/Why_use_KDE"/>
				<updated>2011-12-02T22:48:18Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Sub-Projects */ -&amp;gt;calligra, koffice inactive&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|ISV/Why use KDE}}&lt;br /&gt;
This page intends to help '''Independent Software Vendors (ISVs)''' getting into KDE related topics. This includes companies developing commercial applications as well as other Open Source Projects.&lt;br /&gt;
&lt;br /&gt;
== The KDE Community ==&lt;br /&gt;
The KDE project attracts many people with different backgrounds. As such, the day-by-day growing KDE community includes many '''developers''', '''translators''', '''artists''' as well as '''usability and accessibility experts''' and - of course - '''lots of users'''. For several years now all those people are welcome to meet at the '''annual KDE Conference [http://akademy.kde.org/ aKademy]''' to discuss KDE related topics and shape the ''roadmap'' for future development.&lt;br /&gt;
&lt;br /&gt;
== KDE e.V. ==&lt;br /&gt;
The non-profit organization [http://ev.kde.org KDE e.V.] helps in creating and distributing KDE by securing cash, hardware, and other donations, then using donations to aid KDE development and promotion. All its members are part of the KDE community which means the KDE e.V. plays an important role in the KDE project. Members of the KDE e.V. form several '''working groups''' like the [http://www.spreadkde.org/handbook/mwg/charter Marketing Working Group (MWG)] and the [http://ev.kde.org/workinggroups/hci.php Human-Computer Interaction (HCI) Working Group] to help realize KDE's vision.&lt;br /&gt;
&lt;br /&gt;
== Adoption of KDE ==&lt;br /&gt;
KDE is one of the biggest Open Source projects making the Linux/UNIX desktop's experience much more user friendly. As such, distributions strongly support KDE by actively taking part in its development process and ship KDE as their default desktop environment. Many companies use KDE for production use.&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
The KDE development process takes place in steady release cycles. '''[http://developer.kde.org/development-versions/release.html Release schedules]''' and '''feature plans''' help the KDE project coordinating a KDE release by introducing several ''phases'' like ''feature freeze'' and ''message freeze''. This phases make sure that developers concentrate on polishing the release and the translation teams have time enough to translate all the KDE software into many different languages. Further information about KDE development tools can be found on the [[Development|development pages]].&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
The KDE project provides excellent documentation about its API and its technologies, such as KParts or KXmlGui. There are many '''Tutorials and HOWTOs''' which help getting into KDE development. An overview can be found at the [[Development|development pages]].&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
KDE provides a wide range of '''powerful technologies''' such as [http://khtml.info KHTML and KJS] which are adopted by other companies like Apple (Safari browsers) and Nokia. Additionally there are several '''development frameworks''' like KParts (KDE's component technology), KIO (network/protocol architecture) or KXmlGui (build GUIs based on XML definitions).&lt;br /&gt;
&lt;br /&gt;
KDE uses '''well-known standards''' like [http://en.wikipedia.org/wiki/Udev UDev]) and [http://dbus.freedesktop.org D-Bus] (interprocess communication).&lt;br /&gt;
&lt;br /&gt;
=== Compatibility &amp;amp; Integration ===&lt;br /&gt;
The last major KDE release was KDE 4.0. All KDE 4.x versions are '''binary compatible''', i.e. software written for KDE 4.0 will be compatible with KDE 4.5 years later. As KDE is based on standards it is, for instance, easy to integrate applications with plain [http://todo-link-to-howto .desktop files].&lt;br /&gt;
&lt;br /&gt;
==== Freedesktop.org &amp;amp; Portland ====&lt;br /&gt;
As an ISV, your target is probably not only KDE but all Linux/UNIX desktops. This is made possible due to '''strong collaboration between KDE and other projects''' like [http://freedesktop.org freedesktop.org] which defines standards and software that helps integrating applications in all standard conform desktop environments.&lt;br /&gt;
&lt;br /&gt;
One of those projects is the [http://developer.kde.org/portland/ Portland project], which intends to develop a common set of Linux Desktop Programming Interfaces and Tools to allow applications to '''easily integrate''' with the free desktop configuration an end user has chosen to work with.&lt;br /&gt;
&lt;br /&gt;
=== Sub-Projects ===&lt;br /&gt;
KDE has many sub-projects to more specifically coordinate unique project goals of major supporting applications.  Several of these significant projects are noted below:&lt;br /&gt;
&lt;br /&gt;
; KDE Pim&lt;br /&gt;
: The goal of [http://pim.kde.org KDE Pim] (Personal information management) is to provide an application suite to manage personal information. This includes applications like an email client, a calender etc. The main result is '''KDE Kontact''', our personal information manager.&lt;br /&gt;
&lt;br /&gt;
; Calligra&lt;br /&gt;
: [http://calligra.org KOffice] is an '''integrated office suite''' using KDE-technology and features a full set of applications which work together seamlessly to provide the best user experience possible. The office suite contains applications like Words, Tables, Stage, Krita, Kexi and many more.&lt;br /&gt;
&lt;br /&gt;
; KDevelop&lt;br /&gt;
: [http://kdevelop.kde.org KDevelop] is an '''Integrated Development Environment''' (IDE) for KDE. It supports language like C/C++ and Java and helps with rapid application development.&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
KDE development follows a release schedule in order to coordinate releases. These usually cover for minor releases the last 10 weeks and for major releases the last 20 weeks before the official release. The features planned for a release are usually published at the same time as the schedule.&lt;br /&gt;
&lt;br /&gt;
Further details can be found in the [[../Roadmap|roadmap page]].&lt;br /&gt;
&lt;br /&gt;
[[Category:ISV]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Contribute/Send_Patches</id>
		<title>Contribute/Send Patches</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Contribute/Send_Patches"/>
				<updated>2011-12-02T22:45:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Preparing The Email */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Contribute/Send Patches}}&lt;br /&gt;
This tutorial shows how to send modifications of code in the right way: '''by using patches'''.&lt;br /&gt;
&lt;br /&gt;
== Notation ==&lt;br /&gt;
&lt;br /&gt;
The word ''developer'' is used here for someone having a KDE SVN account.&lt;br /&gt;
&lt;br /&gt;
== Preliminaries ==&lt;br /&gt;
&lt;br /&gt;
We suppose that you have modified some code in KDE and that you are ready to share it. First a few important points:&lt;br /&gt;
* You must allow that the modification will have the license of the file where the modification is made.&lt;br /&gt;
* Please make sure that the code compiles correctly on a (fairly) recent version of the software.&lt;br /&gt;
&lt;br /&gt;
== What Is a Patch? ==&lt;br /&gt;
&lt;br /&gt;
Now you have the modification as a source file. Sending the source file will not be helpful, as probably someone else has done other modifications to the original file in the meantime. So your modified file could not replace it.&lt;br /&gt;
&lt;br /&gt;
That is why patches exist. Patches list the modifications, the line numbers and a few other useful information to be able to put that patch back into the existing code. (This process is called &amp;quot;patching&amp;quot; or also &amp;quot;applying a patch.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The main tool for creating patches is a tool called '''diff''', which makes the difference between two files. This tool has a mode called ''unified diff'', which KDE developers use. Unified diffs have not just the difference between the file but also the ''neighborhood'' around the differences. That allows to patch even if the line numbers are not the same anymore.&lt;br /&gt;
&lt;br /&gt;
== Creating a Simple File Patch ==&lt;br /&gt;
&lt;br /&gt;
The most simple patch is created between the modified file (here called {{path|source.cpp}}) and the non-modified version of the file (here called {{path|source.cpp.orig}}.)&lt;br /&gt;
 diff -u -p source.cpp.orig source.cpp&lt;br /&gt;
&lt;br /&gt;
That lists the difference between the two files in the unified diff format (and with function name information if possible.) However it only displays it to screen, which is of course not the goal. So you need to redirect the output.&lt;br /&gt;
 diff -u -p source.cpp.orig source.cpp &amp;amp;gt; ~/patch.diff&lt;br /&gt;
&lt;br /&gt;
{{path|~/patch.diff}} is here an example and you can create the file where you prefer with the name that you prefer. (You will soon find out that it is probably not a good idea to create a patch where the source is.)&lt;br /&gt;
&lt;br /&gt;
== The More Common Case ==&lt;br /&gt;
&lt;br /&gt;
But normally, you do not just change one file and you do not keep the original version around to be able to make the difference later. But here too, there is a solution.&lt;br /&gt;
&lt;br /&gt;
The program svn, which is used on the command line interact with the SVN server, has a diff function too: '''svn diff'''.&lt;br /&gt;
&lt;br /&gt;
You can run it like this and it will give you the difference of the current directory and all sub-directories below it. Of course, here too, you want to redirect the output.&lt;br /&gt;
&lt;br /&gt;
 svn diff &amp;amp;gt; ~/patch.diff&lt;br /&gt;
&lt;br /&gt;
There are useful variants too (shown here without redirection)&lt;br /&gt;
* For just one file: '''svn diff source.cpp'''&lt;br /&gt;
* For the current directory only: '''svn diff -N'''&lt;br /&gt;
&lt;br /&gt;
'''Note''': even if svn can make the difference of another directory (svn diff mydirectory), it is not recommended to do it for a patch that should be applied again. (The problem is that the person that will apply the patch will have to be more careful about how he applies it.)&lt;br /&gt;
&lt;br /&gt;
'''Note''': for simple diff, like those shown in the examples above, '''svn diff''' can be used offline, therefore without an active connection to the KDE SVN server. This is possible, as svn keeps a copy of the original files locally. (This feature is part of the design of SVN.)&lt;br /&gt;
&lt;br /&gt;
By default, svn diff does not have a feature like the &amp;lt;tt&amp;gt;-p&amp;lt;/tt&amp;gt; parameter of diff. But svn allows that an external diff program is called, so you can call diff:&lt;br /&gt;
 svn diff --diff-cmd diff --extensions &amp;quot;-u -p&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Non-Text Files ==&lt;br /&gt;
&lt;br /&gt;
The procedures described above work very well with text files, for example C++ source code. However they do not work with binary files, as diff is not made to handle them. And even if SVN can internally store binary differences, svn diff is not prepared to do anything similar yet, mainly because it currently uses the unified diff format only, which is not meant for binary data.&lt;br /&gt;
&lt;br /&gt;
Therefore, unfortunately, there is little choice but to attach binary files separately from the patch, of course attached in the same email.&lt;br /&gt;
&lt;br /&gt;
== New Files ==&lt;br /&gt;
&lt;br /&gt;
First, you need to make svn aware of files you have added.&lt;br /&gt;
 svn add path/to/new/file /path/to/another/new/file&lt;br /&gt;
&lt;br /&gt;
Then run '''svn diff''' as before.&lt;br /&gt;
&lt;br /&gt;
Note that if you do '''svn revert''', for example, the files you created will NOT be deleted by svn - but svn will no longer care about them (so they won't show up when you do '''svn diff''', for example).  You will have to '''rm''' them manually.&lt;br /&gt;
&lt;br /&gt;
(TODO: are there any other issues with adding new files if you don't have commit access?)&lt;br /&gt;
&lt;br /&gt;
== How To Share the Patch? ==&lt;br /&gt;
&lt;br /&gt;
Now you are ready to share the patch. If your patch fixes a bug from [http://bugs.kde.org KDE Bugs], then the easiest way is to attach it there, see next section.&lt;br /&gt;
&lt;br /&gt;
The main way of sharing a patch is to email to a mailing list. But be careful not to send big patches to a mailing list, a few 10KB is the limit.&lt;br /&gt;
&lt;br /&gt;
Some projects use [[Development/Review_Board|KDE's Review Board]] for patch submitting. If a project is using the Review Board, that is usually their preferred way of receiving patches.  See the [[Contribute/Send_Patches#Reviewboard|section below]] for details.&lt;br /&gt;
&lt;br /&gt;
If you find that the patch is too big to send to a mailing list, the best is to create a bug report in [http://bugs.kde.org KDE Bugs] and to attach the patch there, after having created the bug report.&lt;br /&gt;
&lt;br /&gt;
Another possibility, however seldom used, is to post the patch on a public Web server (be it by HTTP or FTP) and to send an email to the mailing list, telling that the patch is waiting there.&lt;br /&gt;
&lt;br /&gt;
Another variant is to ask on the mailing list which developer is ready to get a big patch. (Try to give its size and ask if you should send it compressed, for example by bzip2.)&lt;br /&gt;
&lt;br /&gt;
A last variant, if you know exactly which developer will process the patch and that you know or that you suppose that he currently has time, is to send the patch to a developer directly. (But here too, be careful if your patch is big. Some KDE developers still have analog modems.)&lt;br /&gt;
&lt;br /&gt;
=== Patches for KDE Bugs ===&lt;br /&gt;
&lt;br /&gt;
In this section we assume that you have chosen to add your patch to an existing KDE bug or that you have created a bug report just for your patch.&lt;br /&gt;
&lt;br /&gt;
Even if this tutorial is more meant to send patches to a mailing list, most of it can be applied to adding a patch to [http://bugs.kde.org KDE Bugs].&lt;br /&gt;
&lt;br /&gt;
You have two ways to do it:&lt;br /&gt;
* online, by selecting the bug report and using the web interface to add attachments.&lt;br /&gt;
* offline, by emailing to the bug report.&lt;br /&gt;
&lt;br /&gt;
To send an email to a bug report, you can use an email address of the form '''12345@bugs.kde.org''' where 12345 is the bug number. Please be sure to attach your patch and not to have it inlined in your text. (If it is inlined, it would be corrupted by KDE Bugs, as HTML does not respect spaces.)&lt;br /&gt;
&lt;br /&gt;
'''Note''': if you send an email to KDE Bugs, be careful to use as sender the same email address as your login email address in KDE Bugs. Otherwise KDE Bugs will reject your email.&lt;br /&gt;
&lt;br /&gt;
'''Note''': if you create a new bug report just for your patch, be careful that you cannot attach a patch directly when creating a new bug. However as soon as the new bug is created, you can then attach files, one-by-one, therefore also patches.&lt;br /&gt;
&lt;br /&gt;
'''Warning''': sometimes your patch will be forgotten because the developers do not always closely monitor the bug database. In this case, try sending your patch by email as described below. If that also does not help, you can always talk to the developers on [[Development/Further_Information#IRC_Channels|IRC]]&lt;br /&gt;
&lt;br /&gt;
=== Which Mailing List? ===&lt;br /&gt;
&lt;br /&gt;
Assuming that you have chosen to send the patch to a mailing list, you might ask yourself: to which one?&lt;br /&gt;
&lt;br /&gt;
The best destination for patches is the [http://www.kde.org/mailinglists/ corresponding developer mailing list].&lt;br /&gt;
&lt;br /&gt;
In case of doubt, you can send any patch for KDE to the [mailto:kde-devel@kde.org kde-devel mailing list]. (However with an increased risk that you would miss the right developer.)&lt;br /&gt;
&lt;br /&gt;
Of course, if you know exactly which developer will process the patch and that you know or that you suppose that he currently has time, then you can send the patch to him directly.&lt;br /&gt;
&lt;br /&gt;
=== Preparing The Email ===&lt;br /&gt;
&lt;br /&gt;
Now you have a patch redirected into a file (for this example called patch.diff), you are ready to send it by email. But the first question: where?&lt;br /&gt;
&lt;br /&gt;
Now that you have entered an email address, a good practice is to attach the patch to your file before writing anything else in the email. So you will not forget to attach it.&lt;br /&gt;
&lt;br /&gt;
A little note here: yes, in KDE (unlike for the Linux Kernel for example), we prefer to have the patches sent as attachments.&lt;br /&gt;
&lt;br /&gt;
Now you are ready to write the rest of the email. Please think of a title that matches your patch. (Think of having to find it again in [http://lists.kde.org the archives] in a few months or even years.) A good habit is to precede the title by &amp;lt;nowiki&amp;gt;[PATCH]&amp;lt;/nowiki&amp;gt;. So for example a title could be &amp;lt;nowiki&amp;gt;[PATCH] Fix backup files&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As for the body of the email, please tell to which file or directory your patch applies. For example for a file: ''The attached patch applies to the file words/part/KWDocument.cpp'' or for a directory: ''The attached patch applies to the directory calligra/words''. This help the developers to have an overview of which code has been modified. Also tell for which branch it is meant, for example for trunk.&lt;br /&gt;
&lt;br /&gt;
Then tell what your patch does. If it fixes a bug, then please give the bug number too. If the bug was not registered in [http://bugs.kde.org KDE Bugs], then please describe instead the bug that is fixed. Similarly, if you know that the patch fixes a bug introduced from a precise SVN revision, please add the revision number.&lt;br /&gt;
&lt;br /&gt;
Tell also what could be useful to the developers, for example if you could not completely test the patch (and why), if you need help to finish fixing the code or if it is a quick&amp;amp;dirty solution that should be fixed better in long-term.&lt;br /&gt;
&lt;br /&gt;
Now check the email again to see if you have not forgotten anything (especially to attach the patch) and you can send the email.&lt;br /&gt;
&lt;br /&gt;
=== Reviewboard ===&lt;br /&gt;
&lt;br /&gt;
One popular way of submitting patches is [[Development/Review_Board|KDE's Review Board]]. Here you can upload a patch and request the KDE project team or individual maintainer review your code.  The Review Board provides tools for viewing diffs online, noting comments against code that needs changes, and granting approval to commit.  It is far easier to manage patches using Review Board than using e-mail or Bugzilla, so it is the recommended method to use.&lt;br /&gt;
&lt;br /&gt;
=== And Now? ===&lt;br /&gt;
&lt;br /&gt;
Now you have to wait that a developer reacts on your patch. (If you are not subscribed to the mailing lists where you have sent the patch, then monitor [http://lists.kde.org the mailing list archives]] for such a message.)&lt;br /&gt;
&lt;br /&gt;
The reaction is normally one of the following:&lt;br /&gt;
* No developer answers. (That is unfortunately happening from time to time.)&lt;br /&gt;
* The developer does not want your patch, as he is working on the same code.&lt;br /&gt;
* The developer does not like your patch.&lt;br /&gt;
* The developer finds that you should change a few things.&lt;br /&gt;
* The developer finds the patch good and tells that he will work on it.&lt;br /&gt;
* The developer accepts your patch as it is.&lt;br /&gt;
&lt;br /&gt;
The first case is when nobody has answered. That perhaps means that you have chosen the wrong mailing list. Perhaps you have not explained correctly what the patch fixes or you have given a title that is not precise enough. If this happens, the developer might have overlooked the patch. Perhaps the developer that should have answered has not any time currently. (That too happens unfortunately.) The best is to try to work a little more on the patch, make a better description and try again a second time, perhaps to another mailing list or to use [http://bugs.kde.org KDE Bugs] instead.&lt;br /&gt;
&lt;br /&gt;
If the developer tells you that your patch conflicts with changes that he is currently doing, you could probably not do much against it. Maybe you can discuss with him how you can effectively work with him on this piece of code.&lt;br /&gt;
&lt;br /&gt;
If your patch was not accepted, you could work further on it. Probably you should discuss the problem on the mailing list to know in which direction you should work further.&lt;br /&gt;
&lt;br /&gt;
If a developer wants a few changes, then work on the code to make the changes according to the critic. If you need help because you do not understand how to do the needed change, then ask it on the mailing list.&lt;br /&gt;
&lt;br /&gt;
If your patch was accepted, congratulations! :)&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Porting_Guidelines</id>
		<title>Projects/KDE on Windows/Porting Guidelines</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Porting_Guidelines"/>
				<updated>2011-11-25T20:24:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Templates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document contains rules useful when you are porting a KDE library to win32. Most of these rules are also valid for porting external libraries code, like application's libraries and even application's private code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Before you start==&lt;br /&gt;
* Make sure (ask KDElibs/win32 maintainer) that the library you selected for porting is not ported, but just not committed yet.&lt;br /&gt;
* You can ask the maintainer for proposals, what can be useful for porting.&lt;br /&gt;
* You will need KDE svn account for your work.&lt;br /&gt;
* Download most current (HEAD) of the KDE libraries.&lt;br /&gt;
&lt;br /&gt;
==Absolute directory checking==&lt;br /&gt;
Look for '/' and &amp;quot;/&amp;quot; and change every single code like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  if (path[0]=='/')&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
  if (path.startsWith('/'))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
  if (!QDir::isRelativePath(path))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(or &amp;quot;QDir::isRelativePath(path)&amp;quot; if there was used path[[0]!='/').&lt;br /&gt;
&lt;br /&gt;
==Ifdefs==&lt;br /&gt;
&lt;br /&gt;
===C++ code===&lt;br /&gt;
&lt;br /&gt;
Macros for C++ code are defined in qglobal.h file. If you've got included at least one Qt header, you probably have qglobal.h included already, otherwise, include it explicity.&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_WS_X11&lt;br /&gt;
  ....&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
for any C++ code that looks like X11-only.&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_OS_UNIX&lt;br /&gt;
  ....&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
for any C++ code that looks like UNIX-only, for example uses UNIX-specific OS features.&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_WS_WIN&lt;br /&gt;
  ....&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
for any C++ code that is MSWindows-only.&lt;br /&gt;
&lt;br /&gt;
===C code===&lt;br /&gt;
Note that qglobal.h is C++-only, so instead use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef _WIN32&lt;br /&gt;
  ....&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for any C code that is MSWindows-only (regardless to compiler type).&lt;br /&gt;
&lt;br /&gt;
=== Rare cases: How to check in Windows-only code which compiler is used?===&lt;br /&gt;
&lt;br /&gt;
====MS Visual C++ - Qt-independent code (especially, C code)====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef _MSC_VER&lt;br /&gt;
  ....//msvc code&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MS Visual C++ - Qt code====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_CC_MSVC&lt;br /&gt;
  ....//msvc code&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Borland C++ - Qt-independent code (especially, C code)====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef __BORLANDC__&lt;br /&gt;
  ....//borland code&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Borland C++ - Qt code====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_CC_BOR&lt;br /&gt;
  ....//borland code&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===General notes===&lt;br /&gt;
In many places using #ifdef Q_OS_UNIX / #else / #endif is more readable than separate #ifdefs.&lt;br /&gt;
&lt;br /&gt;
'''NOTE!!!''' if you must ifdef parts of the code, which contain complete features, please file a bug report against kde-windows target, component porting, in kde's bugzilla, so that those can be fixed later.&lt;br /&gt;
&lt;br /&gt;
===Related links===&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_predir_predefined_macros.asp| msvc++ Predefined Macros]&lt;br /&gt;
&lt;br /&gt;
==Header files==&lt;br /&gt;
===Common header file===&lt;br /&gt;
Unless there is are any header file from kdelibs included in your header file, you need to add:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;kdemacros.h&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;kdecore_export.h&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
at the beginning of your header file to have some necessary system-independent macros defined.&lt;br /&gt;
&lt;br /&gt;
===Export macros=== &lt;br /&gt;
For win32 world, symbols are &amp;quot;hidden by default&amp;quot; (not visible by default as e.g. on unix). This has already been [http://lists.kde.org/?l=kde-core-devel&amp;amp;m=105154800130902&amp;amp;w=2|discussed] on the kde mailing list.&lt;br /&gt;
&lt;br /&gt;
For every library's code (not for standalone code), you need to make symbols exported for win32.&lt;br /&gt;
Do this by adding ***_EXPORT macro (win32 export macro) after &amp;quot;class&amp;quot; keyword within any public class (and structure) declaration. You may also decide to put this macro even for non-public class, if you think that the class could be used somewhere outside your library.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class KDEFOO_EXPORT FooClass {&lt;br /&gt;
...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note''': For kdelibs, ***_EXPORT macros for are defined in kdelibs_export_win.h file (in kdelibs/win/ directory). You can study this file to see how the macros are defined. This file is simply included by kdelibs_export.h, for win32 target. &lt;br /&gt;
&lt;br /&gt;
'''Note2''': Recently we're prepared to gcc's export capatibilities, probably in versions newer than 3.4, just like these in win32's msvc compiler. In kdemacros.h file (included by kdelibs_export.h) there are defines prepared for this functionality:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#define KDE_NO_EXPORT __attribute__ ((visibility(&amp;quot;hidden&amp;quot;)))&lt;br /&gt;
#define KDE_EXPORT __attribute__ ((visibility(&amp;quot;default&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For gcc &amp;lt;= 3.4, KDE_EXPORT and KDE_NO_EXPORT macros are just empty. Note that we're not using KDE_NO_EXPORT for non-public symbols: in the future probably it will be better to use command line switch to turn hidding by default (as win32 compiler has).&lt;br /&gt;
&lt;br /&gt;
'''Note3''': *_EXPORT macros depend on MAKE_{LIBRARYNAME}_LIB macro. In KDE4 buildsystem (cmake) the latter is defined automatically by reusing {LIBRARYNAME}, for example MAKE_KATEINTERFACES_LIB is constructed when KATEINTERFACES library is compiled. The logic behind it is implemented in kdelibs/cmake/modules/KDE4Macros.cmake:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
   if (WIN32)&lt;br /&gt;
      # for shared libraries/plugins a -DMAKE_target_LIB is required&lt;br /&gt;
      string(TOUPPER ${_target_NAME} _symbol)&lt;br /&gt;
      set(_symbol &amp;quot;MAKE_${_symbol}_LIB&amp;quot;)&lt;br /&gt;
      set_target_properties(${_target_NAME} PROPERTIES DEFINE_SYMBOL ${_symbol})&lt;br /&gt;
endif (WIN32) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exporting global functions===&lt;br /&gt;
Also add the same ***_EXPORT at the beginning of public functions' declaration and definition (just before function's type). This also includes functions defined within a namespace.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
namespace Foo {&lt;br /&gt;
 KDEFOO_EXPORT int publicFunction();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What not to export?===&lt;br /&gt;
* methods inside classes (no matter static or not)&lt;br /&gt;
* inline functions&lt;br /&gt;
* template classes, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
class KGenericFactoryBase&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Visibility===&lt;br /&gt;
There are classes or functions that are made &amp;quot;internal&amp;quot;, by design. If you really decided anybody could neven need to link against these classes/functions, you don't need to add **_EXPORT macro for them.&lt;br /&gt;
&lt;br /&gt;
===Deprecated classes===&lt;br /&gt;
Before porting KDElibs to win32, I realized that deprecated classes already use KDE_DEPRECATED macro. We're unable to add another macro like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class KDEFOO_EXPORT KDE_DEPRECATED FooClass { //&amp;lt; - bad for moc!&lt;br /&gt;
...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..because moc'ing will fail for sure. We've defined special macros like that in kdelibs_export.h file (fell free to add your own if needed):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
# ifndef KABC_EXPORT_DEPRECATED&lt;br /&gt;
#  define KABC_EXPORT_DEPRECATED KDE_DEPRECATED KABC_EXPORT&lt;br /&gt;
# endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, we have following example of deprecated class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class KABC_EXPORT_DEPRECATED FooClass { //&amp;lt;- ok for moc&lt;br /&gt;
...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.. which is ok for __moc__. Note that sometimes KDE_DEPRECATED is also used at the end of functions. You don't need to change it for win32 in any way.&lt;br /&gt;
&lt;br /&gt;
==Loadable KDE modules/plugins==&lt;br /&gt;
&lt;br /&gt;
{{TODO|This is deprecated section; we should use K_PLUGIN_FACTORY and K_EXPORT_PLUGIN macros}}&lt;br /&gt;
&lt;br /&gt;
===K_EXPORT_COMPONENT_FACTORY macro===&lt;br /&gt;
&lt;br /&gt;
Use K_EXPORT_COMPONENT_FACTORY( libname, factory ), defined in klibloader.h, instead of hardcoding:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
 extern &amp;quot;C&amp;quot; {void *init_libname() { return new factory; } };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
...because the former way is more portable (contains proper export macro, which ensures visiblility of &amp;quot;init_libname&amp;quot; symbol).&lt;br /&gt;
&lt;br /&gt;
Examples: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY( ktexteditor_insertfile,&lt;br /&gt;
    GenericFactory&amp;lt;InsertFilePlugin&amp;gt;( &amp;quot;ktexteditor_insertfile&amp;quot; ) ) &lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY( libkatepart, KateFactoryPublic )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More complex case===&lt;br /&gt;
&lt;br /&gt;
Sometimes you need to declare a factory which defined as a template with multiple arguments, eg.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
  void* init_resourcecalendarexchange()&lt;br /&gt;
  {&lt;br /&gt;
    return new KRES::PluginFactory&amp;lt;ResourceExchange,ResourceExchangeConfig&amp;gt;();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... but compiler complains about too many arguments passed to K_EXPORT_COMPONENT_FACTORY. To avoid this, you can use __typedef__:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
typedef KRES::PluginFactory&amp;lt;ResourceExchange,ResourceExchangeConfig&amp;gt;  MyFactory;&lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY(resourcecalendarexchange, MyFactory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same trick can be used if the constructor of the factory takes multiple arguments.&lt;br /&gt;
&lt;br /&gt;
==Templates==&lt;br /&gt;
MSVC 6 templates support was heavily broker. Since then the situation has improved a lot. However some specific cases do exist and these are explained in this section.&lt;br /&gt;
&lt;br /&gt;
===Template arguments need to be defined in header files===&lt;br /&gt;
This won't work with forward declaration:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class QColor;&lt;br /&gt;
#include &amp;lt;QList&amp;gt;&lt;br /&gt;
QList&amp;lt;QColor&amp;gt; foo; // error&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to include full QColor declaration too:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;QColor&amp;gt;&lt;br /&gt;
#include &amp;lt;QList&amp;gt;&lt;br /&gt;
QList&amp;lt;QColor&amp;gt; foo; // ok&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
So this is different when compared to GCC.&lt;br /&gt;
&lt;br /&gt;
===“non-class type as already been declared as a class type” errors===&lt;br /&gt;
Code like this breaks in MSVC 2008/2010 (works under GCC and standard says it should work):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
void foo(struct bar &amp;amp; b);&lt;br /&gt;
&lt;br /&gt;
struct bar {};&lt;br /&gt;
int main() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This causes ''“non-class type as already been declared as a class type”'' error. The example is quoted after this [http://stackoverflow.com/questions/5995774/forward-declared-type-and-non-class-type-as-already-been-declared-as-a-class-ty stackoverflow entry]. See also a [https://connect.microsoft.com/VisualStudio/feedback/details/668430/forward-declared-type-and-non-class-type-as-already-been-declared-as-a-class-type bug report] sent to MS, when the vendor rejects request for fixing this bug.&lt;br /&gt;
&lt;br /&gt;
A fix exists under MSVC 2008/2010: &amp;quot;struct bar;&amp;quot; should be added before the template function declaration&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
struct bar {};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
void foo(struct bar &amp;amp; b);&lt;br /&gt;
&lt;br /&gt;
int main() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In practice, if our templated declaration is a class like QList&amp;lt;&amp;gt;, we have to add the ''struct bar {};'' declaration before #include &amp;lt;QList&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
struct bar {};&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QList&amp;gt;&lt;br /&gt;
QList&amp;lt;bar&amp;gt; myFunction();&lt;br /&gt;
&lt;br /&gt;
int main() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MSVC 2008/2010 changed its behaviour what can be perceived as broken, with regression compared to 2005.&lt;br /&gt;
&lt;br /&gt;
==Application icons==&lt;br /&gt;
Windows keeps icon data within .exe binaries. For KDE applications use CMake's KDE4_ADD_APP_ICON(appsources pattern) macro in automatically assign to add .png images for .exe files. [[Development/CMake/Addons for KDE#Macros|More information on KDE4_ADD_APP_ICON() macro...]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Porting_Guidelines</id>
		<title>Projects/KDE on Windows/Porting Guidelines</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Porting_Guidelines"/>
				<updated>2011-11-25T20:10:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Application icons */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document contains rules useful when you are porting a KDE library to win32. Most of these rules are also valid for porting external libraries code, like application's libraries and even application's private code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Before you start==&lt;br /&gt;
* Make sure (ask KDElibs/win32 maintainer) that the library you selected for porting is not ported, but just not committed yet.&lt;br /&gt;
* You can ask the maintainer for proposals, what can be useful for porting.&lt;br /&gt;
* You will need KDE svn account for your work.&lt;br /&gt;
* Download most current (HEAD) of the KDE libraries.&lt;br /&gt;
&lt;br /&gt;
==Absolute directory checking==&lt;br /&gt;
Look for '/' and &amp;quot;/&amp;quot; and change every single code like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  if (path[0]=='/')&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
  if (path.startsWith('/'))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
  if (!QDir::isRelativePath(path))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(or &amp;quot;QDir::isRelativePath(path)&amp;quot; if there was used path[[0]!='/').&lt;br /&gt;
&lt;br /&gt;
==Ifdefs==&lt;br /&gt;
&lt;br /&gt;
===C++ code===&lt;br /&gt;
&lt;br /&gt;
Macros for C++ code are defined in qglobal.h file. If you've got included at least one Qt header, you probably have qglobal.h included already, otherwise, include it explicity.&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_WS_X11&lt;br /&gt;
  ....&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
for any C++ code that looks like X11-only.&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_OS_UNIX&lt;br /&gt;
  ....&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
for any C++ code that looks like UNIX-only, for example uses UNIX-specific OS features.&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_WS_WIN&lt;br /&gt;
  ....&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
for any C++ code that is MSWindows-only.&lt;br /&gt;
&lt;br /&gt;
===C code===&lt;br /&gt;
Note that qglobal.h is C++-only, so instead use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef _WIN32&lt;br /&gt;
  ....&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for any C code that is MSWindows-only (regardless to compiler type).&lt;br /&gt;
&lt;br /&gt;
=== Rare cases: How to check in Windows-only code which compiler is used?===&lt;br /&gt;
&lt;br /&gt;
====MS Visual C++ - Qt-independent code (especially, C code)====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef _MSC_VER&lt;br /&gt;
  ....//msvc code&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MS Visual C++ - Qt code====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_CC_MSVC&lt;br /&gt;
  ....//msvc code&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Borland C++ - Qt-independent code (especially, C code)====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef __BORLANDC__&lt;br /&gt;
  ....//borland code&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Borland C++ - Qt code====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  #ifdef Q_CC_BOR&lt;br /&gt;
  ....//borland code&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===General notes===&lt;br /&gt;
In many places using #ifdef Q_OS_UNIX / #else / #endif is more readable than separate #ifdefs.&lt;br /&gt;
&lt;br /&gt;
'''NOTE!!!''' if you must ifdef parts of the code, which contain complete features, please file a bug report against kde-windows target, component porting, in kde's bugzilla, so that those can be fixed later.&lt;br /&gt;
&lt;br /&gt;
===Related links===&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_predir_predefined_macros.asp| msvc++ Predefined Macros]&lt;br /&gt;
&lt;br /&gt;
==Header files==&lt;br /&gt;
===Common header file===&lt;br /&gt;
Unless there is are any header file from kdelibs included in your header file, you need to add:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;kdemacros.h&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;kdecore_export.h&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
at the beginning of your header file to have some necessary system-independent macros defined.&lt;br /&gt;
&lt;br /&gt;
===Export macros=== &lt;br /&gt;
For win32 world, symbols are &amp;quot;hidden by default&amp;quot; (not visible by default as e.g. on unix). This has already been [http://lists.kde.org/?l=kde-core-devel&amp;amp;m=105154800130902&amp;amp;w=2|discussed] on the kde mailing list.&lt;br /&gt;
&lt;br /&gt;
For every library's code (not for standalone code), you need to make symbols exported for win32.&lt;br /&gt;
Do this by adding ***_EXPORT macro (win32 export macro) after &amp;quot;class&amp;quot; keyword within any public class (and structure) declaration. You may also decide to put this macro even for non-public class, if you think that the class could be used somewhere outside your library.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class KDEFOO_EXPORT FooClass {&lt;br /&gt;
...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note''': For kdelibs, ***_EXPORT macros for are defined in kdelibs_export_win.h file (in kdelibs/win/ directory). You can study this file to see how the macros are defined. This file is simply included by kdelibs_export.h, for win32 target. &lt;br /&gt;
&lt;br /&gt;
'''Note2''': Recently we're prepared to gcc's export capatibilities, probably in versions newer than 3.4, just like these in win32's msvc compiler. In kdemacros.h file (included by kdelibs_export.h) there are defines prepared for this functionality:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#define KDE_NO_EXPORT __attribute__ ((visibility(&amp;quot;hidden&amp;quot;)))&lt;br /&gt;
#define KDE_EXPORT __attribute__ ((visibility(&amp;quot;default&amp;quot;)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For gcc &amp;lt;= 3.4, KDE_EXPORT and KDE_NO_EXPORT macros are just empty. Note that we're not using KDE_NO_EXPORT for non-public symbols: in the future probably it will be better to use command line switch to turn hidding by default (as win32 compiler has).&lt;br /&gt;
&lt;br /&gt;
'''Note3''': *_EXPORT macros depend on MAKE_{LIBRARYNAME}_LIB macro. In KDE4 buildsystem (cmake) the latter is defined automatically by reusing {LIBRARYNAME}, for example MAKE_KATEINTERFACES_LIB is constructed when KATEINTERFACES library is compiled. The logic behind it is implemented in kdelibs/cmake/modules/KDE4Macros.cmake:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
   if (WIN32)&lt;br /&gt;
      # for shared libraries/plugins a -DMAKE_target_LIB is required&lt;br /&gt;
      string(TOUPPER ${_target_NAME} _symbol)&lt;br /&gt;
      set(_symbol &amp;quot;MAKE_${_symbol}_LIB&amp;quot;)&lt;br /&gt;
      set_target_properties(${_target_NAME} PROPERTIES DEFINE_SYMBOL ${_symbol})&lt;br /&gt;
endif (WIN32) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exporting global functions===&lt;br /&gt;
Also add the same ***_EXPORT at the beginning of public functions' declaration and definition (just before function's type). This also includes functions defined within a namespace.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
namespace Foo {&lt;br /&gt;
 KDEFOO_EXPORT int publicFunction();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What not to export?===&lt;br /&gt;
* methods inside classes (no matter static or not)&lt;br /&gt;
* inline functions&lt;br /&gt;
* template classes, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
class KGenericFactoryBase&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Visibility===&lt;br /&gt;
There are classes or functions that are made &amp;quot;internal&amp;quot;, by design. If you really decided anybody could neven need to link against these classes/functions, you don't need to add **_EXPORT macro for them.&lt;br /&gt;
&lt;br /&gt;
===Deprecated classes===&lt;br /&gt;
Before porting KDElibs to win32, I realized that deprecated classes already use KDE_DEPRECATED macro. We're unable to add another macro like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class KDEFOO_EXPORT KDE_DEPRECATED FooClass { //&amp;lt; - bad for moc!&lt;br /&gt;
...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..because moc'ing will fail for sure. We've defined special macros like that in kdelibs_export.h file (fell free to add your own if needed):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
# ifndef KABC_EXPORT_DEPRECATED&lt;br /&gt;
#  define KABC_EXPORT_DEPRECATED KDE_DEPRECATED KABC_EXPORT&lt;br /&gt;
# endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, we have following example of deprecated class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class KABC_EXPORT_DEPRECATED FooClass { //&amp;lt;- ok for moc&lt;br /&gt;
...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.. which is ok for __moc__. Note that sometimes KDE_DEPRECATED is also used at the end of functions. You don't need to change it for win32 in any way.&lt;br /&gt;
&lt;br /&gt;
==Loadable KDE modules/plugins==&lt;br /&gt;
&lt;br /&gt;
{{TODO|This is deprecated section; we should use K_PLUGIN_FACTORY and K_EXPORT_PLUGIN macros}}&lt;br /&gt;
&lt;br /&gt;
===K_EXPORT_COMPONENT_FACTORY macro===&lt;br /&gt;
&lt;br /&gt;
Use K_EXPORT_COMPONENT_FACTORY( libname, factory ), defined in klibloader.h, instead of hardcoding:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
 extern &amp;quot;C&amp;quot; {void *init_libname() { return new factory; } };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
...because the former way is more portable (contains proper export macro, which ensures visiblility of &amp;quot;init_libname&amp;quot; symbol).&lt;br /&gt;
&lt;br /&gt;
Examples: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY( ktexteditor_insertfile,&lt;br /&gt;
    GenericFactory&amp;lt;InsertFilePlugin&amp;gt;( &amp;quot;ktexteditor_insertfile&amp;quot; ) ) &lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY( libkatepart, KateFactoryPublic )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More complex case===&lt;br /&gt;
&lt;br /&gt;
Sometimes you need to declare a factory which defined as a template with multiple arguments, eg.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
  void* init_resourcecalendarexchange()&lt;br /&gt;
  {&lt;br /&gt;
    return new KRES::PluginFactory&amp;lt;ResourceExchange,ResourceExchangeConfig&amp;gt;();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... but compiler complains about too many arguments passed to K_EXPORT_COMPONENT_FACTORY. To avoid this, you can use __typedef__:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
typedef KRES::PluginFactory&amp;lt;ResourceExchange,ResourceExchangeConfig&amp;gt;  MyFactory;&lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY(resourcecalendarexchange, MyFactory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same trick can be used if the constructor of the factory takes multiple arguments.&lt;br /&gt;
&lt;br /&gt;
==Templates==&lt;br /&gt;
MSVC 6 templates support was heavily broker. Since then the situation has improved a lot. However some specific cases do exist and these are explained in this section.&lt;br /&gt;
===Template arguments need to be defined in header files===&lt;br /&gt;
This won't work with forward declaration:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class QColor;&lt;br /&gt;
#include &amp;lt;QList&amp;gt;&lt;br /&gt;
QList&amp;lt;QColor&amp;gt; foo; // error&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to include full QColor declaration too:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;QColor&amp;gt;&lt;br /&gt;
#include &amp;lt;QList&amp;gt;&lt;br /&gt;
QList&amp;lt;QColor&amp;gt; foo; // ok&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
So this is different when compared to GCC.&lt;br /&gt;
&lt;br /&gt;
==Application icons==&lt;br /&gt;
Windows keeps icon data within .exe binaries. For KDE applications use CMake's KDE4_ADD_APP_ICON(appsources pattern) macro in automatically assign to add .png images for .exe files. [[Development/CMake/Addons for KDE#Macros|More information on KDE4_ADD_APP_ICON() macro...]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Policies/Library_Code_Policy</id>
		<title>Policies/Library Code Policy</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Policies/Library_Code_Policy"/>
				<updated>2011-11-21T20:12:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes some of the recommended conventions that should be applied in the KDE libraries (not applications). Respecting these guidelines helps create a consistant API and also may help ease maintainence of the libraries later. While these conventions are not mandatory, they are important guidelines, and should be respected unless you have a good reason to disregard them.&lt;br /&gt;
&lt;br /&gt;
As an introduction, you should read the document [http://wiki.qt-project.org/API_Design_Principles Qt-Style C++ API Design Principles].&lt;br /&gt;
&lt;br /&gt;
For kdelibs, it is recommended to follow the [[Policies/Kdelibs_Coding_Style | Kdelibs Coding Style]].&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
In KDE, we basically follow the same naming conventions as Qt.&lt;br /&gt;
&lt;br /&gt;
Class names starts with a capital K. The rest is in camel case. Function names starts with a lower case, but the first letter of each successive word is capitalized.&lt;br /&gt;
&lt;br /&gt;
Unless dealing with central libraries (kdecore, kdeui), classes should be in the library namespace. In that case, it is the namespace which starts with K and the classes inside may not start with it. New libraries should choose their namespace.&lt;br /&gt;
&lt;br /&gt;
The prefix 'set' is used for setters, but the prefix ''''get'''' is not used for accessors. Accessors are simply named with the name of the property they access. The exception is for accessors of a boolean which may start with the prefix ''''is''''.&lt;br /&gt;
&lt;br /&gt;
Acronyms are lowercased too. Example:&lt;br /&gt;
&amp;lt;tt&amp;gt;KUrl&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KURL&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;isNssEnabled()&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;isNSSEnabled()&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessors should usually be &amp;lt;tt&amp;gt;const&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This example shows some possible functions names&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
public:&lt;br /&gt;
    void setColor(const QColor&amp;amp; c);&lt;br /&gt;
    QColor color() const;&lt;br /&gt;
    void setDirty(bool b);&lt;br /&gt;
    bool isDirty() const;&lt;br /&gt;
&lt;br /&gt;
private Q_SLOTS:&lt;br /&gt;
    void slotParentChanged();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Make one public class for every .h file. Add the &amp;lt;tt&amp;gt;_EXPORT&amp;lt;/tt&amp;gt; macro related to the library they are in.&lt;br /&gt;
Private classes should be declared in the .cpp file, or in a _p.h file.&lt;br /&gt;
&lt;br /&gt;
== D-Pointers ==&lt;br /&gt;
In order to more easily maintain binary compatibility, there shouldn't be private members in a public class. For more information about binary compatibility, read [[Policies/Binary_Compatibility_Issues_With_C++|Binary Compatibility Issues With C++]].&lt;br /&gt;
&lt;br /&gt;
By convention, the private class will be named the same as the public class, with &amp;lt;tt&amp;gt;Private&amp;lt;/tt&amp;gt; appended to the name.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class KFooPrivate;&lt;br /&gt;
class KFoo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    /* public members */&lt;br /&gt;
private:&lt;br /&gt;
    KFooPrivate * const d;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the .cpp file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class KFooPrivate&lt;br /&gt;
{&lt;br /&gt;
    public:&lt;br /&gt;
        int someInteger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
KFoo::KFoo() : d(new KFooPrivate)&lt;br /&gt;
{&lt;br /&gt;
    /* ... */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
KFoo::~KFoo()&lt;br /&gt;
{&lt;br /&gt;
    delete d;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Notice that the member d is &amp;lt;tt&amp;gt;const&amp;lt;/tt&amp;gt; to avoid modifying it by mistake.&lt;br /&gt;
&lt;br /&gt;
If you are implementing an implicitly shared class, you should consider using {{qt|QSharedData}} and {{qt|QSharedDataPointer}} for d.&lt;br /&gt;
&lt;br /&gt;
Sometimes, complex code may be moved to a member method of the Private class itself. Doing this may give the compiler an extra register to optimize the code, since you won't be using &amp;quot;d&amp;quot; all the time. Also, remember to '''inline''' such methods if they are called only from one place.&lt;br /&gt;
&lt;br /&gt;
=== Shared D-Pointers ===&lt;br /&gt;
&lt;br /&gt;
If your class hierarchy is large and/or deep, you may want to try the concept of shared d-pointers. You'll be trading the added complexity for a smaller memory footprint in the main object (there will be only one &amp;quot;d&amp;quot; variable in it). Other advantages include:&lt;br /&gt;
&lt;br /&gt;
:* direct access to the private data of the whole hierarchy (in other words, the Private classes are in fact &amp;quot;protected&amp;quot;, not &amp;quot;private&amp;quot;)&lt;br /&gt;
:* access to the parent's d-pointer methods&lt;br /&gt;
&lt;br /&gt;
The latter advantage is especially useful if your class has moved the code from the main class to the Private class. If that's the case, you should be calling the Private methods instead: since they are not exported, they will create simpler relocations in the final library (or none at all). By simply calling the Private method instead of the public one, you contribute to a faster load-time of your library.&lt;br /&gt;
&lt;br /&gt;
To implement a &amp;quot;shared d-pointer&amp;quot;, you need to:&lt;br /&gt;
:# define a '''protected''' variable (d_ptr) in the least derived class of your hierarchy&lt;br /&gt;
:# in each class of the hierarchy, define a '''private''' function called d_func() that reinterpret_casts that d_ptr to the current class's Private class&lt;br /&gt;
:# use Q_D(Foo) at the beginning of the functions to have access to a variable &amp;quot;d&amp;quot;&lt;br /&gt;
:# the private classes derive from one another just like the public hierarchy; they also have virtual destructors&lt;br /&gt;
:# add one extra, protected constructor that takes the private class as a parameter&lt;br /&gt;
:# in each constructor for all derived classes, call the parent's constructor that takes the d pointer as a parameter&lt;br /&gt;
&lt;br /&gt;
There's an example of such a construct in a [[/Shared_D-Pointer_Example|separate page]].&lt;br /&gt;
&lt;br /&gt;
=== Q_DECLARE_PRIVATE ===&lt;br /&gt;
&lt;br /&gt;
This is a handy macro that hides the ugly stuff for you. It creates the &amp;lt;tt&amp;gt;d_func()&amp;lt;/tt&amp;gt; function for you, using the variable called &amp;lt;tt&amp;gt;d_ptr&amp;lt;/tt&amp;gt;. If yours has that name, you can use this macro. If it has another name, maybe you should create a macro to make your code look nicer.&lt;br /&gt;
&lt;br /&gt;
=== Q-Pointers ===&lt;br /&gt;
&lt;br /&gt;
Q-pointers are like d-pointers, but work in the reverse direction: they are in the Private class and they point to the public class. Needless to say, this is only possible for classes that don't share their d-pointers. Examples of classes that might benefit from q-pointers are all those derived from QObject, while classes with implicit sharing are those that potentially can't use it.&lt;br /&gt;
&lt;br /&gt;
Q-pointers are especially useful if your class has moved most of the code to the Private class as recommended. In that case, you may need to emit signals from the Private class. You would do it as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
    emit q-&amp;gt;signalName();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(You need to declare the Private class a friend of your public one; Q_DECLARE_PRIVATE does that for you)&lt;br /&gt;
&lt;br /&gt;
Q-pointers may also use the a shared q-pointer technique just like [[#Shared D-Pointers|d-pointers]] can. What's more, Qt also provides a macro called &amp;lt;tt&amp;gt;Q_DECLARE_PUBLIC&amp;lt;/tt&amp;gt; and one &amp;lt;tt&amp;gt;Q_Q&amp;lt;/tt&amp;gt; to hide the ugly parts of the implementation.&lt;br /&gt;
&lt;br /&gt;
== Inline Code ==&lt;br /&gt;
For binary compatibility reasons, try to avoid inline code in headers. Specifically no inline constructor or destructor.&lt;br /&gt;
&lt;br /&gt;
If ever you add inline code please note the following:&lt;br /&gt;
* Installed headers should compile with the following preprocessor defines: &amp;lt;tt&amp;gt;QT_NO_CAST_FROM_ASCII&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;QT_NO_CAST_TO_ASCII&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;QT_NO_KEYWORD&amp;lt;/tt&amp;gt;. So don't forget {{qt|QLatin1String}}.&lt;br /&gt;
* No C casts in the header. Use &amp;lt;tt&amp;gt;static_cast&amp;lt;/tt&amp;gt; if types are known. Use &amp;lt;tt&amp;gt;qobject_cast&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;dynamic_cast&amp;lt;/tt&amp;gt; if types are QObject based. dynamic_cast is not only slower, but is also unreliable across shared libraries.&lt;br /&gt;
* In general, check your code for [[Development/Tutorials/Common_Programming_Mistakes|common mistakes]].&lt;br /&gt;
&lt;br /&gt;
These recommendations are also true for code that are not in headers.&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
Try to avoid meaningless boolean parameters in functions. Example of a bad boolean argument:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
static QString KApplication::makeStdCaption( const QString &amp;amp;caption,&lt;br /&gt;
                                             bool withAppName,&lt;br /&gt;
                                             bool modified);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because when you read code that uses the above function, you can't easily know the significance of the parameters&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
window-&amp;gt;setCaption(KApplication::makeStdCaption( &amp;quot;Document Foo&amp;quot;,&lt;br /&gt;
                         true, true));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution is to use {{qt|QFlags}}. If the options only apply to one function, call the &amp;lt;tt&amp;gt;enum FunctionNameOption&amp;lt;/tt&amp;gt; and the QFlags typedef &amp;lt;tt&amp;gt;FunctionNameOptions&amp;lt;/tt&amp;gt;. Do that even if there is only one option, this will allow you to add more options later and keep the binary compatibility.&lt;br /&gt;
&lt;br /&gt;
So a better API would be:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class KApplication&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    /* [...] */&lt;br /&gt;
    enum StandardCaptionOption {&lt;br /&gt;
        /**&lt;br /&gt;
         * Indicates to include the application name&lt;br /&gt;
         */&lt;br /&gt;
        WithApplicationName = 0x01,&lt;br /&gt;
        /**&lt;br /&gt;
         * Note in the caption that there is unsaved data&lt;br /&gt;
         */&lt;br /&gt;
        Modified = 0x02&lt;br /&gt;
    };&lt;br /&gt;
    Q_DECLARE_FLAGS(StandardCaptionOptions, &lt;br /&gt;
                    StandardCaptionOption)&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Builds a caption using a standard layout.&lt;br /&gt;
     *&lt;br /&gt;
     * @param userCaption The caption string you want to display&lt;br /&gt;
     * @param options a set of flags from MakeStandartCaptionOption&lt;br /&gt;
     */&lt;br /&gt;
    static QString makeStandardCaption(const QString&amp;amp; userCaption,&lt;br /&gt;
       const StandardCaptionOptions&amp;amp; options = WithApplicationName);&lt;br /&gt;
    /* [...] */&lt;br /&gt;
};&lt;br /&gt;
Q_DECLARE_OPERATORS_FOR_FLAGS(KApplication::StandardCaptionOptions)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Const References ==&lt;br /&gt;
Each object parameter that is not a basic type (int, float, bool, enum,  or pointers) should be passed by reference-to-const. This is faster, because it is not required to do a copy of the object. Do that even for object that are already implicitly shared, like QString:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
QString myMethod( const QString&amp;amp; foo,&lt;br /&gt;
                  const QPixmap&amp;amp; bar,&lt;br /&gt;
                  int number );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Avoid const references for return types though. Returning for example&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
const QList&amp;lt;int&amp;gt; &amp;amp;someProperty() const;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
means exposing the internal data structure for someProperty() and it's very difficult to change it in the future while preserving binary compatibility. Especially for implicitly shared objects the one refcount that one avoids by returning a const reference is often not worth it the exposure of implementation.&lt;br /&gt;
&lt;br /&gt;
There are cases where it makes sense, where performance is absolutely critical and the implementation is very fixed. So think twice about it and consider returning a value instead:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
QList&amp;lt;int&amp;gt; someProperty() const;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Signals and Slots ==&lt;br /&gt;
In the libraries, use &amp;lt;tt&amp;gt;Q_SIGNALS&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Q_SLOTS&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;signals&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;slots&amp;lt;/tt&amp;gt;. They are syntactically equivalent and should be used to avoid conflicts with boost signals, and with python's use of &amp;quot;slots&amp;quot; in its headers.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
Consider using &amp;lt;tt&amp;gt;Q_PROPERTY&amp;lt;/tt&amp;gt; for properties. The reason is that properties (especially those marked &amp;lt;tt&amp;gt;SCRIPTABLE&amp;lt;/tt&amp;gt;) will be accessible through the javascript interface.&lt;br /&gt;
&lt;br /&gt;
If you follow the propname / setPropname naming scheme, moc sets a special flag for the {{qt|QMetaProperty}}.&lt;br /&gt;
&lt;br /&gt;
== Explicit Constructors ==&lt;br /&gt;
For each constructor (other than the copy constructor), check if you should make the constructor &amp;lt;tt&amp;gt;explicit&amp;lt;/tt&amp;gt; in order to minimize wrong use of the constructor.&lt;br /&gt;
&lt;br /&gt;
Basically, each constructor that may take only one argument should be marked &amp;lt;tt&amp;gt;explicit&amp;lt;/tt&amp;gt; unless the whole point of the constructor is to allow implicit casting.&lt;br /&gt;
&lt;br /&gt;
== Avoid including other headers in headers ==&lt;br /&gt;
Try to reduce as much as possible the number of includes in header files. This will generally help reduce the compilation time, especially for developers when just one header has been modified. It may also avoid errors that can be caused by conflicts between headers.&lt;br /&gt;
&lt;br /&gt;
If an object in the class is only used by pointer or by reference, it is not required to include the header for that object. Instead, just add a forward declaration before the class.&lt;br /&gt;
&lt;br /&gt;
In this example, the class KFoo uses KBar by reference, so we do not need to include KBar's header:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;kfoobase.h&amp;gt;&lt;br /&gt;
class KBar;&lt;br /&gt;
class KFoo : public KFooBase&lt;br /&gt;
{&lt;br /&gt;
    public:&lt;br /&gt;
        /* [...] */&lt;br /&gt;
        void myMethod(const KBar&amp;amp; bar);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting #includes right ==&lt;br /&gt;
&lt;br /&gt;
There are two types of #include statements: &amp;lt;tt&amp;gt;#include &amp;lt;foo.h&amp;gt;&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;#include &amp;quot;foo.h&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Say we have the file &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;/usr/include/mylib/&amp;lt;/tt&amp;gt; that contains the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;header1.h&amp;gt;&lt;br /&gt;
#include &amp;quot;header2.h&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The preprocessor will search for the file &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt; in all the paths given as &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; arguments and then replace the line with the contents of that file.&lt;br /&gt;
&lt;br /&gt;
For line 2 the preprocessor tries to use the file /usr/include/mylib/header2.h first and if it does not exist search for the file like it did for &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt;. The important part to note here is that the preprocessor does not look in the directory of the source file that includes &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; but in the directory where &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; resides.&lt;br /&gt;
&lt;br /&gt;
Now, which include statement is the one to use? After all you can specify every directory you want using &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; (or rather CMake's &amp;lt;tt&amp;gt;include_directories()&amp;lt;/tt&amp;gt;) and thus could use &amp;lt;tt&amp;gt;#include &amp;lt;...&amp;gt;&amp;lt;/tt&amp;gt; everywhere.&lt;br /&gt;
&lt;br /&gt;
=== As application developer ===&lt;br /&gt;
* Include headers from '''external''' libraries using '''angle brackets'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore/QDate&amp;gt;&lt;br /&gt;
#include &amp;lt;zlib.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Include headers from your '''own project''' using '''double quotes'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;myclass.h&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Rationale: ''The header files of external libraries are obviously not in the same directory as your source files. So you need to use angle brackets.''&lt;br /&gt;
&lt;br /&gt;
''Headers of your own application have a defined relative location to the source files of your application. Using KDE4's cmake macros your source directory is the first include switch to the compiler and therefore there's no difference in using angle brackets or double quotes. If you work with a different buildsystem that does not include the current source directory or disable CMAKE_INCLUDE_CURRENT_DIR then all includes (inside your application) using angle brackets will break.''&lt;br /&gt;
&lt;br /&gt;
''Ideally the buildsystem would not need to specify &amp;lt;tt&amp;gt;-I&amp;amp;lt;source directory&amp;amp;gt;&amp;lt;/tt&amp;gt; though as that can break with library headers that have the same filename as a header of your project (i.e.: If a library has the header file &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; and your project has a different file with the same filename the compiler will always pick the header from your project instead of the one from the library because the source directory of the project is specified first.)''&lt;br /&gt;
&lt;br /&gt;
=== As library developer ===&lt;br /&gt;
* Include headers from '''external''' libraries using '''angle brackets'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore/QDate&amp;gt;&lt;br /&gt;
#include &amp;lt;zlib.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Include headers of your '''own library''' and libraries that belong to it using '''double quotes'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;xyz.h&amp;quot; // same library and same directory&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rationale: ''The header files of external libraries are obviously not in a fixed location relative to your source files. So you need to use angle brackets.''&lt;br /&gt;
&lt;br /&gt;
''Headers of your own libraries have a fixed relative location in the filesystem. Therefore you'' can ''use double quotes. You should use double quotes because otherwise the include statement could include a different header file than expected. An example how angle brackets can break the build:''&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;tt&amp;gt;/usr/include/libxyz/xyz.h&amp;lt;/tt&amp;gt; includes &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; using angle brackets and expects to have it replaced with the contents of the file &amp;lt;tt&amp;gt;/usr/include/libzyx/foo.h&amp;lt;/tt&amp;gt;. Assuming there's another library that also ships a &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; file in the directory &amp;lt;tt&amp;gt;/usr/include/anotherlib/&amp;lt;/tt&amp;gt;. If the application that uses both libraries compiles with &amp;quot;&amp;lt;tt&amp;gt;g++ -I/usr/include/libxyz -I/usr/include/anotherlib ...&amp;lt;/tt&amp;gt;&amp;quot; libxyz will work as expected. If the application compiles with &amp;quot;&amp;lt;tt&amp;gt;g++ -I/usr/include/anotherlib -I/usr/include/libxyz ...&amp;lt;/tt&amp;gt;&amp;quot; the header &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; will include the file &amp;lt;tt&amp;gt;/usr/include/anotherlib/foo.h&amp;lt;/tt&amp;gt; instead of the file that is shipped with libxyz. The same problem can appear if an application has a header file of the same name as a library and specifies &amp;lt;tt&amp;gt;-I./&amp;lt;/tt&amp;gt; as the first include directory.''&lt;br /&gt;
&lt;br /&gt;
=== Include order ===&lt;br /&gt;
&lt;br /&gt;
Another important aspect of include management is the include order. Typically, you have a class named Foo, a file foo.h and a file foo.cpp . The rule is :&lt;br /&gt;
&lt;br /&gt;
: ''In your file foo.cpp, you should include &amp;quot;foo.h&amp;quot; as the first include, before the system includes.''&lt;br /&gt;
&lt;br /&gt;
The rationale behind that is to make your header standalone. &lt;br /&gt;
&lt;br /&gt;
Let's imagine that your foo.h looks like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Bar getBar();&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And your foo.cpp looks like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;bar.h&amp;quot;&lt;br /&gt;
#include &amp;quot;foo.h&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your foo.cpp file will compile, but it will not compile for other people using foo.h without including bar.h . Including &amp;quot;foo.h&amp;quot; first makes sure that your foo.h header works for others.&lt;br /&gt;
&lt;br /&gt;
=== Include guards ===&lt;br /&gt;
Header files should use guards to protect against possible multiple inclusion.&lt;br /&gt;
Your myfoo.h header should look like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef MYFOO_H&lt;br /&gt;
#define MYFOO_H&lt;br /&gt;
... &amp;lt;stuff&amp;gt;...&lt;br /&gt;
#endif /* MYFOO_H */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To be even more careful, you may want to encode a namespace or subdirectory name (e.g. KFOO) into the guard macro name, for example: MYFOO_H, KFOO_MYFOO_H, or _KFOO_MYFOO_H_ are all acceptable macro names.  By convention, the macro name should be all uppercase; but that is not a firm requirement.&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
Global static objects in libraries should be avoided. You never know when the constructor will be run or if it will be run at all.&lt;br /&gt;
; Wrong&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
static QString foo; // wrong - object might not be constructed&lt;br /&gt;
static QString bar(&amp;quot;hello&amp;quot;); // as above&lt;br /&gt;
static int foo = myInitializer(); // myInitializer() might not be called&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In particular, &amp;lt;b&amp;gt;never&amp;lt;/b&amp;gt; construct QObject-derived objects this way. On Windows (MS Visual C++) the object's internals will be left uninitialized within a library and will lead to crashes ([http://www.kdedevelopers.org/node/2889 more info]).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
static QFile myFile(&amp;quot;abc&amp;quot;);  // QFile inherits QObject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
; Correct&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
static const int i = 42;&lt;br /&gt;
static const int ii[3] = {1, 2, 3};&lt;br /&gt;
static const char myString[] = &amp;quot;hello&amp;quot;;&lt;br /&gt;
static const MyStruct s = {3, 4.4, &amp;quot;hello&amp;quot;};&lt;br /&gt;
K_GLOBAL_STATIC(QFile, myFile);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use [http://api.kde.org/4.0-api/kdelibs-apidocs/kdecore/html/group__KDEMacros.html#g75ca0c60b03dc5e4f9427263bf4043c7 &amp;lt;tt&amp;gt;K_GLOBAL_STATIC&amp;lt;/tt&amp;gt;] macro (and for QObject-derived objects you should) to create global static objects which will be initialized the first time you use them.&lt;br /&gt;
&lt;br /&gt;
== Signal and Slot Normalization ==&lt;br /&gt;
Since &amp;lt;tt&amp;gt;QObject::connect&amp;lt;/tt&amp;gt; uses a string-based comparison&lt;br /&gt;
of the function signature, it requires some normalization to take&lt;br /&gt;
place. It does that automatically for you, but it takes some CPU&lt;br /&gt;
time, so, if it doesn't hurt your code's readability, normalize&lt;br /&gt;
manually your SIGNAL and SLOT entries.&lt;br /&gt;
&lt;br /&gt;
For example, you may have the following code:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
QObject::connect(this, SIGNAL( newValue(const QString&amp;amp;,&lt;br /&gt;
                                        const MyNamespace::Type&amp;amp;) ),&lt;br /&gt;
                 other, SLOT( value(const QString &amp;amp;) ));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
It would be preferable to write as follows:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
QObject::connect(this, SIGNAL(newValue(QString,MyNamespace::Type)),&lt;br /&gt;
                 other, SLOT(value(QString)));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the absence of extra whitespace and the&lt;br /&gt;
reduction of pass-by-reference-to-const parameters to simple&lt;br /&gt;
pass-by-value ones. The normalization may involve other&lt;br /&gt;
transformations, but these are the most common ones. Also note that&lt;br /&gt;
types in namespaces should always use the full qualified name.&lt;br /&gt;
To be sure what the proper normalization is, read the {{path|.moc}} file&lt;br /&gt;
generated for the class.&lt;br /&gt;
&lt;br /&gt;
'''Note''': If you are unsure about the normalization, don't do it. Let&lt;br /&gt;
QObject do it for you (the performance penalty is negligible in most cases).&lt;br /&gt;
&lt;br /&gt;
== External Dependencies ==&lt;br /&gt;
When a library pulls in a new external dependency due to a new feature or a change in implementation, it is highly preferred to make that dependency optional if at all possible. For some core features in a library this may not be possible, but usually it is even if the cost is a degradation in features when built without that dependency.&lt;br /&gt;
&lt;br /&gt;
All dependencies should be adequately documented in the build system so that they appear in the summary post-configure.&lt;br /&gt;
&lt;br /&gt;
For libraries in the '''kdelibs module''', this is a hard requirement: '''no new non-optional dependencies may be added, all new dependencies must be made optional at configure time'''. Exceptions may be granted for unusual circumstances by sending a request to the kde-core-devel at kde.org mailing list and getting a consensus decision to grant an exception there.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Every class and method should be well documented. Read the [[Policies/Library Documentation Policy|KDE Library Documentation Policy]] for the guidelines to follow when documenting your code.&lt;br /&gt;
&lt;br /&gt;
Also don't forget the license headers and copyrights in each file. As stated in the [[Policies/Licensing Policy|Licensing Policy]], kdelibs code must be licensed under the LGPL, BSD, or X11 license.&lt;br /&gt;
&lt;br /&gt;
Author: [mailto:ogoffart@kde.org Olivier Goffart] March 2006&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Policies/Kdelibs_Coding_Style</id>
		<title>Policies/Kdelibs Coding Style</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Policies/Kdelibs_Coding_Style"/>
				<updated>2011-09-25T17:24:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Artistic Style (astyle) automatic code formatting */  --unpad and --pad (new syntax)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This document describes the recommended coding style for kdelibs. Nobody is forced to use this style, but to have consistent formatting of the source code files it is recommended to make use of it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
'''In short: Kdelibs coding style follows the Qt 4 coding style.'''&lt;br /&gt;
&lt;br /&gt;
== Indentation == &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
* No tabs&lt;br /&gt;
* 4 Spaces instead of one tab&lt;br /&gt;
&lt;br /&gt;
== Variable declaration == &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
* Each variable declaration on a new line&lt;br /&gt;
* Each new word in a variable name starts with a capital letter (so-called camelCase)&lt;br /&gt;
* Avoid abbreviations&lt;br /&gt;
* Take useful names. No short names, except:&lt;br /&gt;
** Single character variable names can denote counters and temporary variables whose purpose is obvious&lt;br /&gt;
** Variables and functions start with a lowercase letter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
// wrong&amp;lt;/translate&amp;gt;&lt;br /&gt;
KProgressBar *prbar;&lt;br /&gt;
QString prtxt, errstr;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
// correct&amp;lt;/translate&amp;gt;&lt;br /&gt;
KProgressBar *downloadProgressBar;&lt;br /&gt;
QString progressText;&lt;br /&gt;
QString errorString;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Whitespace == &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
* Use blank lines to group statements&lt;br /&gt;
* Use only one empty line&lt;br /&gt;
* Use one space after each keyword&lt;br /&gt;
* For pointers or references, use a single space before '*' or '&amp;amp;', but not after&lt;br /&gt;
* No space after a cast&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
// wrong&amp;lt;/translate&amp;gt;&lt;br /&gt;
QString* myString;&lt;br /&gt;
if(true){&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
// correct&amp;lt;/translate&amp;gt;&lt;br /&gt;
QString *myString;&lt;br /&gt;
if (true) {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Braces == &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
As a base rule, the left curly brace goes on the same line as the start of the statement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
// wrong&amp;lt;/translate&amp;gt;&lt;br /&gt;
if (true)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
// correct&amp;lt;/translate&amp;gt;&lt;br /&gt;
if (true) {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Exception: Function implementations, class, struct and namespace declarations always have the opening brace on the start of a line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
void debug(int i)&lt;br /&gt;
{&lt;br /&gt;
    qDebug(&amp;quot;foo: %i&amp;quot;, i);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Debug&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Use curly braces even when the body of a conditional statement contains only one line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
// wrong&amp;lt;/translate&amp;gt;&lt;br /&gt;
if (true)&lt;br /&gt;
    return true;&lt;br /&gt;
&lt;br /&gt;
for (int i = 0; i &amp;lt; 10; ++i)&lt;br /&gt;
    qDebug(&amp;quot;%i&amp;quot;, i);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
// correct&amp;lt;/translate&amp;gt;&lt;br /&gt;
if (true) {&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for (int i = 0; i &amp;lt; 10; ++i) {&lt;br /&gt;
    qDebug(&amp;quot;%i&amp;quot;, i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Switch statements == &amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Case labels are on the same column as the switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
switch (myEnum) {&lt;br /&gt;
case Value1:&lt;br /&gt;
    doSomething();&lt;br /&gt;
    break;&lt;br /&gt;
case Value2:&lt;br /&gt;
    doSomethingElse();&lt;br /&gt;
    // fall through&lt;br /&gt;
default:&lt;br /&gt;
    defaultHandling();&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Line breaks == &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Try to keep lines shorter than 100 characters, inserting line breaks as necessary.&lt;br /&gt;
&lt;br /&gt;
== Qt Includes == &amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
* If you add #includes for Qt classes, use both the module and class name.  This allows library code to be used by applications without excessive compiler include paths.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
// wrong&amp;lt;/translate&amp;gt;&lt;br /&gt;
#include &amp;lt;QString&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
// correct&amp;lt;/translate&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore/QString&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Artistic Style (astyle) automatic code formatting == &amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
You can use [http://astyle.sourceforge.net/ astyle] (&amp;gt;=1.23) to format code or to test if you have followed this document. Run the following command:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
astyle --indent=spaces=4 --brackets=linux \&lt;br /&gt;
       --indent-labels --pad=oper --unpad=paren \&lt;br /&gt;
       --one-line=keep-statements --convert-tabs \&lt;br /&gt;
       --indent-preprocessor \&lt;br /&gt;
       `find -type f -name '*.cpp'` `find -type f -name '*.cc'` `find -type f -name '*.h'`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
With astyle (&amp;gt;=2.01) you need to run the following command:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
astyle --indent=spaces=4 --brackets=linux \&lt;br /&gt;
       --indent-labels --pad-oper --unpad-paren --pad-header \&lt;br /&gt;
       --keep-one-line-statements --convert-tabs \&lt;br /&gt;
       --indent-preprocessor \&lt;br /&gt;
       `find -type f -name '*.cpp'` `find -type f -name '*.cc'` `find -type f -name '*.h'`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
A related shell script could be found for unix in [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/astyle-kdelibs kdesdk/scripts/astyle-kdelibs] and for windows in [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/astyle-kdelibs.bat kdesdk/scripts/astyle-kdelibs.bat].&lt;br /&gt;
&lt;br /&gt;
== Emacs and Vim scripts == &amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
The &amp;quot;scripts&amp;quot; directory in the kdesdk module contains, among other useful things, some useful additions to the Emacs and Vim text editors that make it easier to edit KDE code with them.&lt;br /&gt;
 &lt;br /&gt;
=== Emacs ===&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdesdk/scripts/kde-emacs kde-emacs] directory contains a set of key bindings, macros and general useful code. It is compatible with both GNU Emacs and XEmacs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
To start using kde-emacs, add the following to your .emacs:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;/path/to/kde-emacs&amp;quot;)&lt;br /&gt;
(require 'kde-emacs)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
Many settings can be changed by editing the &amp;quot;kde-emacs&amp;quot; group via &amp;lt;tt&amp;gt;M-x customize-group&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
For more information, including what the key bindings are and what additional settings you could add to your .emacs, please check &amp;lt;tt&amp;gt;kde-emacs.el&amp;lt;/tt&amp;gt; itself.&lt;br /&gt;
&lt;br /&gt;
=== Vim === &amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
You can find a vim script in [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/kde-devel-vim.vim kdesdk/scripts/kde-devel-vim.vim] that helps you to keep the coding style correct. In addition to defaulting to the kdelibs coding style it will automatically use the correct style for Solid and kdepim code. If you want to add rules for other projects feel free to add them in the SetCodingStyle function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
To use the script, include it in your {{path|~/.vimrc}} like this:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
source /path/to/kde/sources/kdesdk/scripts/kde-devel-vim.vim&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Document started by Urs Wolfer. Some parts of this document have been adopted from the Qt Coding Style document posted by Zack Rusin on kde-core-devel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
[[Category:Policies]] [[Category:C++]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Oxygen/Style</id>
		<title>Projects/Oxygen/Style</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Oxygen/Style"/>
				<updated>2011-09-17T19:52:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Color Usage */  fix palettes path&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Oxygen Icon Style Guide=&lt;br /&gt;
{{warning|'''The Oxygen Icon Style is currently a work in progress:''' This is the newest version, but several sections need expanding.}}&lt;br /&gt;
&lt;br /&gt;
== Oxygen's Approach to Icon Sizes ==&lt;br /&gt;
Oxygen icons are all scalable vector graphics (SVG) documents, which is the default format used by [http://inkscape.org Inkscape]. These SVG files are used to render bitmap images (PNG) at various sizes. &lt;br /&gt;
&lt;br /&gt;
Oxygen uses the 128x128 'pixel' SVG files to produce icons at 5 different sizes: 128x128, 64x64, 48x48, 32x32 and 16x16 pixel images. 88x88 'pixel' SVG files are used to render at 22x22 pixels. Optionally, 16x16 pixel icons can be created in a 64x64 'pixel' SVG file.&lt;br /&gt;
&lt;br /&gt;
For icons that are designed to be rendered at 32x32, 22x22 and 16x16 it is crucial that icons elements align to pixel boundaries of the rendered icon to improve legibility.  After rendering to 22x22 and 16x16, icons will probably need some hand optimization using the GIMP.  There is little point in making a 22x22 and 16x16 PNG icon if all that was done was to export a PNG from the 128 pixel SVG.&lt;br /&gt;
&lt;br /&gt;
Various templates are provided to assist you in creating Oxygen icons. They are linked to below.&lt;br /&gt;
&lt;br /&gt;
{{note|Only action icons ''require'' the shadow at the bottom of the icon. For all other types you may remove this shadow.}}&lt;br /&gt;
&lt;br /&gt;
=== 16x16 ===&lt;br /&gt;
'''Either:'''&lt;br /&gt;
&lt;br /&gt;
*Use the [http://websvn.kde.org/*checkout*/trunk/playground/artwork/Oxygen/templates/action_32x32.template.svg 32x32 template]&lt;br /&gt;
*Set the grid to 8 pixels&lt;br /&gt;
*Preview the icon by zooming out to 13% &lt;br /&gt;
**Quickly tap the minus key six times&lt;br /&gt;
&lt;br /&gt;
'''Or:'''&lt;br /&gt;
&lt;br /&gt;
*Use an Inkscape document with dimensions of 64x64 pixels&lt;br /&gt;
*Set the grid to 4 pixels&lt;br /&gt;
*Preview the icon by zooming out to 25% &lt;br /&gt;
**Quickly tap the minus key four times&lt;br /&gt;
&lt;br /&gt;
=== 22x22 ===&lt;br /&gt;
*Use the [http://websvn.kde.org/*checkout*/trunk/playground/artwork/Oxygen/templates/action_22x22.template.svg 22x22 template].&lt;br /&gt;
*Set the grid to 4 pixels&lt;br /&gt;
*Preview the icon by zooming out to 25% &lt;br /&gt;
**Quickly tap the minus key four times&lt;br /&gt;
&lt;br /&gt;
=== 32x32 ===&lt;br /&gt;
*Use the [http://websvn.kde.org/*checkout*/trunk/playground/artwork/Oxygen/templates/action_32x32.template.svg 32x32 template]&lt;br /&gt;
*Set the grid to 4 pixels&lt;br /&gt;
*Preview the icon by zooming out to 25% &lt;br /&gt;
**Quickly tap the minus key four times&lt;br /&gt;
&lt;br /&gt;
=== 48x48 ===&lt;br /&gt;
*Use the [http://websvn.kde.org/*checkout*/trunk/playground/artwork/Oxygen/templates/action_32x32.template.svg 32x32 template]&lt;br /&gt;
&lt;br /&gt;
=== 64x64 ===&lt;br /&gt;
*Use the [http://websvn.kde.org/*checkout*/trunk/playground/artwork/Oxygen/templates/action_32x32.template.svg 32x32 template]&lt;br /&gt;
*Set the grid to 4 pixels&lt;br /&gt;
*Preview the icon by zooming out to 50% &lt;br /&gt;
**Press the '2' key&lt;br /&gt;
&lt;br /&gt;
=== 128x128 ===&lt;br /&gt;
*Use the [http://websvn.kde.org/*checkout*/trunk/playground/artwork/Oxygen/templates/action_32x32.template.svg 32x32 template]&lt;br /&gt;
*Set the grid to 1 pixel&lt;br /&gt;
*Preview the icon by zoom to 100% &lt;br /&gt;
**Press the '1' key&lt;br /&gt;
&lt;br /&gt;
== Color Usage ==&lt;br /&gt;
Oxygen has a distinct, defined palette which should '''always''' be adhered to.&lt;br /&gt;
&lt;br /&gt;
[[Image:figure4.png]]&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
The Oxygen color palette is released under the [http://creativecommons.org/licenses/by-nc-nd/2.5/ Creative Commons Attribution-NonCommercial-NoDerivs 2.5 License].}}&lt;br /&gt;
&lt;br /&gt;
You can easily use the Oxygen Colour scheme in Inkscape by downloading the palette.  To download the Oxygen Palette [http://websvn.kde.org/*checkout*/trunk/playground/artwork/Oxygen/utils/oxygen.gpl Click here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Close Inkscape, if you have it running&lt;br /&gt;
#Place [http://websvn.kde.org/*checkout*/trunk/playground/artwork/Oxygen/utils/oxygen.gpl 'oxygen.gpl'] in this folder: {{path|~/.config/inkscape/palettes/}}&lt;br /&gt;
#Start Inkscape&lt;br /&gt;
#Select the Oxygen palette in the Swatches dialog (Ctrl+Shift+W).&lt;br /&gt;
&lt;br /&gt;
== Metaphors/Styles for different icon types ==&lt;br /&gt;
=== Actions ===&lt;br /&gt;
&lt;br /&gt;
Action icons require a distinctive 1 pixel solid outline. Action icons are drawn to appear as they are on a shelf. This means that a small shadow is drawn directly beneath the icon. &lt;br /&gt;
&lt;br /&gt;
The templates linked above include this shadow, therefore consistancy is ensured.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
Application icons vary the most in style from cartoonish logos to photo-realistic (example and explanation needed)&lt;br /&gt;
&lt;br /&gt;
=== Mimetypes ===&lt;br /&gt;
&lt;br /&gt;
Mimetypes all use the same paper sheet template (example and explanation needed)&lt;br /&gt;
&lt;br /&gt;
=== Devices ===&lt;br /&gt;
&lt;br /&gt;
Devices are the most realistic of all icons (example and explanation needed)&lt;br /&gt;
&lt;br /&gt;
=== Places ===&lt;br /&gt;
&lt;br /&gt;
Places icons vary in style depending on whether the subject at hand can be defined by a physical object. &lt;br /&gt;
&lt;br /&gt;
=== Emblems ===&lt;br /&gt;
&lt;br /&gt;
Emblems are icons overlaid on top of other icons. Examples of Emblems are the &amp;quot;'link arrow' and the 'mounted star' symbol. These icons should be noticeable but not detract and cover too much of the icon beneath them.&lt;br /&gt;
&lt;br /&gt;
{{Box|Mounted Emblem|[[Image:Oxygen-128-emblem-mounted.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''The mounted emblem uses the vibrant colours from the Oxygen palette. The form of the icon itself is very simple and clear.''}}&lt;br /&gt;
&lt;br /&gt;
=== Exporting the PNG bitmaps ===&lt;br /&gt;
You can use inkscape to create PNG bitmap images of your icon. &lt;br /&gt;
&lt;br /&gt;
#Press &amp;lt;tt&amp;gt;&amp;lt;Ctrl&amp;gt; + &amp;lt;Shift&amp;gt; + E&amp;lt;/tt&amp;gt;, or select 'Export Bitmap' from the File menu.&lt;br /&gt;
#Select the 'Page' button to export everything inside the page's borders&lt;br /&gt;
#Enter the width of the icon you wish to output to. If you press the 'Return/Enter' key, Inkscape will fill the height and resolution/dpi boxes for you&lt;br /&gt;
#Enter the path filename of your Icon. Don't forget to use the [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html Icon Naming Specification]. Also refer to the KDE TechBase article here - [[Projects/Oxygen/namingSpec]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Artwork]][[Category:Oxygen]]&lt;br /&gt;
&lt;br /&gt;
=== Making the final SVG icon to commit/submit ===&lt;br /&gt;
Make a copy of the icon with Inkscape.&lt;br /&gt;
&lt;br /&gt;
#Choose &amp;quot;File -&amp;gt; Save As&amp;quot; and select &amp;quot;Plain SVG&amp;quot;.  This will remove Inkscape specific information which is not necessary to render the image.&lt;br /&gt;
#After saving the file, choose &amp;quot;File -&amp;gt; Vacuum Defs&amp;quot;, to remove unused definitions, and then save again.&lt;br /&gt;
&lt;br /&gt;
Icons made with Adobe Illustrator.&lt;br /&gt;
&lt;br /&gt;
#When making an icon with AI, be careful not to include Adobe extensions to SVG.&lt;br /&gt;
#All Adobe stuff should be removed from the final SVG.  It will probably be necessary to use a text editor (such as KWrite) to do this.&lt;br /&gt;
#To check for a proper SVG file, open the icon in the Squiggle SVG viewer.&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Git/Configuration</id>
		<title>Development/Git/Configuration</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Git/Configuration"/>
				<updated>2011-07-29T21:18:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* URL Renaming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git Configuration ==&lt;br /&gt;
&lt;br /&gt;
How to set up Git for use in KDE.&lt;br /&gt;
&lt;br /&gt;
=== Quick Start ===&lt;br /&gt;
&lt;br /&gt;
To quickly set up git to just build a copy of KDE you do not need to perform any git configuration, however the following steps will simplify using Git:&lt;br /&gt;
&lt;br /&gt;
* [[../Configuration#URL_Renaming|URL Renaming]]&lt;br /&gt;
&lt;br /&gt;
If you plan to commit to a KDE repository using Git then you should follow all the steps on this page.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Levels ===&lt;br /&gt;
&lt;br /&gt;
Your Git configuration operates at 3 levels:&lt;br /&gt;
* System&lt;br /&gt;
* User&lt;br /&gt;
* Repository&lt;br /&gt;
&lt;br /&gt;
The System Level sets up global Git configuration defaults for every User and Repository on your system.  We will ignore these for our purposes as they are usually blank.&lt;br /&gt;
&lt;br /&gt;
The User Level (aka Global) sets up the default configuration for a particular User to apply to all repositories used by that User.  Settings made at this level will always override any matching System Level settings.  The User Configuration is stored in your ~/.gitconfig file.&lt;br /&gt;
&lt;br /&gt;
The Repository Level sets up the configuration for a particular Repository clone.  Settings made at this level will always override any matching User or System Level settings.  The Repository Configuration is stored in the repository .git/config file.&lt;br /&gt;
&lt;br /&gt;
The recommended KDE Git Configuration will set some settings at a user level and some at a repository level.  You may wish to change the level some settings apply at however as we will assume you only or mostly use Git for developing KDE.&lt;br /&gt;
&lt;br /&gt;
You can set Git settings either by directly editing the config files, but it is far safer to use the ''git config'' command.&lt;br /&gt;
&lt;br /&gt;
To set a Git setting at User level (i.e. in ~/.gitconfig):&lt;br /&gt;
&lt;br /&gt;
 git config --global &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set a Git setting at repo level (i.e in &amp;lt;repo&amp;gt;/.git/config):&lt;br /&gt;
&lt;br /&gt;
 cd &amp;lt;repo&amp;gt;&lt;br /&gt;
 git config &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic Settings ===&lt;br /&gt;
&lt;br /&gt;
If you plan to commit to KDE Git, then you will need to set up git to use your identity.kde.org name and details to help identify your work:&lt;br /&gt;
&lt;br /&gt;
 git config --global user.name &amp;lt;Your Real Name&amp;gt;&lt;br /&gt;
 git config --global user.email &amp;lt;Your identity.kde.org email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name and email address you configure will be used as the author information for every commit you make. Note that in order for commit message keywords such as BUG and CCBUG to work, your Bugzilla account email address has to match the email address used in your commits.&lt;br /&gt;
&lt;br /&gt;
To enable colored output when using git:&lt;br /&gt;
&lt;br /&gt;
 git config --global color.ui true&lt;br /&gt;
&lt;br /&gt;
=== Commit Template ===&lt;br /&gt;
&lt;br /&gt;
The Commit Template is a standard layout for commit messages, usually containing instructions for how a project expects messages to formatted and what details are to be included.  You can choose to set a User Level template as a default, then use any project level variations at a repo level.&lt;br /&gt;
&lt;br /&gt;
It is recommended to use the kdelibs template as your default.  Once you have cloned kdelibs then set as follows to ensure you use the latest available version:&lt;br /&gt;
&lt;br /&gt;
 git config --global commit.template &amp;lt;path/to/kdelibs/&amp;gt;.commit-template&lt;br /&gt;
&lt;br /&gt;
If you don't plan to have kdelibs cloned then download the kdelibs template from [https://projects.kde.org/projects/kde/kdelibs/repository/revisions/master/raw/.commit-template here], save as ~/.commit-template, and configure to use that copy:&lt;br /&gt;
&lt;br /&gt;
 git config --global commit.template ~/.commit-template&lt;br /&gt;
&lt;br /&gt;
When cloning other KDE repositories, you should check to see if they have a project specific commit template, and if so you should set that at a repo level:&lt;br /&gt;
&lt;br /&gt;
 cd &amp;lt;repo&amp;gt;&lt;br /&gt;
 git config commit.template .commit-template&lt;br /&gt;
&lt;br /&gt;
=== Push Default ===&lt;br /&gt;
&lt;br /&gt;
It is recommended for new Git users to set the push default to nothing:&lt;br /&gt;
&lt;br /&gt;
 git config --global push.default nothing&lt;br /&gt;
&lt;br /&gt;
This option forces you to ''always'' enter the name of the remote branch you wish to push to, rather than using a default value.  This is good practice as it ensures you push to the correct remote branch and avoid accidentally pushing all local branches to the remote.&lt;br /&gt;
&lt;br /&gt;
More experienced users may wish to set the option to tracking:&lt;br /&gt;
&lt;br /&gt;
 git config --global push.default tracking&lt;br /&gt;
&lt;br /&gt;
This will default to push to the remote branch your local branch is tracking, but if you setup your local branch incorrectly you may still accidentally push to the wrong remote.&lt;br /&gt;
&lt;br /&gt;
=== URL Renaming ===&lt;br /&gt;
&lt;br /&gt;
Instead of having to remember and type in the different full git addresses for pulling and pushing, we recommend you manually add the following to your Git User Configuration (~/.gitconfig):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[url &amp;quot;git://anongit.kde.org/&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     insteadOf = kde:&lt;br /&gt;
 [url &amp;quot;git@git.kde.org:&amp;quot;]&lt;br /&gt;
     pushInsteadOf = kde:&lt;br /&gt;
&lt;br /&gt;
=== Bash Auto-Completion ===&lt;br /&gt;
&lt;br /&gt;
Bash auto-completion for Git commands and branches may or may not work out-of-the-box for you depending on how Git is installed on your system.  To see if you have auto-completion already working type ''git'' on your command line followed by a space and hit the ''tab'' key twice.  If you see a list of available git commands then you have Git auto-completion enabled.&lt;br /&gt;
&lt;br /&gt;
If auto-completion does not work for you then you can download the [http://git.kernel.org/?p=git/git.git;a=blob_plain;f=contrib/completion/git-completion.bash;hb=HEAD git-completion.bash] script and follow the instructions inside it.&lt;br /&gt;
&lt;br /&gt;
=== Bash Prompt ===&lt;br /&gt;
&lt;br /&gt;
If you have git-completion.bash installed, you can also add details like the branch name and dirty status to your command prompt, which will save repeated uses of ''git branch'' and ''git status''.&lt;br /&gt;
&lt;br /&gt;
To activate this, you need to add the following to your $PS1 environment variable:&lt;br /&gt;
&lt;br /&gt;
 $(__git_ps1 &amp;quot; (%s)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Note that in the &amp;quot; (%s)&amp;quot; part the %s variable is replaced with the branch name, the rest of the text between the quotes is up to you.&lt;br /&gt;
&lt;br /&gt;
If you have not set a PS1 value yourself, then you are likely to be using your distro default value which you can find out by typing:&lt;br /&gt;
&lt;br /&gt;
 echo $PS1&lt;br /&gt;
&lt;br /&gt;
To change this for your user, edit your .bashrc and copy the result of the echo command into there, then change it to add the Git branch.&lt;br /&gt;
&lt;br /&gt;
For example, if ''echo $PS1'' shows:&lt;br /&gt;
&lt;br /&gt;
 $(ppwd \l)\u@\h:\w&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then add the following to your .bashrc:&lt;br /&gt;
&lt;br /&gt;
 PS1='$(ppwd \l)\u@\h:\w$(__git_ps1 &amp;quot; (%s)&amp;quot;)&amp;gt; ' &lt;br /&gt;
&lt;br /&gt;
which will show your prompt as follows:&lt;br /&gt;
&lt;br /&gt;
 odysseus@argo:~/kde/src/trunk/KDE/kdelibs (master + u+2)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can learn more about customizing your bash prompt at http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/.&lt;br /&gt;
&lt;br /&gt;
You can also have the prompt show the 'dirty' status of your repo, i.e. if you have uncommited changes, and whether your branch differs from upstream HEAD:&lt;br /&gt;
&lt;br /&gt;
* * = unstaged changes&lt;br /&gt;
* + = staged changes&lt;br /&gt;
* $ = stashed changes&lt;br /&gt;
* % = untracked files&lt;br /&gt;
* u-1 = behind upstream by 1 commit&lt;br /&gt;
* u+2 = ahead of upstream by 2 commits&lt;br /&gt;
* u= = same as upstream&lt;br /&gt;
&lt;br /&gt;
To enable showing the dirty (unstaged/staged) state, add the following line to your .bashrc 'before' your PS1 setting:&lt;br /&gt;
&lt;br /&gt;
 export GIT_PS1_SHOWDIRTYSTATE=1&lt;br /&gt;
&lt;br /&gt;
To enable showing the stashed state, add the following line to your .bashrc ''before'' your PS1 setting:&lt;br /&gt;
&lt;br /&gt;
 export GIT_PS1_SHOWSTASHSTATE=1&lt;br /&gt;
&lt;br /&gt;
To enable showing the untracked state, add the following line to your .bashrc ''before'' your PS1 setting:&lt;br /&gt;
&lt;br /&gt;
 export GIT_PS1_SHOWUNTRACKEDFILES=1&lt;br /&gt;
&lt;br /&gt;
To enable showing the upstream state, add the following line to your .bashrc ''before'' your PS1 setting:&lt;br /&gt;
&lt;br /&gt;
 export GIT_PS1_SHOWUPSTREAM=&amp;quot;auto verbose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To not show the number of commits ahead or behind remove the &amp;quot;verbose&amp;quot; flag.&lt;br /&gt;
&lt;br /&gt;
To disable showing the dirty state for any one repo:&lt;br /&gt;
&lt;br /&gt;
 cd &amp;lt;repo&amp;gt;&lt;br /&gt;
 git config bash.showDirtyState false&lt;br /&gt;
&lt;br /&gt;
To disable showing the upstream state for any one repo:&lt;br /&gt;
&lt;br /&gt;
 cd &amp;lt;repo&amp;gt;&lt;br /&gt;
 git config bash.showUpstream false&lt;br /&gt;
&lt;br /&gt;
=== Multiple Work Branches ===&lt;br /&gt;
&lt;br /&gt;
You will often want to have more than one build environment in parallel, for example if you want to work on both stable and unstable branches at the same time.&lt;br /&gt;
&lt;br /&gt;
With Git you can easily have many work branches in your repository and easily switch between them.  The problem here however is that you can only work on the one branch at a time, and switching branches will usually trigger a massive rebuild of the entire repository.  &lt;br /&gt;
&lt;br /&gt;
One solution would be to have a separate repository clone for each branch you wish to work on in parallel, but this takes up more disk space, the clones and branches can easily get out-of-sync, and it makes forward/back porting bug fixes between branches more difficult.  If choosing this method then you should make each new clone from your initial local clone rather than from the main repo as this will be quicker.&lt;br /&gt;
&lt;br /&gt;
The ideal solution is for a single git repository clone to provide separate source directories for each branch you wish to work on.  This can be achieved using the git-new-workdir script provided in the Git contrib directory.  This script uses sym-links to create what appears as a new clone in a separate folder but actually uses the same local clone.&lt;br /&gt;
&lt;br /&gt;
The git-new-workdir script may be installed as part of your system git.  If not download the script from [https://github.com/git/git/raw/master/contrib/workdir/git-new-workdir the git repo] and install in your ~/.bin.&lt;br /&gt;
&lt;br /&gt;
For example, assuming your have a kdelibs.git clone living in ~/kde/src/master/kdelibs, then the following command will create a 4.6 work branch in ~/kde/src/4.6/kdelibs:&lt;br /&gt;
&lt;br /&gt;
 git-new-workdir ~/kde/src/master/kdelibs ~/kde/src/4.6/kdelibs KDE/4.6&lt;br /&gt;
&lt;br /&gt;
== RSA Key fingerprint for git.kde.org==&lt;br /&gt;
c8:45:ba:89:85:11:78:b5:a4:09:d9:31:f6:7f:7c:79&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Contribute/Get_a_Contributor_Account</id>
		<title>Contribute/Get a Contributor Account</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Contribute/Get_a_Contributor_Account"/>
				<updated>2011-05-01T19:17:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: I learn that reading old text is a bit devastating for newcomers, striked out...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{warning|This page is yet to be reviewed for changes required by the migration to Git.  Information and commands on this page may no longer be valid and should be used with care. Please see the [[Development/Git|KDE Git hub page]] for more details. }}&lt;br /&gt;
&lt;br /&gt;
{{Template:I18n/Language Navigation Bar|Contribute/Get a SVN Account}}&lt;br /&gt;
This tutorial is about how to apply for a SVN account for KDE.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
== Notations ==&lt;br /&gt;
&lt;br /&gt;
* The word ''SVN'' applies to all SVN servers.&lt;br /&gt;
* The phrase ''KDE SVN'' refers only to KDE's SVN server.&lt;br /&gt;
* The phrase ''anonymous SVN'' means KDE's anonymous SVN mirrors.&lt;br /&gt;
&lt;br /&gt;
== What is KDE SVN? ==&lt;br /&gt;
&lt;br /&gt;
To have write access to KDE SVN, you have to use the main SVN server of KDE. (Anonymous SVN uses mirrors of this server. SVN does not allow you to read from one server and write to another.)&lt;br /&gt;
&lt;br /&gt;
To be able to use the main KDE SVN server, you need an account there. An account is made up of a ''username'' (normally your family name), a password and an email address. The username is for getting in, the password for authenticating and the email address for knowing who to contact if another developer wants to contact the account holder. (The username is sometimes known also as the ''login''.)&lt;br /&gt;
&lt;br /&gt;
A KDE SVN account allows you to write to nearly anywhere in the KDE SVN. However, there are exceptions:&lt;br /&gt;
* the KDE SVN internals&lt;br /&gt;
* the www module (exceptions can be made for this.)&lt;br /&gt;
&lt;br /&gt;
'''Note''': you can see the accounts in [http://websvn.kde.org/trunk/kde-common/accounts kde-common/accounts]. That is the list of all accounts. Yes, '''the account list is public''', for example on [http://websvn.kde.org WebSVN].&lt;br /&gt;
&lt;br /&gt;
== Who Can Apply For a KDE SVN Account? ==&lt;br /&gt;
&lt;br /&gt;
Normally, any developer who has done some work on KDE can apply for a KDE SVN account.&lt;br /&gt;
&lt;br /&gt;
Translators should get approval from their team leader so that they can organize how the work is being done in his/her team. Please mention the approval from the team leader when requesting the account.&lt;br /&gt;
&lt;br /&gt;
Please also [[Policies/SVN Commit Policy|read the KDE SVN commit policy]]. You must accept these rules when using your future KDE SVN account. Please also familiarize yourself with the [http://www.kde.org/code-of-conduct/ KDE Code of Conduct] which describes the social foundations within KDE.&lt;br /&gt;
&lt;br /&gt;
Also please apply for an account only if you think that you will work on KDE for a somewhat longer time. If you know that you will only work for a couple of weeks and then never again, please consider not applying for a KDE SVN account but still, do continue to send patches.&lt;br /&gt;
&lt;br /&gt;
The limitations are not there to exclude anyone - they are there to ensure that the maintenance of accounts remains reasonable.&lt;br /&gt;
&lt;br /&gt;
Of course, to be clear: ''the KDE's sysadmins have the last word about whether or not to create a KDE SVN account for somebody''.&lt;br /&gt;
&lt;br /&gt;
== SSH ==&lt;br /&gt;
&lt;br /&gt;
You need a SSH public key in order to access your KDE SVN account. If you already have one, you can skip the next subsection and go to [[#Setting up the SVN+SSH protocol|Setting up the SVN+SSH protocol]].&lt;br /&gt;
&lt;br /&gt;
=== Generating the SSH keys ===&lt;br /&gt;
&lt;br /&gt;
To be able to use your KDE SVN account with SSH, you need a SSH public key. Please notice that it is '''not''' a GPG (OpenPGP) key, which is completely unrelated!&lt;br /&gt;
&lt;br /&gt;
The password in the sense of this documentation is the '''public key''' that you are creating.&lt;br /&gt;
&lt;br /&gt;
For more information on how to create a pair o SSH keys, please refer to a [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-keygen SSH documentation] or book.&lt;br /&gt;
&lt;br /&gt;
In short, the command to create a pair of keys is '''ssh-keygen''' and it requires the type of key you will create, either DSA or RSA - both are fine.&lt;br /&gt;
&lt;br /&gt;
To create a new pair of keys, use &amp;lt;code bash&amp;gt;ssh-keygen -t dsa&amp;lt;/code&amp;gt; or &amp;lt;code bash&amp;gt;ssh-keygen -t rsa&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is also a type called RSA1 which was used in version 1 of the SSH protocol. See the [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-keygen ssh documentation] for more details.&lt;br /&gt;
&lt;br /&gt;
You can then accept the default filename for your key (either {{path|$HOME/.ssh/id_dsa}} or {{path|$HOME/.ssh/id_rsa}}, depending on the type of key you have chosen). After that, a passphrase is asked. It is recommended that you do not leave it blank.&lt;br /&gt;
&lt;br /&gt;
Now that you are finished generating your key pair, you will have two files: a private key and a public key. If you have accepted the default filename, they will be respectively {{path|$HOME/.ssh/id_dsa}} and {{path|$HOME/.ssh/id_dsa.pub}} or {{path|$HOME/.ssh/id_rsa}} and {{path|$HOME/.ssh/id_rsa.pub}}, depending on the type of key you have specified.&lt;br /&gt;
&lt;br /&gt;
The private key '''must''' remain secret, do not publish it to anyone under any circumstance.&lt;br /&gt;
&lt;br /&gt;
The public key can be published and shall be sent when you are applying for a KDE SVN account.&lt;br /&gt;
&lt;br /&gt;
You should also set up &amp;lt;tt&amp;gt;ssh-agent&amp;lt;/tt&amp;gt; so you do not have to type the password every time you connect via SSH. There are several tutorials available explaining how to do this, for example [http://mah.everybody.org/docs/ssh this one]. [http://www.gentoo.org/proj/en/keychain Keychain] is a program that makes this task easier.&lt;br /&gt;
&lt;br /&gt;
'''Note''': if you already have an ssh key, you can just use the existing key instead of creating a new one.&lt;br /&gt;
&lt;br /&gt;
{{tip|&lt;br /&gt;
If you want to use SVN with SSH with another user than the one who created the keys, you need to copy &amp;lt;tt&amp;gt;$HOME/.ssh/id_dsa.pub&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$HOME/.ssh/id_dsa&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;$HOME/.ssh/id_rsa.pub&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$HOME/.ssh/id_rsa&amp;lt;/tt&amp;gt; to the other user's &amp;lt;tt&amp;gt;$HOME/.ssh&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
You should probably also backup those files.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Setting up the SVN+SSH protocol ===&lt;br /&gt;
&lt;br /&gt;
Once you created your key, you'll have to tell SSH that this one should be used for all connections to KDE sites. Add the following lines to the &amp;lt;tt&amp;gt;~/.ssh/config&amp;lt;/tt&amp;gt; file. Replace USERNAME with yours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host *.kde.org&lt;br /&gt;
        User USERNAME&lt;br /&gt;
        IdentityFile ~/.ssh/id_dsa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The linked IdentityFile must belong to the public key you send in when applying for the SVN account. But it is ''not'' the public key (&amp;lt;tt&amp;gt;*.pub&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Apply for an account ==&lt;br /&gt;
&lt;br /&gt;
Now you are ready to apply for for a KDE SVN account. Go to [https://identity.kde.org/ https://identity.kde.org/svnaccount/] and create an account if you don't have one already. If you already have an account, you can use that. After you entered the site you will find a form which you can fill in to apply for an account.&lt;br /&gt;
&lt;br /&gt;
When you register on identity.kde.org, you will need to enter your name and an e-mail address, which has to be your own (a normal address or a KDE Mail address). Of course, do not forget that '''this email address becomes public''' (at least by [http://websvn.kde.org WebSVN]) so you will unfortunately get spam.&lt;br /&gt;
&lt;br /&gt;
Also note that this email address should be the same one that you use on [http://bugs.kde.org bugs.kde.org]. If you don't have an account in [http://bugs.kde.org bugs.kde.org], please create one so that it can be given usual developer rights. Closing bug reports with keywords in commit comments only works if the email address of your Subversion and [http://bugs.kde.org bugs.kde.org] accounts match.&lt;br /&gt;
&lt;br /&gt;
After that, you must choose a username for your KDE SVN account between the suggestions presented to you. Please notice it is not possible to propose something else such as a nickname, as the username must be as close as possible to someone's real name.&lt;br /&gt;
&lt;br /&gt;
If you ask for a KDE email address one day, this will be the base for your address. For example: &amp;lt;tt&amp;gt;username@kde.org&amp;lt;/tt&amp;gt;. (Note, however, that KDE email addresses are not granted so easily anymore, as too many people have ranted with a KDE address and other people thought that it was the official position of the KDE Team. In the meantime, [http://www.kdemail.net KDE Mail] was created for if you need a permanent address.)&lt;br /&gt;
&lt;br /&gt;
When applying for developer access you have to provide your public key. This key will be added to your profile. You can always add more keys, delete keys you don't use anymore from your profile page on identity.kde.org.&lt;br /&gt;
&lt;br /&gt;
The form also holds a field ''Why do you want an account?'', where you can explain what you want to do with your future KDE SVN account, like for example developing a certain application, making documentations or being the team leader of a translation.&lt;br /&gt;
&lt;br /&gt;
Also note that the form will ask you who has encouraged you to apply. He or she will also get an email to verify your request.&lt;br /&gt;
&lt;br /&gt;
== Updating Existing Account ==&lt;br /&gt;
&lt;br /&gt;
If you already have a KDE SVN account but want to update the ssh key, you should go to [https://identity.kde.org/ identity.kde.org] and change the keys in your profile.&lt;br /&gt;
&lt;br /&gt;
== And Now? ==&lt;br /&gt;
&lt;br /&gt;
After having sent the form and clicking the link in the email, you have to wait for the answer (typically within two or three days).&lt;br /&gt;
&lt;br /&gt;
Once you have confirmation that your account has been created, you need to adapt your local copy to the new server. See the [[Contribute/First Steps with your KDE SVN Account|next tutorial]] for your first steps with your new account.&lt;br /&gt;
&lt;br /&gt;
Please add your geographical location (what country are you in?) and other details at the [http://commit-digest.org/data/ Commit Digest data page] so that the Commit Digest can accurately reflect who is working where.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development"/>
				<updated>2011-05-01T19:14:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__ __NOTOC__ {{Template:I18n/Language Navigation Bar|Development}}&lt;br /&gt;
{| style=&amp;quot;margin: 1em 2.5% 0 2.5%; padding: 0 5px;&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|[[Image:Discover.png|noframe]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-left: 50px;&amp;quot; |[[Image:Action_launch.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[Development/Architecture|KDE Architecture]]&lt;br /&gt;
:Architectural design documents explaining KDE technologies.&lt;br /&gt;
:''Related'': [http://api.kde.org API Documentation]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-left: 50px;&amp;quot;|[[Image:Action_configure.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[Development/Tutorials|Programming Tutorials]]&lt;br /&gt;
:Step by step tutorials for KDE development.&lt;br /&gt;
:''Related:'' [[Development/Tools|Development Tools]] | [[Development/FAQs|FAQs]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-left: 50px;&amp;quot;|[[Image:Action_rebuild.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[Development/Languages|Programming Languages]]&lt;br /&gt;
:Supported programming languages for KDE development.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-left: 50px;&amp;quot;|[[Image:CMake-logo-48.png|noframe|left|48px]] ||&lt;br /&gt;
;[[Development/CMake|CMake]]&lt;br /&gt;
:CMake related information.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-left: 50px;&amp;quot;|[[Image:Git-logo.svg|noframe|left|48px]] ||&lt;br /&gt;
;[[Development/Git|Version-control System - Git]]&lt;br /&gt;
:Git related information.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-left: 50px;&amp;quot; |[[Image:Action_note.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[Development/Guidelines|Standards &amp;amp; Guidelines]]&lt;br /&gt;
:Developer guidelines and technical standards KDE uses.&lt;br /&gt;
:''Related:'' [[Policies|Code Contribution and Development Policies]] | [[Development/Further Information|Further Information]] (links, books, blogs, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-left: 50px;&amp;quot; |[[Image:Action_tool.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[Development/Software Engineering Framework|Software Engineering Framework]]&lt;br /&gt;
:Software Engineering tools and processes used by KDE.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-left: 50px;&amp;quot; |[[Image:Action_help.svg|noframe|left|40px]] ||&lt;br /&gt;
;[[Development/Getting Help|Getting Help]]&lt;br /&gt;
:Resources for finding help with KDE development.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Kexi/Build</id>
		<title>Projects/Kexi/Build</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Kexi/Build"/>
				<updated>2010-02-08T23:28:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Started by [[User:Jstaniek|Jstaniek]], 8 February 2010&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Packaging==&lt;br /&gt;
===SQLite packaging===&lt;br /&gt;
See [http://kdedevelopers.org/node/4156] and [http://www.piggz.co.uk/?page=blogentry&amp;amp;id=53] for background.&lt;br /&gt;
&lt;br /&gt;
'''Goal for Kexi 2.2''': compile with at least SQLITE_SECURE_DELETE support enabled, SQLITE_ENABLE_FTS3 recommended.&lt;br /&gt;
&lt;br /&gt;
Status of SQLite support by distribution:&lt;br /&gt;
&lt;br /&gt;
*Mandriva [http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/sqlite3/current/SPECS/sqlite3.spec?view=markup]&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled on 2009-02-08&lt;br /&gt;
**flags: -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_FTS3=3 -DSQLITE_ENABLE_RTREE=1 -Wall -DNDEBUG=1 -DSQLITE_SECURE_DELETE=1&lt;br /&gt;
*Debian: ....&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled&lt;br /&gt;
*Ubuntu: ....&lt;br /&gt;
*Fedora: ....&lt;br /&gt;
*KDE on Mac: ...&lt;br /&gt;
*KDE on Windows: ...&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
*All distributions:&lt;br /&gt;
**SQLITE_SECURE_DELETE cannot be disabled, e.g. at runtime&lt;br /&gt;
***contacted the SQLite.org team for solution&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Kexi/Build</id>
		<title>Projects/Kexi/Build</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Kexi/Build"/>
				<updated>2010-02-08T23:28:24Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Started by [[User:Jstaniek|Jstaniek]], 8 February 2010&lt;br /&gt;
&lt;br /&gt;
==Packaging==&lt;br /&gt;
===SQLite packaging===&lt;br /&gt;
See [http://kdedevelopers.org/node/4156] and [http://www.piggz.co.uk/?page=blogentry&amp;amp;id=53] for background.&lt;br /&gt;
&lt;br /&gt;
'''Goal for Kexi 2.2''': compile with at least SQLITE_SECURE_DELETE support enabled, SQLITE_ENABLE_FTS3 recommended.&lt;br /&gt;
&lt;br /&gt;
Status of SQLite support by distribution:&lt;br /&gt;
&lt;br /&gt;
*Mandriva [http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/sqlite3/current/SPECS/sqlite3.spec?view=markup]&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled on 2009-02-08&lt;br /&gt;
**flags: -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_FTS3=3 -DSQLITE_ENABLE_RTREE=1 -Wall -DNDEBUG=1 -DSQLITE_SECURE_DELETE=1&lt;br /&gt;
*Debian: ....&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled&lt;br /&gt;
*Ubuntu: ....&lt;br /&gt;
*Fedora: ....&lt;br /&gt;
*KDE on Mac: ...&lt;br /&gt;
*KDE on Windows: ...&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
*All distributions:&lt;br /&gt;
**SQLITE_SECURE_DELETE cannot be disabled, e.g. at runtime&lt;br /&gt;
***contacted the SQLite.org team for solution&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Kexi/Build</id>
		<title>Projects/Kexi/Build</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Kexi/Build"/>
				<updated>2010-02-08T23:28:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Started at: [[User:Jstaniek|Jstaniek]], 8 February 2010&lt;br /&gt;
&lt;br /&gt;
==Packaging==&lt;br /&gt;
===SQLite packaging===&lt;br /&gt;
See [http://kdedevelopers.org/node/4156] and [http://www.piggz.co.uk/?page=blogentry&amp;amp;id=53] for background.&lt;br /&gt;
&lt;br /&gt;
'''Goal for Kexi 2.2''': compile with at least SQLITE_SECURE_DELETE support enabled, SQLITE_ENABLE_FTS3 recommended.&lt;br /&gt;
&lt;br /&gt;
Status of SQLite support by distribution:&lt;br /&gt;
&lt;br /&gt;
*Mandriva [http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/sqlite3/current/SPECS/sqlite3.spec?view=markup]&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled on 2009-02-08&lt;br /&gt;
**flags: -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_FTS3=3 -DSQLITE_ENABLE_RTREE=1 -Wall -DNDEBUG=1 -DSQLITE_SECURE_DELETE=1&lt;br /&gt;
*Debian: ....&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled&lt;br /&gt;
*Ubuntu: ....&lt;br /&gt;
*Fedora: ....&lt;br /&gt;
*KDE on Mac: ...&lt;br /&gt;
*KDE on Windows: ...&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
*All distributions:&lt;br /&gt;
**SQLITE_SECURE_DELETE cannot be disabled, e.g. at runtime&lt;br /&gt;
***contacted the SQLite.org team for solution&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Kexi/Build</id>
		<title>Projects/Kexi/Build</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Kexi/Build"/>
				<updated>2010-02-08T23:27:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Jstaniek|Jstaniek]] 23:27, 8 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Packaging==&lt;br /&gt;
===SQLite packaging===&lt;br /&gt;
See [http://kdedevelopers.org/node/4156] and [http://www.piggz.co.uk/?page=blogentry&amp;amp;id=53] for background.&lt;br /&gt;
&lt;br /&gt;
'''Goal for Kexi 2.2''': compile with at least SQLITE_SECURE_DELETE support enabled, SQLITE_ENABLE_FTS3 recommended.&lt;br /&gt;
&lt;br /&gt;
Status of SQLite support by distribution:&lt;br /&gt;
&lt;br /&gt;
*Mandriva [http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/sqlite3/current/SPECS/sqlite3.spec?view=markup]&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled on 2009-02-08&lt;br /&gt;
**flags: -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_FTS3=3 -DSQLITE_ENABLE_RTREE=1 -Wall -DNDEBUG=1 -DSQLITE_SECURE_DELETE=1&lt;br /&gt;
*Debian: ....&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled&lt;br /&gt;
*Ubuntu: ....&lt;br /&gt;
*Fedora: ....&lt;br /&gt;
*KDE on Mac: ...&lt;br /&gt;
*KDE on Windows: ...&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
*All distributions:&lt;br /&gt;
**SQLITE_SECURE_DELETE cannot be disabled, e.g. at runtime&lt;br /&gt;
***contacted the SQLite.org team for solution&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Kexi/Build</id>
		<title>Projects/Kexi/Build</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Kexi/Build"/>
				<updated>2010-02-08T23:27:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Jstaniek|Jstaniek]]&lt;br /&gt;
&lt;br /&gt;
==Packaging==&lt;br /&gt;
===SQLite packaging===&lt;br /&gt;
See [http://kdedevelopers.org/node/4156] and [http://www.piggz.co.uk/?page=blogentry&amp;amp;id=53] for background.&lt;br /&gt;
&lt;br /&gt;
'''Goal for Kexi 2.2''': compile with at least SQLITE_SECURE_DELETE support enabled, SQLITE_ENABLE_FTS3 recommended.&lt;br /&gt;
&lt;br /&gt;
Status of SQLite support by distribution:&lt;br /&gt;
&lt;br /&gt;
*Mandriva [http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/sqlite3/current/SPECS/sqlite3.spec?view=markup]&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled on 2009-02-08&lt;br /&gt;
**flags: -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_FTS3=3 -DSQLITE_ENABLE_RTREE=1 -Wall -DNDEBUG=1 -DSQLITE_SECURE_DELETE=1&lt;br /&gt;
*Debian: ....&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled&lt;br /&gt;
*Ubuntu: ....&lt;br /&gt;
*Fedora: ....&lt;br /&gt;
*KDE on Mac: ...&lt;br /&gt;
*KDE on Windows: ...&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
*All distributions:&lt;br /&gt;
**SQLITE_SECURE_DELETE cannot be disabled, e.g. at runtime&lt;br /&gt;
***contacted the SQLite.org team for solution&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Kexi/Build</id>
		<title>Projects/Kexi/Build</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Kexi/Build"/>
				<updated>2010-02-08T23:27:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: Created page with '==Packaging== ===SQLite packaging=== See [http://kdedevelopers.org/node/4156] and [http://www.piggz.co.uk/?page=blogentry&amp;amp;id=53] for background.  '''Goal for Kexi 2.2''': compile...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Packaging==&lt;br /&gt;
===SQLite packaging===&lt;br /&gt;
See [http://kdedevelopers.org/node/4156] and [http://www.piggz.co.uk/?page=blogentry&amp;amp;id=53] for background.&lt;br /&gt;
&lt;br /&gt;
'''Goal for Kexi 2.2''': compile with at least SQLITE_SECURE_DELETE support enabled, SQLITE_ENABLE_FTS3 recommended.&lt;br /&gt;
&lt;br /&gt;
Status of SQLite support by distribution:&lt;br /&gt;
&lt;br /&gt;
*Mandriva [http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/sqlite3/current/SPECS/sqlite3.spec?view=markup]&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled on 2009-02-08&lt;br /&gt;
**flags: -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_FTS3=3 -DSQLITE_ENABLE_RTREE=1 -Wall -DNDEBUG=1 -DSQLITE_SECURE_DELETE=1&lt;br /&gt;
*Debian: ....&lt;br /&gt;
**SQLITE_SECURE_DELETE enabled&lt;br /&gt;
*Ubuntu: ....&lt;br /&gt;
*Fedora: ....&lt;br /&gt;
*KDE on Mac: ...&lt;br /&gt;
*KDE on Windows: ...&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
*All distributions:&lt;br /&gt;
**SQLITE_SECURE_DELETE cannot be disabled, e.g. at runtime&lt;br /&gt;
***contacted the SQLite.org team for solution&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Mobile</id>
		<title>Projects/Mobile</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Mobile"/>
				<updated>2009-10-27T16:21:09Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
* [http://maemo.org/intro/platform/ '''maemo'''] is the core software stack that runs on mobile devices like Nokia's N810 or N900&lt;br /&gt;
* [https://garage.maemo.org/ '''garage'''] is where the projects for maemo are hosted, somewhat compareable to Sourceforge.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Maemo#Diablo '''Diablo'''] is the version (feature upgrade 2008) of maemo. Compare it with Debian's Lenny.&lt;br /&gt;
* [http://www.scratchbox.org/ '''Scratchbox'''] is a cross-compiling environment to enable you to create software for maemo on an i386.&lt;br /&gt;
* [http://www.busybox.net/ '''Busybox'''] is a single binary that allows you to run commands like ls, cat and bunzip2&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Hildon '''Hildon'''] is an application framework and desktop shell for maemo, compare it to the role that Plasma plays in KDE 4&lt;br /&gt;
&lt;br /&gt;
There is a [https://mail.kde.org/mailman/listinfo/kde-maemo kde-maemo mailinglist].&lt;br /&gt;
&lt;br /&gt;
== KDE on Maemo ==&lt;br /&gt;
&lt;br /&gt;
This page is for collecting information about getting KDE running on the Maemo platform used by the Nokia mobile devices N800, N810 and N900.&lt;br /&gt;
&lt;br /&gt;
* Instructions on getting a Maemo development environment on openSuSE http://en.opensuse.org/Maemo&lt;br /&gt;
* There is also a KDE on maemo project at http://kde.garage.maemo.org/&lt;br /&gt;
* [http://www.forwardbias.in/data/articles/qt_on_maemo.txt Tutorial how to get Qt installed on maemo]&lt;br /&gt;
* [[Projects/Maemo/kdepim|Tutorial how to compile KDEPIM on maemo]]&lt;br /&gt;
* [[Projects/Maemo/KDE4_on_n810|Tutorial how to get KDE installed on Maemo]]&lt;br /&gt;
* [[Projects/Maemo/KDE4_on_Mer|Tutorial how to get KDE installed on Mer]]&lt;br /&gt;
&lt;br /&gt;
=== Some blogs entries about KDE on Maemo ===&lt;br /&gt;
&lt;br /&gt;
''Most recent on top''&lt;br /&gt;
&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3672 Marijn Kruisselbrink: Having fun with qemu]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3662 Marijn Kruisselbrink: KOffice on Maemo]&lt;br /&gt;
* [http://blog.forwardbias.in/2008/08/n810-is-awesome.html Girish Ramakrishnan: N810 is awesome]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3628 Fredrik Gladhorn: Various Qt apps]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3624 Marijn Kruisselbrink: KDE packages for maemo]&lt;br /&gt;
* [http://www.notmart.org/index.php/Software/Misc_plasmoids_on_n810 Marco Martin: Misc plasmoids on n810]&lt;br /&gt;
* [http://www.notmart.org/index.php/BlaBla/Akademy,_810_and_stuffs Marco Martin: Akademy, 810 and stuffs]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3623 Richard Dale: Building Ruby on the N810]&lt;br /&gt;
* [http://www.fredemmott.co.uk/blog_156 Fred Emmott: Ogg/Vorbis on N810]&lt;br /&gt;
* [http://www.omat.nl/drupal/content/N810-and-OpenStreetMap-and-toma Tom Albers: N810 and OpenStreetMap and toma]&lt;br /&gt;
* [http://tsdgeos.blogspot.com/2008/08/maemo-scratchbox-on-amd64.html Albert Astals Cid: Maemo scratchbox on amd64]&lt;br /&gt;
* [http://blogs.forum.nokia.com/blog/kate-alholas-forum-nokia-blog/maemo/2008/08/13/akademy-2008-embedded-day Kate Alhola: Akademy 2008 Embedded day] &lt;br /&gt;
* [http://www.gnuton.org/blog/2008/07/qt-4-maemo-the-new-experience/ Antonio Aloisio: Qt 4 Maemo: the new experience.]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3605 Marijn Kruisselbrink: Getting KDE on an n810.]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3575 Marijn Kruisselbrink: Sound on Maemo]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3546 Marijn Kruisselbrink: Plasma on Maemo]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Mobile</id>
		<title>Projects/Mobile</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Mobile"/>
				<updated>2009-10-27T16:19:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Overview */ fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
* [http://maemo.org/intro/platform/ '''maemo'''] is the core software stack that runs on mobile devices like Nokia's N810 or N900&lt;br /&gt;
* [https://garage.maemo.org/ '''garage'''] is where the projects for maemo are hosted, somewhat compareable to Sourceforge.&lt;br /&gt;
* ''Diablo'' is the version (release) of maemo. Compare it with Debian's Lenny.&lt;br /&gt;
* [http://www.scratchbox.org/ '''scratchbox'''] is a cross-compiling environment to enable you to create software for maemo on an i386.&lt;br /&gt;
* [http://www.busybox.net/ '''Busybox'''] is a single binary that allows you to run commands like ls, cat and bunzip2&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Hildon '''Hildon'''] is an application framework and desktop shell for maemo, compare it to the role that Plasma plays in KDE 4&lt;br /&gt;
&lt;br /&gt;
There is a [https://mail.kde.org/mailman/listinfo/kde-maemo kde-maemo mailinglist].&lt;br /&gt;
&lt;br /&gt;
== KDE on Maemo ==&lt;br /&gt;
&lt;br /&gt;
This page is for collecting information about getting KDE running on the Maemo platform used by the Nokia mobile devices N800, N810 and N900.&lt;br /&gt;
&lt;br /&gt;
* Instructions on getting a Maemo development environment on openSuSE http://en.opensuse.org/Maemo&lt;br /&gt;
* There is also a KDE on maemo project at http://kde.garage.maemo.org/&lt;br /&gt;
* [http://www.forwardbias.in/data/articles/qt_on_maemo.txt Tutorial how to get Qt installed on maemo]&lt;br /&gt;
* [[Projects/Maemo/kdepim|Tutorial how to compile KDEPIM on maemo]]&lt;br /&gt;
* [[Projects/Maemo/KDE4_on_n810|Tutorial how to get KDE installed on Maemo]]&lt;br /&gt;
* [[Projects/Maemo/KDE4_on_Mer|Tutorial how to get KDE installed on Mer]]&lt;br /&gt;
&lt;br /&gt;
=== Some blogs entries about KDE on Maemo ===&lt;br /&gt;
&lt;br /&gt;
''Most recent on top''&lt;br /&gt;
&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3672 Marijn Kruisselbrink: Having fun with qemu]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3662 Marijn Kruisselbrink: KOffice on Maemo]&lt;br /&gt;
* [http://blog.forwardbias.in/2008/08/n810-is-awesome.html Girish Ramakrishnan: N810 is awesome]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3628 Fredrik Gladhorn: Various Qt apps]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3624 Marijn Kruisselbrink: KDE packages for maemo]&lt;br /&gt;
* [http://www.notmart.org/index.php/Software/Misc_plasmoids_on_n810 Marco Martin: Misc plasmoids on n810]&lt;br /&gt;
* [http://www.notmart.org/index.php/BlaBla/Akademy,_810_and_stuffs Marco Martin: Akademy, 810 and stuffs]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3623 Richard Dale: Building Ruby on the N810]&lt;br /&gt;
* [http://www.fredemmott.co.uk/blog_156 Fred Emmott: Ogg/Vorbis on N810]&lt;br /&gt;
* [http://www.omat.nl/drupal/content/N810-and-OpenStreetMap-and-toma Tom Albers: N810 and OpenStreetMap and toma]&lt;br /&gt;
* [http://tsdgeos.blogspot.com/2008/08/maemo-scratchbox-on-amd64.html Albert Astals Cid: Maemo scratchbox on amd64]&lt;br /&gt;
* [http://blogs.forum.nokia.com/blog/kate-alholas-forum-nokia-blog/maemo/2008/08/13/akademy-2008-embedded-day Kate Alhola: Akademy 2008 Embedded day] &lt;br /&gt;
* [http://www.gnuton.org/blog/2008/07/qt-4-maemo-the-new-experience/ Antonio Aloisio: Qt 4 Maemo: the new experience.]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3605 Marijn Kruisselbrink: Getting KDE on an n810.]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3575 Marijn Kruisselbrink: Sound on Maemo]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3546 Marijn Kruisselbrink: Plasma on Maemo]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Mobile</id>
		<title>Projects/Mobile</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Mobile"/>
				<updated>2009-10-27T16:19:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Overview */  more links and sort them&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
* [http://maemo.org/intro/platform/ '''maemo'''] is the core software stack that runs on mobile devices like Nokia's N810 or N900&lt;br /&gt;
* [https://garage.maemo.org/ '''garage'''] is where the projects for maemo are hosted, somewhat compareable to Sourceforge.&lt;br /&gt;
* ''Diablo'' is the version (release) of maemo. Compare it with Debian's Lenny.&lt;br /&gt;
* [http://www.scratchbox.org/ '''scratchbox'''] is a cross-compiling environment to enable you to create software for maemo on an i386.&lt;br /&gt;
* [http://www.busybox.net/ '''Busybox'''] is a single binary that allows you to run commands like ls, cat and bunzip2&lt;br /&gt;
* [http://en.wikin pedia.org/wiki/Hildon '''Hildon'''] is an application framework and desktop shell for maemo, compare it to the role that Plasma plays in KDE 4&lt;br /&gt;
&lt;br /&gt;
There is a [https://mail.kde.org/mailman/listinfo/kde-maemo kde-maemo mailinglist].&lt;br /&gt;
&lt;br /&gt;
== KDE on Maemo ==&lt;br /&gt;
&lt;br /&gt;
This page is for collecting information about getting KDE running on the Maemo platform used by the Nokia mobile devices N800, N810 and N900.&lt;br /&gt;
&lt;br /&gt;
* Instructions on getting a Maemo development environment on openSuSE http://en.opensuse.org/Maemo&lt;br /&gt;
* There is also a KDE on maemo project at http://kde.garage.maemo.org/&lt;br /&gt;
* [http://www.forwardbias.in/data/articles/qt_on_maemo.txt Tutorial how to get Qt installed on maemo]&lt;br /&gt;
* [[Projects/Maemo/kdepim|Tutorial how to compile KDEPIM on maemo]]&lt;br /&gt;
* [[Projects/Maemo/KDE4_on_n810|Tutorial how to get KDE installed on Maemo]]&lt;br /&gt;
* [[Projects/Maemo/KDE4_on_Mer|Tutorial how to get KDE installed on Mer]]&lt;br /&gt;
&lt;br /&gt;
=== Some blogs entries about KDE on Maemo ===&lt;br /&gt;
&lt;br /&gt;
''Most recent on top''&lt;br /&gt;
&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3672 Marijn Kruisselbrink: Having fun with qemu]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3662 Marijn Kruisselbrink: KOffice on Maemo]&lt;br /&gt;
* [http://blog.forwardbias.in/2008/08/n810-is-awesome.html Girish Ramakrishnan: N810 is awesome]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3628 Fredrik Gladhorn: Various Qt apps]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3624 Marijn Kruisselbrink: KDE packages for maemo]&lt;br /&gt;
* [http://www.notmart.org/index.php/Software/Misc_plasmoids_on_n810 Marco Martin: Misc plasmoids on n810]&lt;br /&gt;
* [http://www.notmart.org/index.php/BlaBla/Akademy,_810_and_stuffs Marco Martin: Akademy, 810 and stuffs]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3623 Richard Dale: Building Ruby on the N810]&lt;br /&gt;
* [http://www.fredemmott.co.uk/blog_156 Fred Emmott: Ogg/Vorbis on N810]&lt;br /&gt;
* [http://www.omat.nl/drupal/content/N810-and-OpenStreetMap-and-toma Tom Albers: N810 and OpenStreetMap and toma]&lt;br /&gt;
* [http://tsdgeos.blogspot.com/2008/08/maemo-scratchbox-on-amd64.html Albert Astals Cid: Maemo scratchbox on amd64]&lt;br /&gt;
* [http://blogs.forum.nokia.com/blog/kate-alholas-forum-nokia-blog/maemo/2008/08/13/akademy-2008-embedded-day Kate Alhola: Akademy 2008 Embedded day] &lt;br /&gt;
* [http://www.gnuton.org/blog/2008/07/qt-4-maemo-the-new-experience/ Antonio Aloisio: Qt 4 Maemo: the new experience.]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3605 Marijn Kruisselbrink: Getting KDE on an n810.]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3575 Marijn Kruisselbrink: Sound on Maemo]&lt;br /&gt;
* [http://www.kdedevelopers.org/node/3546 Marijn Kruisselbrink: Plasma on Maemo]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Installation</id>
		<title>Projects/KDE on Windows/Installation</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Installation"/>
				<updated>2009-08-28T10:15:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Download needed packages */ prev change sucked on oygen style; use br&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Projects/KDE_on_Windows/Installation}}&lt;br /&gt;
&lt;br /&gt;
{{note|Perhaps actual developers should summarize status of KDE4 on Windows here, while we encourage users to describe their experiences on the [[Talk:{{PAGENAME}}|Talk page?]]}}&lt;br /&gt;
&lt;br /&gt;
== KDE Installer for Windows ==&lt;br /&gt;
You can use this installer to download and install the&lt;br /&gt;
various binary packages that you need to run KDE applications on MS Windows.&lt;br /&gt;
KDE is free and open source so you can build all the applications &amp;quot;from scratch&amp;quot; from their source code;&lt;br /&gt;
but as a convenience for others,&lt;br /&gt;
volunteers create these pre-compiled packages and make them available on the Internet.&lt;br /&gt;
&lt;br /&gt;
'''Disclaimer''' These are early days for KDE4 on Windows,&lt;br /&gt;
some programs work better than others and some fail to run altogether.&lt;br /&gt;
&lt;br /&gt;
'''If you experience any problems please have a look into our [http://lists.kde.org/?l=kde-windows&amp;amp;r=1&amp;amp;w=2| mailing list].'''&lt;br /&gt;
&lt;br /&gt;
You can also use the KDE Installer for Windows to install source code and the packages that you need to ''build'' KDE4 on Windows&lt;br /&gt;
(although if you are building KDE4 on Windows you may prefer to use the emerge system to build KDE and its requirements from latest source);&lt;br /&gt;
see [[Getting Started/Build/KDE4/Windows]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Summary of Steps ===&lt;br /&gt;
* Download and save the latest version of the installer from [http://www.winkde.org/pub/kde/ports/win32/installer/kdewin-installer-gui-latest.exe here] to a directory, e.g. &amp;lt;tt&amp;gt;C:\KDE4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Run the installer, download and install what you need (see [[#Download needed packages|Download needed packages]] below).&lt;br /&gt;
* Try to run a KDE application from the windows start menu (see for KDE x.x.x Release entry)  &lt;br /&gt;
&lt;br /&gt;
=== Download needed packages ===&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-001.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
When you run KDE-installer for the first time, you'll see the welcome screen. Since it's your first launch leave the checkbox below unchecked.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-002.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Proceed to the next screen, where you choose the KDE4 installation directory. It can be anything you prefer, e.g. C:\KDE4.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-003.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
On the next screen, define who you are: End User or Developer. The End User installation installs only binary packages and libraries needed to run KDE application. Package Manager mode provides you also with the source code for all packages needed to build KDE from scratch. &amp;lt;br/&amp;gt;  Then you need to decide what compiler to use - MinGW or MSVC.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-004.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Proceed to the next screen and there choose the directory where all the downloaded packages will be stored. Let it be something like C:\KDE4-tmp or C:\KDE4-packages.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-005.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The next screen will ask you to choose your internet connection type, particularly whether or not you're using a proxy. If you don't use a proxy server, just click 'Next'. If you are unsure of whether you're using proxy or if you have web browser configured to work with it properly, choose the second or the third option, according to your favourite web-browser. If you'd like to set all the settings manually - choose the last option and go ahead.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-006.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
When you click the 'Next' button the (currently, rather short) list of available servers will be loaded and you could choose the one closest to you.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-007.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
When you click 'Next', a list of available releases on the selected server will be shown. Depending on the server there may be stable and/or unstable release available. Some unstable releases may only be available from www.winkde.org because the kde mirrors provides only a limited range of unstable releases. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-008.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After selecting a release an a click on the 'Next' button, the list of all available packages will be loaded and processed, providing you with the list of package groups you can select for further installation. The short description next to each group of packages should make your choice easier. Select the packages you need. Proceed to the next screen.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-009.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Here you can see all the required dependencies, or software necessary to support the choices you've made. Click 'Next' to download them all.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-0010.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-011.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After all the packages are downloaded they'll be unpacked and processed by the installer. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:installer-012.png|600px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The final window will tell that your KDE installation for Windows is complete.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Issues with KDE Installer for Windows ===&lt;br /&gt;
If something goes wrong during installation, for example a file can't be replaced because it is still in use, the installer may still report successful completion.  If you see any alert or failure message from the installer, when it completes, quit and re-run it.&amp;lt;br&amp;gt;&lt;br /&gt;
If that didn't help and you think it's a bug, please report to [mailto:kde-windows@kde.org]&lt;br /&gt;
&lt;br /&gt;
== Testing your installation ==&lt;br /&gt;
Navigate to the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
See if you can run the Qt program assistant.exe.&lt;br /&gt;
Qt programs have fewer dependencies than a full-blown KDE application.&lt;br /&gt;
&lt;br /&gt;
If that works, try running a simple KDE application, such as lskat.exe from the kdegames package.&lt;br /&gt;
&lt;br /&gt;
Look into your start menu: there will be a new entry KDE 4.XX.XX Release. Below that folder you can find all the apps you installed.&lt;br /&gt;
&lt;br /&gt;
=== Startup, shutdown, and diagnosing problems ===&lt;br /&gt;
The first KDE program you run should automatically invoke &amp;lt;tt&amp;gt;kdeinit4.exe&amp;lt;/tt&amp;gt;, the KDE initialization app,&lt;br /&gt;
which starts background KDE applications and services like dbus-daemon, klauncher and kded4.&lt;br /&gt;
&lt;br /&gt;
The first time you save or open, another background application, kioslave, will start.&lt;br /&gt;
&lt;br /&gt;
These background KDE applications and services remain running after you close KDE applications.  If you want you can shut them down by running &amp;lt;tt&amp;gt;kdeinit4 --terminate&amp;lt;/tt&amp;gt; from a command prompt.&lt;br /&gt;
&lt;br /&gt;
You can run &amp;lt;tt&amp;gt;kdeinit4 --list&amp;lt;/tt&amp;gt; from a command prompt to see what processes are running. &amp;lt;tt&amp;gt;kdeinit4&amp;lt;/tt&amp;gt; has other useful options documented elsewhere.&lt;br /&gt;
&lt;br /&gt;
== Fine-tuning ==&lt;br /&gt;
=== Common step: editing the kdeglobals file ===&lt;br /&gt;
Unless otherwise stated you make all the setting changes below by editing the &amp;lt;tt&amp;gt;kdeglobals&amp;lt;/tt&amp;gt; file in the directory &amp;lt;tt&amp;gt;%APPDATA%\.kde\share\config\&amp;lt;/tt&amp;gt; with any text editor (such as kwrite).&lt;br /&gt;
(Note that for versions older than 4.0.85 the file is in &amp;lt;tt&amp;gt;%USERPROFILE%\.kde\share\config\kdeglobals&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
%APPDATA% (and %USERPROFILE%) is different for different Windows users/versions/locales; in a command prompt, entering the command &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;cd %APPDATA%&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; will switch to it, effectively telling you what it is.&lt;br /&gt;
&lt;br /&gt;
===Set Oxygen style for widgets===&lt;br /&gt;
The default KDE widget style on Windows is the native one. The Oxygen style installs with basic KDE installation (as a plugin library %KDEROOT%\lib\kde4\plugins\styles\oxygen.dll), so it can be used as well. To set it for a single user:&lt;br /&gt;
# edit kdeglobals&lt;br /&gt;
#locate the General section (a line containing the text &amp;quot;[General]&amp;quot;). If there is no General section, create one.&lt;br /&gt;
#Within the General section ([General]), edit the line containing &amp;lt;tt&amp;gt;widgetStyle=....&amp;lt;/tt&amp;gt; so that it reads &amp;lt;tt&amp;gt;widgetStyle=oxygen&amp;lt;/tt&amp;gt;.  If there is no such &amp;lt;tt&amp;gt;widgetStyle=...&amp;lt;/tt&amp;gt; line, create it.&lt;br /&gt;
Newly started applications should be displayed with the Oxygen style now.&lt;br /&gt;
&lt;br /&gt;
===Set Tahoma (Windows default font) for widgets===&lt;br /&gt;
To set it for a single user:&lt;br /&gt;
# edit kdeglobals&lt;br /&gt;
#locate the General section (a line containing the text &amp;quot;[General]&amp;quot;). If there is no General section, create one.&lt;br /&gt;
#Within the General section ([General]), add these two lines:&lt;br /&gt;
&amp;lt;tt&amp;gt;font=Tahoma&amp;lt;br/&amp;gt;&lt;br /&gt;
menuFont=Tahoma&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Newly started applications should use this font now.&lt;br /&gt;
&amp;lt;b&amp;gt;Note&amp;lt;/b&amp;gt;: this works for any font you have installed.&lt;br /&gt;
&lt;br /&gt;
===Change the mouse to Double Click===&lt;br /&gt;
To change the mouse to use double click:&lt;br /&gt;
#Add a new section with a line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;[KDE]&amp;lt;br&amp;gt;&lt;br /&gt;
SingleClick=false&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Newly started applications (Dolphin and Konqueror) should use double click now.&lt;br /&gt;
===Change locale and country settings===&lt;br /&gt;
To change locale setting:&lt;br /&gt;
#Add a new section with the line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;[Locale]&amp;lt;br&amp;gt;&lt;br /&gt;
Country=**&amp;lt;br&amp;gt;&lt;br /&gt;
Language=**&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Replace ** with your lowercase [http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 alpha-2 country code], e.g. pl for Poland; of course, you need to install your  language localization package.&lt;br /&gt;
===Change native/KDE file dialogs===&lt;br /&gt;
To chose native or KDE file dialog:&lt;br /&gt;
#Add a new section with the lines:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt; [KFileDialog Settings]&amp;lt;br/&amp;gt;&lt;br /&gt;
Native=false&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Either set Native to true or false.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Using kdewin-installer-gui-0.9.3.exe to install 4.1.3 packages:&lt;br /&gt;
* starting a KDE program correctly starts dbus-daemon.exe&lt;br /&gt;
* many games run&lt;br /&gt;
* choosing File &amp;gt; Open correctly starts klauncher.exe, kioslave.exe and kded4.exe, and runs kbuildsycoca4.exe as needed.&lt;br /&gt;
* Full-text search in khelpcenter does not work because Perl scripts are disabled.&lt;br /&gt;
* Many applications have a generic icon in Windows Explorer.&lt;br /&gt;
* Multimedia support should work, although video support might be missing (from the backend)&lt;br /&gt;
&lt;br /&gt;
General notes:&lt;br /&gt;
* There are many other KDE programs that are not part of KDE 4.0.0 and are not currently packaged for MS Windows.&lt;br /&gt;
* By design, KDE-windows does not provide the full-blown KDE desktop, a preview on the plasma shell replacement will be available in 4.1.2 - Nevertheless this does not rely on kwin/X11 which means that desktop effects are not available&lt;br /&gt;
* Some KDE programs use UNIX-specific features, such as konsole's use of pseudo-terminals, and thus are difficult (read: currently impossible) to port to MS Windows.&lt;br /&gt;
&lt;br /&gt;
=== Package status and contents ===&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
!package&lt;br /&gt;
!status&lt;br /&gt;
!contains applications&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|amarok&lt;br /&gt;
|packaged&lt;br /&gt;
|Amarok music player&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|Digikam&lt;br /&gt;
|packaged&lt;br /&gt;
|Photo management&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdebase-apps&lt;br /&gt;
|packaged&lt;br /&gt;
|Konqueror, Dolphin, KWrite, folderview etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdebase-workspace&lt;br /&gt;
|packaged&lt;br /&gt;
|Plasma, Wallpapers, Solid, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdeedu&lt;br /&gt;
|packaged&lt;br /&gt;
|Marble, Parley, KStars, KHangman, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdegames&lt;br /&gt;
|packaged&lt;br /&gt;
|Kgoldrunner, Kpat, KMahjongg, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdegraphics&lt;br /&gt;
|packaged&lt;br /&gt;
|Okular, kolourpaint, gwenview, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdemultimedia&lt;br /&gt;
|packaged&lt;br /&gt;
|JuK, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdenetwork&lt;br /&gt;
|packaged&lt;br /&gt;
|Kopete, KGet, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdepim&lt;br /&gt;
|not packaged&lt;br /&gt;
|KMail, AKregator, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdesdk&lt;br /&gt;
|packaged&lt;br /&gt;
|Kate, Umbrello, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdetoys&lt;br /&gt;
|packaged&lt;br /&gt;
|KTeatime, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdeutils&lt;br /&gt;
|packaged&lt;br /&gt;
|KGpg, KWallet, Okteta, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|koffice&lt;br /&gt;
|packaged&lt;br /&gt;
|KWord, Krita, Karbon, etc. (Beta 3)&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|ktorrent&lt;br /&gt;
|packaged&lt;br /&gt;
|the KTorrent utility&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|konversation&lt;br /&gt;
|packaged&lt;br /&gt;
|the KDE IRC client (alpha 3)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category: MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Installation</id>
		<title>Projects/KDE on Windows/Installation</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Installation"/>
				<updated>2009-08-28T10:10:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Download needed packages */  put all that into a table, so is better layed out&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Projects/KDE_on_Windows/Installation}}&lt;br /&gt;
&lt;br /&gt;
{{note|Perhaps actual developers should summarize status of KDE4 on Windows here, while we encourage users to describe their experiences on the [[Talk:{{PAGENAME}}|Talk page?]]}}&lt;br /&gt;
&lt;br /&gt;
== KDE Installer for Windows ==&lt;br /&gt;
You can use this installer to download and install the&lt;br /&gt;
various binary packages that you need to run KDE applications on MS Windows.&lt;br /&gt;
KDE is free and open source so you can build all the applications &amp;quot;from scratch&amp;quot; from their source code;&lt;br /&gt;
but as a convenience for others,&lt;br /&gt;
volunteers create these pre-compiled packages and make them available on the Internet.&lt;br /&gt;
&lt;br /&gt;
'''Disclaimer''' These are early days for KDE4 on Windows,&lt;br /&gt;
some programs work better than others and some fail to run altogether.&lt;br /&gt;
&lt;br /&gt;
'''If you experience any problems please have a look into our [http://lists.kde.org/?l=kde-windows&amp;amp;r=1&amp;amp;w=2| mailing list].'''&lt;br /&gt;
&lt;br /&gt;
You can also use the KDE Installer for Windows to install source code and the packages that you need to ''build'' KDE4 on Windows&lt;br /&gt;
(although if you are building KDE4 on Windows you may prefer to use the emerge system to build KDE and its requirements from latest source);&lt;br /&gt;
see [[Getting Started/Build/KDE4/Windows]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Summary of Steps ===&lt;br /&gt;
* Download and save the latest version of the installer from [http://www.winkde.org/pub/kde/ports/win32/installer/kdewin-installer-gui-latest.exe here] to a directory, e.g. &amp;lt;tt&amp;gt;C:\KDE4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Run the installer, download and install what you need (see [[#Download needed packages|Download needed packages]] below).&lt;br /&gt;
* Try to run a KDE application from the windows start menu (see for KDE x.x.x Release entry)  &lt;br /&gt;
&lt;br /&gt;
=== Download needed packages ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-001.png|600px|left|]]&lt;br /&gt;
|When you run KDE-installer for the first time, you'll see the welcome screen. Since it's your first launch leave the checkbox below unchecked. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-002.png|600px|left|]]&lt;br /&gt;
|Proceed to the next screen, where you choose the KDE4 installation directory. It can be anything you prefer, e.g. C:\KDE4.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-003.png|600px|left|]]&lt;br /&gt;
|On the next screen, define who you are: End User or Developer. The End User installation installs only binary packages and libraries needed to run KDE application. Package Manager mode provides you also with the source code for all packages needed to build KDE from scratch. &amp;lt;br/&amp;gt;  Then you need to decide what compiler to use - MinGW or MSVC.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-004.png|600px|left|]]&lt;br /&gt;
|Proceed to the next screen and there choose the directory where all the downloaded packages will be stored. Let it be something like C:\KDE4-tmp or C:\KDE4-packages.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-005.png|600px|left|]]&lt;br /&gt;
|The next screen will ask you to choose your internet connection type, particularly whether or not you're using a proxy. If you don't use a proxy server, just click 'Next'. If you are unsure of whether you're using proxy or if you have web browser configured to work with it properly, choose the second or the third option, according to your favourite web-browser. If you'd like to set all the settings manually - choose the last option and go ahead.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-006.png|600px|left|]]&lt;br /&gt;
|When you click the 'Next' button the (currently, rather short) list of available servers will be loaded and you could choose the one closest to you.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-007.png|600px|left|]]&lt;br /&gt;
|When you click 'Next', a list of available releases on the selected server will be shown. Depending on the server there may be stable and/or unstable release available. Some unstable releases may only be available from www.winkde.org because the kde mirrors provides only a limited range of unstable releases. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-008.png|600px|left|]]&lt;br /&gt;
|After selecting a release an a click on the 'Next' button, the list of all available packages will be loaded and processed, providing you with the list of package groups you can select for further installation. The short description next to each group of packages should make your choice easier. Select the packages you need. Proceed to the next screen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-009.png|600px|left|]]&lt;br /&gt;
|Here you can see all the required dependencies, or software necessary to support the choices you've made. Click 'Next' to download them all.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-0010.png|600px|left|]]\&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-011.png|600px|left|]]&lt;br /&gt;
|After all the packages are downloaded they'll be unpacked and processed by the installer. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[File:installer-012.png|600px|left|]]&lt;br /&gt;
|The final window will tell that your KDE installation for Windows is complete.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Issues with KDE Installer for Windows ===&lt;br /&gt;
If something goes wrong during installation, for example a file can't be replaced because it is still in use, the installer may still report successful completion.  If you see any alert or failure message from the installer, when it completes, quit and re-run it.&amp;lt;br&amp;gt;&lt;br /&gt;
If that didn't help and you think it's a bug, please report to [mailto:kde-windows@kde.org]&lt;br /&gt;
&lt;br /&gt;
== Testing your installation ==&lt;br /&gt;
Navigate to the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
See if you can run the Qt program assistant.exe.&lt;br /&gt;
Qt programs have fewer dependencies than a full-blown KDE application.&lt;br /&gt;
&lt;br /&gt;
If that works, try running a simple KDE application, such as lskat.exe from the kdegames package.&lt;br /&gt;
&lt;br /&gt;
Look into your start menu: there will be a new entry KDE 4.XX.XX Release. Below that folder you can find all the apps you installed.&lt;br /&gt;
&lt;br /&gt;
=== Startup, shutdown, and diagnosing problems ===&lt;br /&gt;
The first KDE program you run should automatically invoke &amp;lt;tt&amp;gt;kdeinit4.exe&amp;lt;/tt&amp;gt;, the KDE initialization app,&lt;br /&gt;
which starts background KDE applications and services like dbus-daemon, klauncher and kded4.&lt;br /&gt;
&lt;br /&gt;
The first time you save or open, another background application, kioslave, will start.&lt;br /&gt;
&lt;br /&gt;
These background KDE applications and services remain running after you close KDE applications.  If you want you can shut them down by running &amp;lt;tt&amp;gt;kdeinit4 --terminate&amp;lt;/tt&amp;gt; from a command prompt.&lt;br /&gt;
&lt;br /&gt;
You can run &amp;lt;tt&amp;gt;kdeinit4 --list&amp;lt;/tt&amp;gt; from a command prompt to see what processes are running. &amp;lt;tt&amp;gt;kdeinit4&amp;lt;/tt&amp;gt; has other useful options documented elsewhere.&lt;br /&gt;
&lt;br /&gt;
== Fine-tuning ==&lt;br /&gt;
=== Common step: editing the kdeglobals file ===&lt;br /&gt;
Unless otherwise stated you make all the setting changes below by editing the &amp;lt;tt&amp;gt;kdeglobals&amp;lt;/tt&amp;gt; file in the directory &amp;lt;tt&amp;gt;%APPDATA%\.kde\share\config\&amp;lt;/tt&amp;gt; with any text editor (such as kwrite).&lt;br /&gt;
(Note that for versions older than 4.0.85 the file is in &amp;lt;tt&amp;gt;%USERPROFILE%\.kde\share\config\kdeglobals&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
%APPDATA% (and %USERPROFILE%) is different for different Windows users/versions/locales; in a command prompt, entering the command &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;cd %APPDATA%&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; will switch to it, effectively telling you what it is.&lt;br /&gt;
&lt;br /&gt;
===Set Oxygen style for widgets===&lt;br /&gt;
The default KDE widget style on Windows is the native one. The Oxygen style installs with basic KDE installation (as a plugin library %KDEROOT%\lib\kde4\plugins\styles\oxygen.dll), so it can be used as well. To set it for a single user:&lt;br /&gt;
# edit kdeglobals&lt;br /&gt;
#locate the General section (a line containing the text &amp;quot;[General]&amp;quot;). If there is no General section, create one.&lt;br /&gt;
#Within the General section ([General]), edit the line containing &amp;lt;tt&amp;gt;widgetStyle=....&amp;lt;/tt&amp;gt; so that it reads &amp;lt;tt&amp;gt;widgetStyle=oxygen&amp;lt;/tt&amp;gt;.  If there is no such &amp;lt;tt&amp;gt;widgetStyle=...&amp;lt;/tt&amp;gt; line, create it.&lt;br /&gt;
Newly started applications should be displayed with the Oxygen style now.&lt;br /&gt;
&lt;br /&gt;
===Set Tahoma (Windows default font) for widgets===&lt;br /&gt;
To set it for a single user:&lt;br /&gt;
# edit kdeglobals&lt;br /&gt;
#locate the General section (a line containing the text &amp;quot;[General]&amp;quot;). If there is no General section, create one.&lt;br /&gt;
#Within the General section ([General]), add these two lines:&lt;br /&gt;
&amp;lt;tt&amp;gt;font=Tahoma&amp;lt;br/&amp;gt;&lt;br /&gt;
menuFont=Tahoma&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Newly started applications should use this font now.&lt;br /&gt;
&amp;lt;b&amp;gt;Note&amp;lt;/b&amp;gt;: this works for any font you have installed.&lt;br /&gt;
&lt;br /&gt;
===Change the mouse to Double Click===&lt;br /&gt;
To change the mouse to use double click:&lt;br /&gt;
#Add a new section with a line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;[KDE]&amp;lt;br&amp;gt;&lt;br /&gt;
SingleClick=false&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Newly started applications (Dolphin and Konqueror) should use double click now.&lt;br /&gt;
===Change locale and country settings===&lt;br /&gt;
To change locale setting:&lt;br /&gt;
#Add a new section with the line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;[Locale]&amp;lt;br&amp;gt;&lt;br /&gt;
Country=**&amp;lt;br&amp;gt;&lt;br /&gt;
Language=**&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Replace ** with your lowercase [http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 alpha-2 country code], e.g. pl for Poland; of course, you need to install your  language localization package.&lt;br /&gt;
===Change native/KDE file dialogs===&lt;br /&gt;
To chose native or KDE file dialog:&lt;br /&gt;
#Add a new section with the lines:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt; [KFileDialog Settings]&amp;lt;br/&amp;gt;&lt;br /&gt;
Native=false&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Either set Native to true or false.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Using kdewin-installer-gui-0.9.3.exe to install 4.1.3 packages:&lt;br /&gt;
* starting a KDE program correctly starts dbus-daemon.exe&lt;br /&gt;
* many games run&lt;br /&gt;
* choosing File &amp;gt; Open correctly starts klauncher.exe, kioslave.exe and kded4.exe, and runs kbuildsycoca4.exe as needed.&lt;br /&gt;
* Full-text search in khelpcenter does not work because Perl scripts are disabled.&lt;br /&gt;
* Many applications have a generic icon in Windows Explorer.&lt;br /&gt;
* Multimedia support should work, although video support might be missing (from the backend)&lt;br /&gt;
&lt;br /&gt;
General notes:&lt;br /&gt;
* There are many other KDE programs that are not part of KDE 4.0.0 and are not currently packaged for MS Windows.&lt;br /&gt;
* By design, KDE-windows does not provide the full-blown KDE desktop, a preview on the plasma shell replacement will be available in 4.1.2 - Nevertheless this does not rely on kwin/X11 which means that desktop effects are not available&lt;br /&gt;
* Some KDE programs use UNIX-specific features, such as konsole's use of pseudo-terminals, and thus are difficult (read: currently impossible) to port to MS Windows.&lt;br /&gt;
&lt;br /&gt;
=== Package status and contents ===&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
!package&lt;br /&gt;
!status&lt;br /&gt;
!contains applications&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|amarok&lt;br /&gt;
|packaged&lt;br /&gt;
|Amarok music player&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|Digikam&lt;br /&gt;
|packaged&lt;br /&gt;
|Photo management&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdebase-apps&lt;br /&gt;
|packaged&lt;br /&gt;
|Konqueror, Dolphin, KWrite, folderview etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdebase-workspace&lt;br /&gt;
|packaged&lt;br /&gt;
|Plasma, Wallpapers, Solid, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdeedu&lt;br /&gt;
|packaged&lt;br /&gt;
|Marble, Parley, KStars, KHangman, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdegames&lt;br /&gt;
|packaged&lt;br /&gt;
|Kgoldrunner, Kpat, KMahjongg, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdegraphics&lt;br /&gt;
|packaged&lt;br /&gt;
|Okular, kolourpaint, gwenview, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdemultimedia&lt;br /&gt;
|packaged&lt;br /&gt;
|JuK, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdenetwork&lt;br /&gt;
|packaged&lt;br /&gt;
|Kopete, KGet, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdepim&lt;br /&gt;
|not packaged&lt;br /&gt;
|KMail, AKregator, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdesdk&lt;br /&gt;
|packaged&lt;br /&gt;
|Kate, Umbrello, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdetoys&lt;br /&gt;
|packaged&lt;br /&gt;
|KTeatime, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|kdeutils&lt;br /&gt;
|packaged&lt;br /&gt;
|KGpg, KWallet, Okteta, etc.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|koffice&lt;br /&gt;
|packaged&lt;br /&gt;
|KWord, Krita, Karbon, etc. (Beta 3)&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|ktorrent&lt;br /&gt;
|packaged&lt;br /&gt;
|the KTorrent utility&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|konversation&lt;br /&gt;
|packaged&lt;br /&gt;
|the KDE IRC client (alpha 3)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category: MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows</id>
		<title>Development/Tutorials/Debugging/Debugging on MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows"/>
				<updated>2009-08-22T11:37:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* One-step attaching to running application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Hints=&lt;br /&gt;
==Debugging with WinDbg==&lt;br /&gt;
WinDbg, distributed as a part of ''Debugging Tools for Windows'', is a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps.  It uses the Microsoft Visual Studio debug symbol formats for source-level debugging. [[Projects/KDE_on_Windows/Tools#WinDbg|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging with DebugView==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool, coming from SysInternals (currently acquired by Microsoft). [[Projects/KDE_on_Windows/Tools#DebugView|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging kioslaves==&lt;br /&gt;
kioslaves on windows are started by klauncher (or kio) as separate kioslave processes. The kioslave executable then loads the related kioslave dll dynamically. &lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_WAIT variable ===&lt;br /&gt;
To debug kioslaves:&lt;br /&gt;
#Set the KDE_SLAVE_DEBUG_WAIT environment variable in a current cmd.exe shell to the name of the kioslave's protocol (the first parameter of KIO::SlaveBase() constructor), e.g.&amp;lt;pre&amp;gt;set KDE_SLAVE_DEBUG_WAIT=file&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Terminate &amp;lt;tt&amp;gt;klauncher&amp;lt;/tt&amp;gt; process so it can be restarted.&lt;br /&gt;
#Any application you want to debug at kioslave level have to be executed within the scope of the current environment (cmd.exe), what also means that if you want to use development environment, you have to do that in the environment as well, e.g. for MSVC Express, by typing &amp;lt;tt&amp;gt;vcexpress&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the kioslave is requested the next time, a debugger will be started and attached to the kioslave process immediatly before the kioslave's kdemain() function. &lt;br /&gt;
&lt;br /&gt;
On mingw platform gdb is launched and connected to the kioslave process. On msvc platforms the currently installed just-in-time debugger is used. This may be msvc's IDE or the [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg debugger]].  The latter could be set as jit-debugger by running 'windbg -I' command (capital -I like ICE, see [http://msdn2.microsoft.com/en-us/library/cc266343.aspx]).&lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_POPUP variable ===&lt;br /&gt;
Alternatively, you can set &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; variable instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. This will display a native message box so developer you can attach the debugger to the KIO slave process and click OK. No DebugBreak() is invoked. Just click OK without attaching to continue using the KIO slave without debugging.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
*You can set, say, the variable to 'file' for the kio_file slave, '''but''' set it to 'smtps' for the kio_smtp is you want to debug smtp protocol secured with SSL.&lt;br /&gt;
*(Vista only): ''kioslave.exe has stopped working'' message dialog can appear instead of offer for starting the debugger. Reason: Just-In-Time (JIT) Debugging of an elevated process will fail ([http://msdn2.microsoft.com/en-us/vstudio/aa964140.aspx#question20a msdn link]) apparently for security reasons. Either:&lt;br /&gt;
**Use &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. See the [[#Using_KDE_SLAVE_DEBUG_POPUP_variable|Using KDE_SLAVE_DEBUG_POPUP variable]] above for more info.&lt;br /&gt;
**(not possible under msvc 2005): start applications and klauncher without administration permissions or attach the debugger manually before the debugger catches unhandled exceptions or an user-defined breakpoint (DebugBreak()). &lt;br /&gt;
*You may want to inspect kioslave sources [http://lxr.kde.org/source/KDE/kdelibs/kinit/kioslave.cpp] for more informations.&lt;br /&gt;
&lt;br /&gt;
== Checking dependency of shared libraries ==&lt;br /&gt;
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. [[Projects/KDE_on_Windows/Tools#Dependency_Walker|more...]]&lt;br /&gt;
&lt;br /&gt;
= MS Visual Studio hints =&lt;br /&gt;
&lt;br /&gt;
== Using MS Visual Studio environment for just debugging ==&lt;br /&gt;
&lt;br /&gt;
Let's assume you're using command line tools (typically CMake) and want to use MS Visual Studio environment for just debugging. You don't need to create msvc project for your KDE application to be able to start debugging. &lt;br /&gt;
&lt;br /&gt;
* compile and working executable version of your appliation (compiled in debug mode)&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''File-&amp;gt;Open Project/Solution''&lt;br /&gt;
* pick your exe file in the file window&lt;br /&gt;
* you can set command line arguments as usual, by pick ''Project-&amp;gt;...Properties'' command and enter all of them it in ''Command Arguments'' field&lt;br /&gt;
* if you have libraries placed in other directories than your application's .exe file, and you want to step into these libraries' source code while debugging, pick ''Project-&amp;gt;...Properties'' command and enter paths to these directories in ''Symbol Path'' field&lt;br /&gt;
* hit F5 to run the application start the application or F10 to start step by step&lt;br /&gt;
* all debugging functions like setting breakpoints will be available, so you can open source code in the integrated editor and press F9 where needed&lt;br /&gt;
* you can even edit your source code but to compile it, do it with your external, command line tools. You cannot compile the application in the msvc environment because you have not defined a project file&lt;br /&gt;
* before compiling your application, stop debugging session to unlock binaries; no need to close msvc window&lt;br /&gt;
* after compilation you can start debugging again&lt;br /&gt;
* on exit you will be asked to save .sln file (so-called ''solution file'') with your debugging session -- do it and you will be able just to click the .sln file to start your debugging again&lt;br /&gt;
* it's recommended to save the .sln file in the same directory where the .exe file sits&lt;br /&gt;
*hints on reopening the debugging session:&lt;br /&gt;
**Next time you will run msvc environment, you can see name of your application's .sln file in ''File-&amp;gt;Recent Projects'' submenu - you can click it to load your debugging session.&lt;br /&gt;
**On command line you can type &amp;quot;cd path-to-your-sln-file; &amp;lt;yourfilename&amp;gt;.sln&amp;quot;.&lt;br /&gt;
**You can also use &amp;quot;vcexpress /debugexe &amp;lt;myapplication&amp;gt; &amp;lt;args&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Attaching to running application ==&lt;br /&gt;
&lt;br /&gt;
If you have your application is already running, you can attach to it and then start debugging. &lt;br /&gt;
&lt;br /&gt;
* run the msvc development environment&lt;br /&gt;
* execute ''Debug-&amp;gt;Atach to Process''&lt;br /&gt;
* select your from the processes list and click &amp;quot;Attach...&amp;quot;&lt;br /&gt;
* msvc environment will load your .sln file if it exists in the same directory as the .exe file, so your breakpoints set in previous session will be active again&lt;br /&gt;
* your program will stop on any breakpoint you have set&lt;br /&gt;
&lt;br /&gt;
== One-step attaching to running application ==&lt;br /&gt;
*You can create a macro that automates the task. See [http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx].&lt;br /&gt;
*MSVC 2008 or later can always attach to the running process when you execute &amp;quot;Start Debugging&amp;quot; command (F5). Just set the &amp;quot;Attach&amp;quot; option to &amp;quot;Yes&amp;quot; in the &amp;quot;Project-&amp;gt;[yourapp] Properties&amp;quot; window. &amp;lt;br/&amp;gt;Note that in this case if the process is not present, you will experience &amp;quot;Unable to attach error&amp;quot; message, so you need to start the process intependently of the development environment first. The advantage of this is faster startup of your application.&lt;br /&gt;
&lt;br /&gt;
== Memory Values ==&lt;br /&gt;
If you are using the debug heap, memory is initialized and cleared with special values. Most interesting values are: &lt;br /&gt;
* 0xCDCDCDCD - Allocated in heap, but not initialized&lt;br /&gt;
* 0xDDDDDDDD - Released heap memory.&lt;br /&gt;
* 0xFDFDFDFD - &amp;quot;NoMansLand&amp;quot; fences automatically placed at boundary of heap memory. Should never be overwritten. If you do overwrite one, you're probably walking off the end of an array.&lt;br /&gt;
* 0xCCCCCCCC - Allocated on stack, but not initialized&lt;br /&gt;
See also: [http://www.samblackburn.com/wfc/technotes/WTN006.htm]&lt;br /&gt;
&lt;br /&gt;
==How to Not Step Into Functions in the Debugger==&lt;br /&gt;
You'll probably want to avoind stepping into lower-level functions like QString constructors or operators while debugging step-by-step. Here's the detailed (unofficial) [http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx instruction] for various msvc versions.&lt;br /&gt;
&lt;br /&gt;
==Enable automatic expanding of Qt data structures==&lt;br /&gt;
From the msvc docs: &amp;quot;While debugging, Data Tips and items in the Watch and Variable windows are automatically expanded to show their most important elements. The expansion follows the format given by the rules in this file. You can add rules for your types or change the predefined rules.&amp;quot; ([http://www.thedatafarm.com/blog/content/binary/datatips2.jpg example screen])&lt;br /&gt;
&lt;br /&gt;
MSVC 2005: To add support for expanding Qt data structures like QString of QRect, edit {msvc_installation_directory}\Common7\Packages\Debugger\autoexp.dat file and paste [[/Automatic expanding of Qt data structures|definitions]] after [AutoExpand] line.&lt;br /&gt;
&lt;br /&gt;
MSVC 2008: You can improve:&lt;br /&gt;
*Debugger support for Qt datatypes using autoexp.dat&lt;br /&gt;
*IntelliSense behaviour by adding Qt include directories&lt;br /&gt;
For details read http://eecs.vanderbilt.edu/research/hmtl/wiki/pmwiki.php?n=Knowledge.Qt&lt;br /&gt;
&lt;br /&gt;
==WINDOWS and CONSOLE subsystems==&lt;br /&gt;
CONSOLE subsystem is the one that displays console window (used for standard output and error streams) in addition to application's windows. WINDOWS subsystem redirects standard output and error streams to system debugging subsystem that can be displayed if needed in [[Projects/KDE_on_Windows/Tools#DebugView|DebugView]] or debuggers like msvc or [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg]].&lt;br /&gt;
Hint: To remove CONSOLE subsystem from already built .exe file, type &amp;lt;code&amp;gt;editbin /subsystem:windows file.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: Qt's qmake syntax supports ''console'' and ''windows'' parameters of the ''CONFIG'' variable, so CONSOLE subsystem can be enabled by specifying &amp;lt;tt&amp;gt;CONFIG += console&amp;lt;/tt&amp;gt; in the .pro file, windows subsystem can be enabled with &amp;lt;tt&amp;gt;CONFIG += windows&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
Running a VC++2005 SP1 app on another computer: manifest files are needed. See [http://www.codeproject.com/KB/cpp/vcredists_x86.aspx] and [http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx].&lt;br /&gt;
&lt;br /&gt;
===Note on debug builds===&lt;br /&gt;
The hints above are for release builds (or ReleaseWithDebugInfo). Moving Debug versions of binaries to other computers is only allowed (and technicallu possible) if you have Express Edition installed there, as there is no redistributable package for Debug versions provided and even the license disallows distribution of any debug binaries (even your own).&lt;br /&gt;
&lt;br /&gt;
= MinGW debugging hints =&lt;br /&gt;
&lt;br /&gt;
There are gdb binaries you can directly run after unpacking them, e.g. from &lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=20507 mingw's gdb downloads on sourceforge]. &lt;br /&gt;
&lt;br /&gt;
To get a backtrace for a crash you can reproduce: Start the gdb binary with the full path to the executable on the command line, for example like&lt;br /&gt;
&amp;lt;code&amp;gt;..\gdb\gdb.exe c:\programme\kontact\bin\kontact.exe&amp;lt;/code&amp;gt;. When getting&lt;br /&gt;
the command prompt use the run command with the arguments for your application, e.g &amp;lt;code&amp;gt;run --nofork&amp;lt;/code&amp;gt;. Now wait until your applications starts and go on reproducing the crash. Once you encounter the crash, gdb will be in control&lt;br /&gt;
in the command line again. &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; will get you the backtrace.&lt;br /&gt;
&lt;br /&gt;
Instead of running gdb from the beginning, you can also attach to a running process. Use the regular &amp;quot;task-manager&amp;quot; to see which process. Enable the process id columns so you can see the number. Now you can start gdb (still give it the path to the application executable if you can) and use the &amp;lt;code&amp;gt;attach&amp;lt;/code&amp;gt; command with the process id you want to attach to from the&lt;br /&gt;
gdb prompt. Gdb will stop the process it attached to, so you can say &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; and then try to produce the crash.&lt;br /&gt;
&lt;br /&gt;
* Dr. Mingw - Just in Time Debugger [http://jrfonseca.planetaclix.pt/projects/gnu-win32/software/drmingw/]&lt;br /&gt;
* Debugging Qt programs on Windows [http://lists.trolltech.com/qt-interest/2005-08/thread01124-0.html]&lt;br /&gt;
&lt;br /&gt;
'''''WARNING''''': If you are having crashes when starting applications via gdb beware of certain applications (mostly anti-virus software) that could cause problems like &amp;quot;Embassy Trust Suite&amp;quot;, for example. See this [http://www.cygwin.com/ml/cygwin/2007-06/msg00405.html post]. &lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows</id>
		<title>Development/Tutorials/Debugging/Debugging on MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows"/>
				<updated>2009-08-22T11:34:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Attaching to running application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Hints=&lt;br /&gt;
==Debugging with WinDbg==&lt;br /&gt;
WinDbg, distributed as a part of ''Debugging Tools for Windows'', is a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps.  It uses the Microsoft Visual Studio debug symbol formats for source-level debugging. [[Projects/KDE_on_Windows/Tools#WinDbg|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging with DebugView==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool, coming from SysInternals (currently acquired by Microsoft). [[Projects/KDE_on_Windows/Tools#DebugView|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging kioslaves==&lt;br /&gt;
kioslaves on windows are started by klauncher (or kio) as separate kioslave processes. The kioslave executable then loads the related kioslave dll dynamically. &lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_WAIT variable ===&lt;br /&gt;
To debug kioslaves:&lt;br /&gt;
#Set the KDE_SLAVE_DEBUG_WAIT environment variable in a current cmd.exe shell to the name of the kioslave's protocol (the first parameter of KIO::SlaveBase() constructor), e.g.&amp;lt;pre&amp;gt;set KDE_SLAVE_DEBUG_WAIT=file&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Terminate &amp;lt;tt&amp;gt;klauncher&amp;lt;/tt&amp;gt; process so it can be restarted.&lt;br /&gt;
#Any application you want to debug at kioslave level have to be executed within the scope of the current environment (cmd.exe), what also means that if you want to use development environment, you have to do that in the environment as well, e.g. for MSVC Express, by typing &amp;lt;tt&amp;gt;vcexpress&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the kioslave is requested the next time, a debugger will be started and attached to the kioslave process immediatly before the kioslave's kdemain() function. &lt;br /&gt;
&lt;br /&gt;
On mingw platform gdb is launched and connected to the kioslave process. On msvc platforms the currently installed just-in-time debugger is used. This may be msvc's IDE or the [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg debugger]].  The latter could be set as jit-debugger by running 'windbg -I' command (capital -I like ICE, see [http://msdn2.microsoft.com/en-us/library/cc266343.aspx]).&lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_POPUP variable ===&lt;br /&gt;
Alternatively, you can set &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; variable instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. This will display a native message box so developer you can attach the debugger to the KIO slave process and click OK. No DebugBreak() is invoked. Just click OK without attaching to continue using the KIO slave without debugging.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
*You can set, say, the variable to 'file' for the kio_file slave, '''but''' set it to 'smtps' for the kio_smtp is you want to debug smtp protocol secured with SSL.&lt;br /&gt;
*(Vista only): ''kioslave.exe has stopped working'' message dialog can appear instead of offer for starting the debugger. Reason: Just-In-Time (JIT) Debugging of an elevated process will fail ([http://msdn2.microsoft.com/en-us/vstudio/aa964140.aspx#question20a msdn link]) apparently for security reasons. Either:&lt;br /&gt;
**Use &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. See the [[#Using_KDE_SLAVE_DEBUG_POPUP_variable|Using KDE_SLAVE_DEBUG_POPUP variable]] above for more info.&lt;br /&gt;
**(not possible under msvc 2005): start applications and klauncher without administration permissions or attach the debugger manually before the debugger catches unhandled exceptions or an user-defined breakpoint (DebugBreak()). &lt;br /&gt;
*You may want to inspect kioslave sources [http://lxr.kde.org/source/KDE/kdelibs/kinit/kioslave.cpp] for more informations.&lt;br /&gt;
&lt;br /&gt;
== Checking dependency of shared libraries ==&lt;br /&gt;
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. [[Projects/KDE_on_Windows/Tools#Dependency_Walker|more...]]&lt;br /&gt;
&lt;br /&gt;
= MS Visual Studio hints =&lt;br /&gt;
&lt;br /&gt;
== Using MS Visual Studio environment for just debugging ==&lt;br /&gt;
&lt;br /&gt;
Let's assume you're using command line tools (typically CMake) and want to use MS Visual Studio environment for just debugging. You don't need to create msvc project for your KDE application to be able to start debugging. &lt;br /&gt;
&lt;br /&gt;
* compile and working executable version of your appliation (compiled in debug mode)&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''File-&amp;gt;Open Project/Solution''&lt;br /&gt;
* pick your exe file in the file window&lt;br /&gt;
* you can set command line arguments as usual, by pick ''Project-&amp;gt;...Properties'' command and enter all of them it in ''Command Arguments'' field&lt;br /&gt;
* if you have libraries placed in other directories than your application's .exe file, and you want to step into these libraries' source code while debugging, pick ''Project-&amp;gt;...Properties'' command and enter paths to these directories in ''Symbol Path'' field&lt;br /&gt;
* hit F5 to run the application start the application or F10 to start step by step&lt;br /&gt;
* all debugging functions like setting breakpoints will be available, so you can open source code in the integrated editor and press F9 where needed&lt;br /&gt;
* you can even edit your source code but to compile it, do it with your external, command line tools. You cannot compile the application in the msvc environment because you have not defined a project file&lt;br /&gt;
* before compiling your application, stop debugging session to unlock binaries; no need to close msvc window&lt;br /&gt;
* after compilation you can start debugging again&lt;br /&gt;
* on exit you will be asked to save .sln file (so-called ''solution file'') with your debugging session -- do it and you will be able just to click the .sln file to start your debugging again&lt;br /&gt;
* it's recommended to save the .sln file in the same directory where the .exe file sits&lt;br /&gt;
*hints on reopening the debugging session:&lt;br /&gt;
**Next time you will run msvc environment, you can see name of your application's .sln file in ''File-&amp;gt;Recent Projects'' submenu - you can click it to load your debugging session.&lt;br /&gt;
**On command line you can type &amp;quot;cd path-to-your-sln-file; &amp;lt;yourfilename&amp;gt;.sln&amp;quot;.&lt;br /&gt;
**You can also use &amp;quot;vcexpress /debugexe &amp;lt;myapplication&amp;gt; &amp;lt;args&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Attaching to running application ==&lt;br /&gt;
&lt;br /&gt;
If you have your application is already running, you can attach to it and then start debugging. &lt;br /&gt;
&lt;br /&gt;
* run the msvc development environment&lt;br /&gt;
* execute ''Debug-&amp;gt;Atach to Process''&lt;br /&gt;
* select your from the processes list and click &amp;quot;Attach...&amp;quot;&lt;br /&gt;
* msvc environment will load your .sln file if it exists in the same directory as the .exe file, so your breakpoints set in previous session will be active again&lt;br /&gt;
* your program will stop on any breakpoint you have set&lt;br /&gt;
&lt;br /&gt;
== One-step attaching to running application ==&lt;br /&gt;
*You can create a macro that automates the task. See [http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx].&lt;br /&gt;
*MSVC 2008 or later can always attach to the running process (if exists) when you execute &amp;quot;Start Debugging&amp;quot; command (F5). Just set the &amp;quot;Attach&amp;quot; option to &amp;quot;Yes&amp;quot; in the &amp;quot;Project-&amp;gt;[yourapp] Properties&amp;quot; window.&lt;br /&gt;
&lt;br /&gt;
== Memory Values ==&lt;br /&gt;
If you are using the debug heap, memory is initialized and cleared with special values. Most interesting values are: &lt;br /&gt;
* 0xCDCDCDCD - Allocated in heap, but not initialized&lt;br /&gt;
* 0xDDDDDDDD - Released heap memory.&lt;br /&gt;
* 0xFDFDFDFD - &amp;quot;NoMansLand&amp;quot; fences automatically placed at boundary of heap memory. Should never be overwritten. If you do overwrite one, you're probably walking off the end of an array.&lt;br /&gt;
* 0xCCCCCCCC - Allocated on stack, but not initialized&lt;br /&gt;
See also: [http://www.samblackburn.com/wfc/technotes/WTN006.htm]&lt;br /&gt;
&lt;br /&gt;
==How to Not Step Into Functions in the Debugger==&lt;br /&gt;
You'll probably want to avoind stepping into lower-level functions like QString constructors or operators while debugging step-by-step. Here's the detailed (unofficial) [http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx instruction] for various msvc versions.&lt;br /&gt;
&lt;br /&gt;
==Enable automatic expanding of Qt data structures==&lt;br /&gt;
From the msvc docs: &amp;quot;While debugging, Data Tips and items in the Watch and Variable windows are automatically expanded to show their most important elements. The expansion follows the format given by the rules in this file. You can add rules for your types or change the predefined rules.&amp;quot; ([http://www.thedatafarm.com/blog/content/binary/datatips2.jpg example screen])&lt;br /&gt;
&lt;br /&gt;
MSVC 2005: To add support for expanding Qt data structures like QString of QRect, edit {msvc_installation_directory}\Common7\Packages\Debugger\autoexp.dat file and paste [[/Automatic expanding of Qt data structures|definitions]] after [AutoExpand] line.&lt;br /&gt;
&lt;br /&gt;
MSVC 2008: You can improve:&lt;br /&gt;
*Debugger support for Qt datatypes using autoexp.dat&lt;br /&gt;
*IntelliSense behaviour by adding Qt include directories&lt;br /&gt;
For details read http://eecs.vanderbilt.edu/research/hmtl/wiki/pmwiki.php?n=Knowledge.Qt&lt;br /&gt;
&lt;br /&gt;
==WINDOWS and CONSOLE subsystems==&lt;br /&gt;
CONSOLE subsystem is the one that displays console window (used for standard output and error streams) in addition to application's windows. WINDOWS subsystem redirects standard output and error streams to system debugging subsystem that can be displayed if needed in [[Projects/KDE_on_Windows/Tools#DebugView|DebugView]] or debuggers like msvc or [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg]].&lt;br /&gt;
Hint: To remove CONSOLE subsystem from already built .exe file, type &amp;lt;code&amp;gt;editbin /subsystem:windows file.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: Qt's qmake syntax supports ''console'' and ''windows'' parameters of the ''CONFIG'' variable, so CONSOLE subsystem can be enabled by specifying &amp;lt;tt&amp;gt;CONFIG += console&amp;lt;/tt&amp;gt; in the .pro file, windows subsystem can be enabled with &amp;lt;tt&amp;gt;CONFIG += windows&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
Running a VC++2005 SP1 app on another computer: manifest files are needed. See [http://www.codeproject.com/KB/cpp/vcredists_x86.aspx] and [http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx].&lt;br /&gt;
&lt;br /&gt;
===Note on debug builds===&lt;br /&gt;
The hints above are for release builds (or ReleaseWithDebugInfo). Moving Debug versions of binaries to other computers is only allowed (and technicallu possible) if you have Express Edition installed there, as there is no redistributable package for Debug versions provided and even the license disallows distribution of any debug binaries (even your own).&lt;br /&gt;
&lt;br /&gt;
= MinGW debugging hints =&lt;br /&gt;
&lt;br /&gt;
There are gdb binaries you can directly run after unpacking them, e.g. from &lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=20507 mingw's gdb downloads on sourceforge]. &lt;br /&gt;
&lt;br /&gt;
To get a backtrace for a crash you can reproduce: Start the gdb binary with the full path to the executable on the command line, for example like&lt;br /&gt;
&amp;lt;code&amp;gt;..\gdb\gdb.exe c:\programme\kontact\bin\kontact.exe&amp;lt;/code&amp;gt;. When getting&lt;br /&gt;
the command prompt use the run command with the arguments for your application, e.g &amp;lt;code&amp;gt;run --nofork&amp;lt;/code&amp;gt;. Now wait until your applications starts and go on reproducing the crash. Once you encounter the crash, gdb will be in control&lt;br /&gt;
in the command line again. &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; will get you the backtrace.&lt;br /&gt;
&lt;br /&gt;
Instead of running gdb from the beginning, you can also attach to a running process. Use the regular &amp;quot;task-manager&amp;quot; to see which process. Enable the process id columns so you can see the number. Now you can start gdb (still give it the path to the application executable if you can) and use the &amp;lt;code&amp;gt;attach&amp;lt;/code&amp;gt; command with the process id you want to attach to from the&lt;br /&gt;
gdb prompt. Gdb will stop the process it attached to, so you can say &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; and then try to produce the crash.&lt;br /&gt;
&lt;br /&gt;
* Dr. Mingw - Just in Time Debugger [http://jrfonseca.planetaclix.pt/projects/gnu-win32/software/drmingw/]&lt;br /&gt;
* Debugging Qt programs on Windows [http://lists.trolltech.com/qt-interest/2005-08/thread01124-0.html]&lt;br /&gt;
&lt;br /&gt;
'''''WARNING''''': If you are having crashes when starting applications via gdb beware of certain applications (mostly anti-virus software) that could cause problems like &amp;quot;Embassy Trust Suite&amp;quot;, for example. See this [http://www.cygwin.com/ml/cygwin/2007-06/msg00405.html post]. &lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-22T11:05:33Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Improve Integration with the Visual Studio Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvarsall.bat&amp;lt;/tt&amp;gt; to set your environment variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK. It is installed into %PROGRAMFILES%\Microsoft SDKs\Windows. &lt;br /&gt;
Only version 6.0a is installed by the Visual Studio 2008 Express installer, while 6.1 is required to compile KDE components. So also download and install [http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&amp;amp;displaylang=en version 6.1, i.e. Windows SDK for Windows Server 2008] by hand. See also the [http://msdn.microsoft.com/en-us/windowsserver/dd146047.aspx Which SDK is Right for Me?] document.&lt;br /&gt;
&lt;br /&gt;
=== Improve Integration with the Visual Studio Environment ===&lt;br /&gt;
-&amp;gt; [[Development/Tutorials/Debugging/Debugging_on_MS_Windows#Enable_automatic_expanding_of_Qt_data_structures|Enable automatic expanding of Qt data structures]]&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows</id>
		<title>Development/Tutorials/Debugging/Debugging on MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows"/>
				<updated>2009-08-22T11:04:35Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Enable automatic expanding of Qt data structures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Hints=&lt;br /&gt;
==Debugging with WinDbg==&lt;br /&gt;
WinDbg, distributed as a part of ''Debugging Tools for Windows'', is a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps.  It uses the Microsoft Visual Studio debug symbol formats for source-level debugging. [[Projects/KDE_on_Windows/Tools#WinDbg|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging with DebugView==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool, coming from SysInternals (currently acquired by Microsoft). [[Projects/KDE_on_Windows/Tools#DebugView|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging kioslaves==&lt;br /&gt;
kioslaves on windows are started by klauncher (or kio) as separate kioslave processes. The kioslave executable then loads the related kioslave dll dynamically. &lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_WAIT variable ===&lt;br /&gt;
To debug kioslaves:&lt;br /&gt;
#Set the KDE_SLAVE_DEBUG_WAIT environment variable in a current cmd.exe shell to the name of the kioslave's protocol (the first parameter of KIO::SlaveBase() constructor), e.g.&amp;lt;pre&amp;gt;set KDE_SLAVE_DEBUG_WAIT=file&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Terminate &amp;lt;tt&amp;gt;klauncher&amp;lt;/tt&amp;gt; process so it can be restarted.&lt;br /&gt;
#Any application you want to debug at kioslave level have to be executed within the scope of the current environment (cmd.exe), what also means that if you want to use development environment, you have to do that in the environment as well, e.g. for MSVC Express, by typing &amp;lt;tt&amp;gt;vcexpress&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the kioslave is requested the next time, a debugger will be started and attached to the kioslave process immediatly before the kioslave's kdemain() function. &lt;br /&gt;
&lt;br /&gt;
On mingw platform gdb is launched and connected to the kioslave process. On msvc platforms the currently installed just-in-time debugger is used. This may be msvc's IDE or the [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg debugger]].  The latter could be set as jit-debugger by running 'windbg -I' command (capital -I like ICE, see [http://msdn2.microsoft.com/en-us/library/cc266343.aspx]).&lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_POPUP variable ===&lt;br /&gt;
Alternatively, you can set &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; variable instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. This will display a native message box so developer you can attach the debugger to the KIO slave process and click OK. No DebugBreak() is invoked. Just click OK without attaching to continue using the KIO slave without debugging.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
*You can set, say, the variable to 'file' for the kio_file slave, '''but''' set it to 'smtps' for the kio_smtp is you want to debug smtp protocol secured with SSL.&lt;br /&gt;
*(Vista only): ''kioslave.exe has stopped working'' message dialog can appear instead of offer for starting the debugger. Reason: Just-In-Time (JIT) Debugging of an elevated process will fail ([http://msdn2.microsoft.com/en-us/vstudio/aa964140.aspx#question20a msdn link]) apparently for security reasons. Either:&lt;br /&gt;
**Use &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. See the [[#Using_KDE_SLAVE_DEBUG_POPUP_variable|Using KDE_SLAVE_DEBUG_POPUP variable]] above for more info.&lt;br /&gt;
**(not possible under msvc 2005): start applications and klauncher without administration permissions or attach the debugger manually before the debugger catches unhandled exceptions or an user-defined breakpoint (DebugBreak()). &lt;br /&gt;
*You may want to inspect kioslave sources [http://lxr.kde.org/source/KDE/kdelibs/kinit/kioslave.cpp] for more informations.&lt;br /&gt;
&lt;br /&gt;
== Checking dependency of shared libraries ==&lt;br /&gt;
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. [[Projects/KDE_on_Windows/Tools#Dependency_Walker|more...]]&lt;br /&gt;
&lt;br /&gt;
= MS Visual Studio hints =&lt;br /&gt;
&lt;br /&gt;
== Using MS Visual Studio environment for just debugging ==&lt;br /&gt;
&lt;br /&gt;
Let's assume you're using command line tools (typically CMake) and want to use MS Visual Studio environment for just debugging. You don't need to create msvc project for your KDE application to be able to start debugging. &lt;br /&gt;
&lt;br /&gt;
* compile and working executable version of your appliation (compiled in debug mode)&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''File-&amp;gt;Open Project/Solution''&lt;br /&gt;
* pick your exe file in the file window&lt;br /&gt;
* you can set command line arguments as usual, by pick ''Project-&amp;gt;...Properties'' command and enter all of them it in ''Command Arguments'' field&lt;br /&gt;
* if you have libraries placed in other directories than your application's .exe file, and you want to step into these libraries' source code while debugging, pick ''Project-&amp;gt;...Properties'' command and enter paths to these directories in ''Symbol Path'' field&lt;br /&gt;
* hit F5 to run the application start the application or F10 to start step by step&lt;br /&gt;
* all debugging functions like setting breakpoints will be available, so you can open source code in the integrated editor and press F9 where needed&lt;br /&gt;
* you can even edit your source code but to compile it, do it with your external, command line tools. You cannot compile the application in the msvc environment because you have not defined a project file&lt;br /&gt;
* before compiling your application, stop debugging session to unlock binaries; no need to close msvc window&lt;br /&gt;
* after compilation you can start debugging again&lt;br /&gt;
* on exit you will be asked to save .sln file (so-called ''solution file'') with your debugging session -- do it and you will be able just to click the .sln file to start your debugging again&lt;br /&gt;
* it's recommended to save the .sln file in the same directory where the .exe file sits&lt;br /&gt;
*hints on reopening the debugging session:&lt;br /&gt;
**Next time you will run msvc environment, you can see name of your application's .sln file in ''File-&amp;gt;Recent Projects'' submenu - you can click it to load your debugging session.&lt;br /&gt;
**On command line you can type &amp;quot;cd path-to-your-sln-file; &amp;lt;yourfilename&amp;gt;.sln&amp;quot;.&lt;br /&gt;
**You can also use &amp;quot;vcexpress /debugexe &amp;lt;myapplication&amp;gt; &amp;lt;args&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Attaching to running application ==&lt;br /&gt;
&lt;br /&gt;
If you have your application is already running, you can attach to it and then start debugging. &lt;br /&gt;
&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''Debug-&amp;gt;processes''&lt;br /&gt;
* select your from the processes list and click &amp;quot;Attach...&amp;quot;&lt;br /&gt;
* msvc environment will load your .sln file if it exists in the same directory as the .exe file, so your breakpoints set in previous session will be active again&lt;br /&gt;
* your program will stop on any breakpoint you have set&lt;br /&gt;
&lt;br /&gt;
== One-step attaching to running application ==&lt;br /&gt;
*You can create a macro that automates the task. See [http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx].&lt;br /&gt;
*MSVC 2008 or later can always attach to the running process (if exists) when you execute &amp;quot;Start Debugging&amp;quot; command (F5). Just set the &amp;quot;Attach&amp;quot; option to &amp;quot;Yes&amp;quot; in the &amp;quot;Project-&amp;gt;[yourapp] Properties&amp;quot; window.&lt;br /&gt;
&lt;br /&gt;
== Memory Values ==&lt;br /&gt;
If you are using the debug heap, memory is initialized and cleared with special values. Most interesting values are: &lt;br /&gt;
* 0xCDCDCDCD - Allocated in heap, but not initialized&lt;br /&gt;
* 0xDDDDDDDD - Released heap memory.&lt;br /&gt;
* 0xFDFDFDFD - &amp;quot;NoMansLand&amp;quot; fences automatically placed at boundary of heap memory. Should never be overwritten. If you do overwrite one, you're probably walking off the end of an array.&lt;br /&gt;
* 0xCCCCCCCC - Allocated on stack, but not initialized&lt;br /&gt;
See also: [http://www.samblackburn.com/wfc/technotes/WTN006.htm]&lt;br /&gt;
&lt;br /&gt;
==How to Not Step Into Functions in the Debugger==&lt;br /&gt;
You'll probably want to avoind stepping into lower-level functions like QString constructors or operators while debugging step-by-step. Here's the detailed (unofficial) [http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx instruction] for various msvc versions.&lt;br /&gt;
&lt;br /&gt;
==Enable automatic expanding of Qt data structures==&lt;br /&gt;
From the msvc docs: &amp;quot;While debugging, Data Tips and items in the Watch and Variable windows are automatically expanded to show their most important elements. The expansion follows the format given by the rules in this file. You can add rules for your types or change the predefined rules.&amp;quot; ([http://www.thedatafarm.com/blog/content/binary/datatips2.jpg example screen])&lt;br /&gt;
&lt;br /&gt;
MSVC 2005: To add support for expanding Qt data structures like QString of QRect, edit {msvc_installation_directory}\Common7\Packages\Debugger\autoexp.dat file and paste [[/Automatic expanding of Qt data structures|definitions]] after [AutoExpand] line.&lt;br /&gt;
&lt;br /&gt;
MSVC 2008: You can improve:&lt;br /&gt;
*Debugger support for Qt datatypes using autoexp.dat&lt;br /&gt;
*IntelliSense behaviour by adding Qt include directories&lt;br /&gt;
For details read http://eecs.vanderbilt.edu/research/hmtl/wiki/pmwiki.php?n=Knowledge.Qt&lt;br /&gt;
&lt;br /&gt;
==WINDOWS and CONSOLE subsystems==&lt;br /&gt;
CONSOLE subsystem is the one that displays console window (used for standard output and error streams) in addition to application's windows. WINDOWS subsystem redirects standard output and error streams to system debugging subsystem that can be displayed if needed in [[Projects/KDE_on_Windows/Tools#DebugView|DebugView]] or debuggers like msvc or [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg]].&lt;br /&gt;
Hint: To remove CONSOLE subsystem from already built .exe file, type &amp;lt;code&amp;gt;editbin /subsystem:windows file.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: Qt's qmake syntax supports ''console'' and ''windows'' parameters of the ''CONFIG'' variable, so CONSOLE subsystem can be enabled by specifying &amp;lt;tt&amp;gt;CONFIG += console&amp;lt;/tt&amp;gt; in the .pro file, windows subsystem can be enabled with &amp;lt;tt&amp;gt;CONFIG += windows&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
Running a VC++2005 SP1 app on another computer: manifest files are needed. See [http://www.codeproject.com/KB/cpp/vcredists_x86.aspx] and [http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx].&lt;br /&gt;
&lt;br /&gt;
===Note on debug builds===&lt;br /&gt;
The hints above are for release builds (or ReleaseWithDebugInfo). Moving Debug versions of binaries to other computers is only allowed (and technicallu possible) if you have Express Edition installed there, as there is no redistributable package for Debug versions provided and even the license disallows distribution of any debug binaries (even your own).&lt;br /&gt;
&lt;br /&gt;
= MinGW debugging hints =&lt;br /&gt;
&lt;br /&gt;
There are gdb binaries you can directly run after unpacking them, e.g. from &lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=20507 mingw's gdb downloads on sourceforge]. &lt;br /&gt;
&lt;br /&gt;
To get a backtrace for a crash you can reproduce: Start the gdb binary with the full path to the executable on the command line, for example like&lt;br /&gt;
&amp;lt;code&amp;gt;..\gdb\gdb.exe c:\programme\kontact\bin\kontact.exe&amp;lt;/code&amp;gt;. When getting&lt;br /&gt;
the command prompt use the run command with the arguments for your application, e.g &amp;lt;code&amp;gt;run --nofork&amp;lt;/code&amp;gt;. Now wait until your applications starts and go on reproducing the crash. Once you encounter the crash, gdb will be in control&lt;br /&gt;
in the command line again. &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; will get you the backtrace.&lt;br /&gt;
&lt;br /&gt;
Instead of running gdb from the beginning, you can also attach to a running process. Use the regular &amp;quot;task-manager&amp;quot; to see which process. Enable the process id columns so you can see the number. Now you can start gdb (still give it the path to the application executable if you can) and use the &amp;lt;code&amp;gt;attach&amp;lt;/code&amp;gt; command with the process id you want to attach to from the&lt;br /&gt;
gdb prompt. Gdb will stop the process it attached to, so you can say &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; and then try to produce the crash.&lt;br /&gt;
&lt;br /&gt;
* Dr. Mingw - Just in Time Debugger [http://jrfonseca.planetaclix.pt/projects/gnu-win32/software/drmingw/]&lt;br /&gt;
* Debugging Qt programs on Windows [http://lists.trolltech.com/qt-interest/2005-08/thread01124-0.html]&lt;br /&gt;
&lt;br /&gt;
'''''WARNING''''': If you are having crashes when starting applications via gdb beware of certain applications (mostly anti-virus software) that could cause problems like &amp;quot;Embassy Trust Suite&amp;quot;, for example. See this [http://www.cygwin.com/ml/cygwin/2007-06/msg00405.html post]. &lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows</id>
		<title>Development/Tutorials/Debugging/Debugging on MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows"/>
				<updated>2009-08-22T11:02:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* One-step attaching to running application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Hints=&lt;br /&gt;
==Debugging with WinDbg==&lt;br /&gt;
WinDbg, distributed as a part of ''Debugging Tools for Windows'', is a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps.  It uses the Microsoft Visual Studio debug symbol formats for source-level debugging. [[Projects/KDE_on_Windows/Tools#WinDbg|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging with DebugView==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool, coming from SysInternals (currently acquired by Microsoft). [[Projects/KDE_on_Windows/Tools#DebugView|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging kioslaves==&lt;br /&gt;
kioslaves on windows are started by klauncher (or kio) as separate kioslave processes. The kioslave executable then loads the related kioslave dll dynamically. &lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_WAIT variable ===&lt;br /&gt;
To debug kioslaves:&lt;br /&gt;
#Set the KDE_SLAVE_DEBUG_WAIT environment variable in a current cmd.exe shell to the name of the kioslave's protocol (the first parameter of KIO::SlaveBase() constructor), e.g.&amp;lt;pre&amp;gt;set KDE_SLAVE_DEBUG_WAIT=file&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Terminate &amp;lt;tt&amp;gt;klauncher&amp;lt;/tt&amp;gt; process so it can be restarted.&lt;br /&gt;
#Any application you want to debug at kioslave level have to be executed within the scope of the current environment (cmd.exe), what also means that if you want to use development environment, you have to do that in the environment as well, e.g. for MSVC Express, by typing &amp;lt;tt&amp;gt;vcexpress&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the kioslave is requested the next time, a debugger will be started and attached to the kioslave process immediatly before the kioslave's kdemain() function. &lt;br /&gt;
&lt;br /&gt;
On mingw platform gdb is launched and connected to the kioslave process. On msvc platforms the currently installed just-in-time debugger is used. This may be msvc's IDE or the [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg debugger]].  The latter could be set as jit-debugger by running 'windbg -I' command (capital -I like ICE, see [http://msdn2.microsoft.com/en-us/library/cc266343.aspx]).&lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_POPUP variable ===&lt;br /&gt;
Alternatively, you can set &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; variable instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. This will display a native message box so developer you can attach the debugger to the KIO slave process and click OK. No DebugBreak() is invoked. Just click OK without attaching to continue using the KIO slave without debugging.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
*You can set, say, the variable to 'file' for the kio_file slave, '''but''' set it to 'smtps' for the kio_smtp is you want to debug smtp protocol secured with SSL.&lt;br /&gt;
*(Vista only): ''kioslave.exe has stopped working'' message dialog can appear instead of offer for starting the debugger. Reason: Just-In-Time (JIT) Debugging of an elevated process will fail ([http://msdn2.microsoft.com/en-us/vstudio/aa964140.aspx#question20a msdn link]) apparently for security reasons. Either:&lt;br /&gt;
**Use &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. See the [[#Using_KDE_SLAVE_DEBUG_POPUP_variable|Using KDE_SLAVE_DEBUG_POPUP variable]] above for more info.&lt;br /&gt;
**(not possible under msvc 2005): start applications and klauncher without administration permissions or attach the debugger manually before the debugger catches unhandled exceptions or an user-defined breakpoint (DebugBreak()). &lt;br /&gt;
*You may want to inspect kioslave sources [http://lxr.kde.org/source/KDE/kdelibs/kinit/kioslave.cpp] for more informations.&lt;br /&gt;
&lt;br /&gt;
== Checking dependency of shared libraries ==&lt;br /&gt;
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. [[Projects/KDE_on_Windows/Tools#Dependency_Walker|more...]]&lt;br /&gt;
&lt;br /&gt;
= MS Visual Studio hints =&lt;br /&gt;
&lt;br /&gt;
== Using MS Visual Studio environment for just debugging ==&lt;br /&gt;
&lt;br /&gt;
Let's assume you're using command line tools (typically CMake) and want to use MS Visual Studio environment for just debugging. You don't need to create msvc project for your KDE application to be able to start debugging. &lt;br /&gt;
&lt;br /&gt;
* compile and working executable version of your appliation (compiled in debug mode)&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''File-&amp;gt;Open Project/Solution''&lt;br /&gt;
* pick your exe file in the file window&lt;br /&gt;
* you can set command line arguments as usual, by pick ''Project-&amp;gt;...Properties'' command and enter all of them it in ''Command Arguments'' field&lt;br /&gt;
* if you have libraries placed in other directories than your application's .exe file, and you want to step into these libraries' source code while debugging, pick ''Project-&amp;gt;...Properties'' command and enter paths to these directories in ''Symbol Path'' field&lt;br /&gt;
* hit F5 to run the application start the application or F10 to start step by step&lt;br /&gt;
* all debugging functions like setting breakpoints will be available, so you can open source code in the integrated editor and press F9 where needed&lt;br /&gt;
* you can even edit your source code but to compile it, do it with your external, command line tools. You cannot compile the application in the msvc environment because you have not defined a project file&lt;br /&gt;
* before compiling your application, stop debugging session to unlock binaries; no need to close msvc window&lt;br /&gt;
* after compilation you can start debugging again&lt;br /&gt;
* on exit you will be asked to save .sln file (so-called ''solution file'') with your debugging session -- do it and you will be able just to click the .sln file to start your debugging again&lt;br /&gt;
* it's recommended to save the .sln file in the same directory where the .exe file sits&lt;br /&gt;
*hints on reopening the debugging session:&lt;br /&gt;
**Next time you will run msvc environment, you can see name of your application's .sln file in ''File-&amp;gt;Recent Projects'' submenu - you can click it to load your debugging session.&lt;br /&gt;
**On command line you can type &amp;quot;cd path-to-your-sln-file; &amp;lt;yourfilename&amp;gt;.sln&amp;quot;.&lt;br /&gt;
**You can also use &amp;quot;vcexpress /debugexe &amp;lt;myapplication&amp;gt; &amp;lt;args&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Attaching to running application ==&lt;br /&gt;
&lt;br /&gt;
If you have your application is already running, you can attach to it and then start debugging. &lt;br /&gt;
&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''Debug-&amp;gt;processes''&lt;br /&gt;
* select your from the processes list and click &amp;quot;Attach...&amp;quot;&lt;br /&gt;
* msvc environment will load your .sln file if it exists in the same directory as the .exe file, so your breakpoints set in previous session will be active again&lt;br /&gt;
* your program will stop on any breakpoint you have set&lt;br /&gt;
&lt;br /&gt;
== One-step attaching to running application ==&lt;br /&gt;
*You can create a macro that automates the task. See [http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx].&lt;br /&gt;
*MSVC 2008 or later can always attach to the running process (if exists) when you execute &amp;quot;Start Debugging&amp;quot; command (F5). Just set the &amp;quot;Attach&amp;quot; option to &amp;quot;Yes&amp;quot; in the &amp;quot;Project-&amp;gt;[yourapp] Properties&amp;quot; window.&lt;br /&gt;
&lt;br /&gt;
== Memory Values ==&lt;br /&gt;
If you are using the debug heap, memory is initialized and cleared with special values. Most interesting values are: &lt;br /&gt;
* 0xCDCDCDCD - Allocated in heap, but not initialized&lt;br /&gt;
* 0xDDDDDDDD - Released heap memory.&lt;br /&gt;
* 0xFDFDFDFD - &amp;quot;NoMansLand&amp;quot; fences automatically placed at boundary of heap memory. Should never be overwritten. If you do overwrite one, you're probably walking off the end of an array.&lt;br /&gt;
* 0xCCCCCCCC - Allocated on stack, but not initialized&lt;br /&gt;
See also: [http://www.samblackburn.com/wfc/technotes/WTN006.htm]&lt;br /&gt;
&lt;br /&gt;
==How to Not Step Into Functions in the Debugger==&lt;br /&gt;
You'll probably want to avoind stepping into lower-level functions like QString constructors or operators while debugging step-by-step. Here's the detailed (unofficial) [http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx instruction] for various msvc versions.&lt;br /&gt;
&lt;br /&gt;
==Enable automatic expanding of Qt data structures==&lt;br /&gt;
From the msvc docs: &amp;quot;While debugging, Data Tips and items in the Watch and Variable windows are automatically expanded to show their most important elements. The expansion follows the format given by the rules in this file. You can add rules for your types or change the predefined rules.&amp;quot; ([http://www.thedatafarm.com/blog/content/binary/datatips2.jpg example screen])&lt;br /&gt;
&lt;br /&gt;
MSVC 2005: To add support for expanding Qt data structures like QString of QRect, edit {msvc_installation_directory}\Common7\Packages\Debugger\autoexp.dat file and paste [[/Automatic expanding of Qt data structures|definitions]] after [AutoExpand] line.&lt;br /&gt;
==WINDOWS and CONSOLE subsystems==&lt;br /&gt;
CONSOLE subsystem is the one that displays console window (used for standard output and error streams) in addition to application's windows. WINDOWS subsystem redirects standard output and error streams to system debugging subsystem that can be displayed if needed in [[Projects/KDE_on_Windows/Tools#DebugView|DebugView]] or debuggers like msvc or [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg]].&lt;br /&gt;
Hint: To remove CONSOLE subsystem from already built .exe file, type &amp;lt;code&amp;gt;editbin /subsystem:windows file.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: Qt's qmake syntax supports ''console'' and ''windows'' parameters of the ''CONFIG'' variable, so CONSOLE subsystem can be enabled by specifying &amp;lt;tt&amp;gt;CONFIG += console&amp;lt;/tt&amp;gt; in the .pro file, windows subsystem can be enabled with &amp;lt;tt&amp;gt;CONFIG += windows&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
Running a VC++2005 SP1 app on another computer: manifest files are needed. See [http://www.codeproject.com/KB/cpp/vcredists_x86.aspx] and [http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx].&lt;br /&gt;
&lt;br /&gt;
===Note on debug builds===&lt;br /&gt;
The hints above are for release builds (or ReleaseWithDebugInfo). Moving Debug versions of binaries to other computers is only allowed (and technicallu possible) if you have Express Edition installed there, as there is no redistributable package for Debug versions provided and even the license disallows distribution of any debug binaries (even your own).&lt;br /&gt;
&lt;br /&gt;
= MinGW debugging hints =&lt;br /&gt;
&lt;br /&gt;
There are gdb binaries you can directly run after unpacking them, e.g. from &lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=20507 mingw's gdb downloads on sourceforge]. &lt;br /&gt;
&lt;br /&gt;
To get a backtrace for a crash you can reproduce: Start the gdb binary with the full path to the executable on the command line, for example like&lt;br /&gt;
&amp;lt;code&amp;gt;..\gdb\gdb.exe c:\programme\kontact\bin\kontact.exe&amp;lt;/code&amp;gt;. When getting&lt;br /&gt;
the command prompt use the run command with the arguments for your application, e.g &amp;lt;code&amp;gt;run --nofork&amp;lt;/code&amp;gt;. Now wait until your applications starts and go on reproducing the crash. Once you encounter the crash, gdb will be in control&lt;br /&gt;
in the command line again. &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; will get you the backtrace.&lt;br /&gt;
&lt;br /&gt;
Instead of running gdb from the beginning, you can also attach to a running process. Use the regular &amp;quot;task-manager&amp;quot; to see which process. Enable the process id columns so you can see the number. Now you can start gdb (still give it the path to the application executable if you can) and use the &amp;lt;code&amp;gt;attach&amp;lt;/code&amp;gt; command with the process id you want to attach to from the&lt;br /&gt;
gdb prompt. Gdb will stop the process it attached to, so you can say &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; and then try to produce the crash.&lt;br /&gt;
&lt;br /&gt;
* Dr. Mingw - Just in Time Debugger [http://jrfonseca.planetaclix.pt/projects/gnu-win32/software/drmingw/]&lt;br /&gt;
* Debugging Qt programs on Windows [http://lists.trolltech.com/qt-interest/2005-08/thread01124-0.html]&lt;br /&gt;
&lt;br /&gt;
'''''WARNING''''': If you are having crashes when starting applications via gdb beware of certain applications (mostly anti-virus software) that could cause problems like &amp;quot;Embassy Trust Suite&amp;quot;, for example. See this [http://www.cygwin.com/ml/cygwin/2007-06/msg00405.html post]. &lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows</id>
		<title>Development/Tutorials/Debugging/Debugging on MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows"/>
				<updated>2009-08-22T11:00:24Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Using MS Visual Studio environment for just debugging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Hints=&lt;br /&gt;
==Debugging with WinDbg==&lt;br /&gt;
WinDbg, distributed as a part of ''Debugging Tools for Windows'', is a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps.  It uses the Microsoft Visual Studio debug symbol formats for source-level debugging. [[Projects/KDE_on_Windows/Tools#WinDbg|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging with DebugView==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool, coming from SysInternals (currently acquired by Microsoft). [[Projects/KDE_on_Windows/Tools#DebugView|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging kioslaves==&lt;br /&gt;
kioslaves on windows are started by klauncher (or kio) as separate kioslave processes. The kioslave executable then loads the related kioslave dll dynamically. &lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_WAIT variable ===&lt;br /&gt;
To debug kioslaves:&lt;br /&gt;
#Set the KDE_SLAVE_DEBUG_WAIT environment variable in a current cmd.exe shell to the name of the kioslave's protocol (the first parameter of KIO::SlaveBase() constructor), e.g.&amp;lt;pre&amp;gt;set KDE_SLAVE_DEBUG_WAIT=file&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Terminate &amp;lt;tt&amp;gt;klauncher&amp;lt;/tt&amp;gt; process so it can be restarted.&lt;br /&gt;
#Any application you want to debug at kioslave level have to be executed within the scope of the current environment (cmd.exe), what also means that if you want to use development environment, you have to do that in the environment as well, e.g. for MSVC Express, by typing &amp;lt;tt&amp;gt;vcexpress&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the kioslave is requested the next time, a debugger will be started and attached to the kioslave process immediatly before the kioslave's kdemain() function. &lt;br /&gt;
&lt;br /&gt;
On mingw platform gdb is launched and connected to the kioslave process. On msvc platforms the currently installed just-in-time debugger is used. This may be msvc's IDE or the [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg debugger]].  The latter could be set as jit-debugger by running 'windbg -I' command (capital -I like ICE, see [http://msdn2.microsoft.com/en-us/library/cc266343.aspx]).&lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_POPUP variable ===&lt;br /&gt;
Alternatively, you can set &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; variable instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. This will display a native message box so developer you can attach the debugger to the KIO slave process and click OK. No DebugBreak() is invoked. Just click OK without attaching to continue using the KIO slave without debugging.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
*You can set, say, the variable to 'file' for the kio_file slave, '''but''' set it to 'smtps' for the kio_smtp is you want to debug smtp protocol secured with SSL.&lt;br /&gt;
*(Vista only): ''kioslave.exe has stopped working'' message dialog can appear instead of offer for starting the debugger. Reason: Just-In-Time (JIT) Debugging of an elevated process will fail ([http://msdn2.microsoft.com/en-us/vstudio/aa964140.aspx#question20a msdn link]) apparently for security reasons. Either:&lt;br /&gt;
**Use &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. See the [[#Using_KDE_SLAVE_DEBUG_POPUP_variable|Using KDE_SLAVE_DEBUG_POPUP variable]] above for more info.&lt;br /&gt;
**(not possible under msvc 2005): start applications and klauncher without administration permissions or attach the debugger manually before the debugger catches unhandled exceptions or an user-defined breakpoint (DebugBreak()). &lt;br /&gt;
*You may want to inspect kioslave sources [http://lxr.kde.org/source/KDE/kdelibs/kinit/kioslave.cpp] for more informations.&lt;br /&gt;
&lt;br /&gt;
== Checking dependency of shared libraries ==&lt;br /&gt;
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. [[Projects/KDE_on_Windows/Tools#Dependency_Walker|more...]]&lt;br /&gt;
&lt;br /&gt;
= MS Visual Studio hints =&lt;br /&gt;
&lt;br /&gt;
== Using MS Visual Studio environment for just debugging ==&lt;br /&gt;
&lt;br /&gt;
Let's assume you're using command line tools (typically CMake) and want to use MS Visual Studio environment for just debugging. You don't need to create msvc project for your KDE application to be able to start debugging. &lt;br /&gt;
&lt;br /&gt;
* compile and working executable version of your appliation (compiled in debug mode)&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''File-&amp;gt;Open Project/Solution''&lt;br /&gt;
* pick your exe file in the file window&lt;br /&gt;
* you can set command line arguments as usual, by pick ''Project-&amp;gt;...Properties'' command and enter all of them it in ''Command Arguments'' field&lt;br /&gt;
* if you have libraries placed in other directories than your application's .exe file, and you want to step into these libraries' source code while debugging, pick ''Project-&amp;gt;...Properties'' command and enter paths to these directories in ''Symbol Path'' field&lt;br /&gt;
* hit F5 to run the application start the application or F10 to start step by step&lt;br /&gt;
* all debugging functions like setting breakpoints will be available, so you can open source code in the integrated editor and press F9 where needed&lt;br /&gt;
* you can even edit your source code but to compile it, do it with your external, command line tools. You cannot compile the application in the msvc environment because you have not defined a project file&lt;br /&gt;
* before compiling your application, stop debugging session to unlock binaries; no need to close msvc window&lt;br /&gt;
* after compilation you can start debugging again&lt;br /&gt;
* on exit you will be asked to save .sln file (so-called ''solution file'') with your debugging session -- do it and you will be able just to click the .sln file to start your debugging again&lt;br /&gt;
* it's recommended to save the .sln file in the same directory where the .exe file sits&lt;br /&gt;
*hints on reopening the debugging session:&lt;br /&gt;
**Next time you will run msvc environment, you can see name of your application's .sln file in ''File-&amp;gt;Recent Projects'' submenu - you can click it to load your debugging session.&lt;br /&gt;
**On command line you can type &amp;quot;cd path-to-your-sln-file; &amp;lt;yourfilename&amp;gt;.sln&amp;quot;.&lt;br /&gt;
**You can also use &amp;quot;vcexpress /debugexe &amp;lt;myapplication&amp;gt; &amp;lt;args&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Attaching to running application ==&lt;br /&gt;
&lt;br /&gt;
If you have your application is already running, you can attach to it and then start debugging. &lt;br /&gt;
&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''Debug-&amp;gt;processes''&lt;br /&gt;
* select your from the processes list and click &amp;quot;Attach...&amp;quot;&lt;br /&gt;
* msvc environment will load your .sln file if it exists in the same directory as the .exe file, so your breakpoints set in previous session will be active again&lt;br /&gt;
* your program will stop on any breakpoint you have set&lt;br /&gt;
&lt;br /&gt;
== One-step attaching to running application ==&lt;br /&gt;
*You can create a macro that automates the task. See [http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx].&lt;br /&gt;
*MSVC 2008 or later can always attach to the running process (if exists). Just set the &amp;quot;Attach&amp;quot; option to &amp;quot;Yes&amp;quot; in the &amp;quot;Project-&amp;gt;[yourapp] Properties&amp;quot; window.&lt;br /&gt;
&lt;br /&gt;
== Memory Values ==&lt;br /&gt;
If you are using the debug heap, memory is initialized and cleared with special values. Most interesting values are: &lt;br /&gt;
* 0xCDCDCDCD - Allocated in heap, but not initialized&lt;br /&gt;
* 0xDDDDDDDD - Released heap memory.&lt;br /&gt;
* 0xFDFDFDFD - &amp;quot;NoMansLand&amp;quot; fences automatically placed at boundary of heap memory. Should never be overwritten. If you do overwrite one, you're probably walking off the end of an array.&lt;br /&gt;
* 0xCCCCCCCC - Allocated on stack, but not initialized&lt;br /&gt;
See also: [http://www.samblackburn.com/wfc/technotes/WTN006.htm]&lt;br /&gt;
&lt;br /&gt;
==How to Not Step Into Functions in the Debugger==&lt;br /&gt;
You'll probably want to avoind stepping into lower-level functions like QString constructors or operators while debugging step-by-step. Here's the detailed (unofficial) [http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx instruction] for various msvc versions.&lt;br /&gt;
&lt;br /&gt;
==Enable automatic expanding of Qt data structures==&lt;br /&gt;
From the msvc docs: &amp;quot;While debugging, Data Tips and items in the Watch and Variable windows are automatically expanded to show their most important elements. The expansion follows the format given by the rules in this file. You can add rules for your types or change the predefined rules.&amp;quot; ([http://www.thedatafarm.com/blog/content/binary/datatips2.jpg example screen])&lt;br /&gt;
&lt;br /&gt;
MSVC 2005: To add support for expanding Qt data structures like QString of QRect, edit {msvc_installation_directory}\Common7\Packages\Debugger\autoexp.dat file and paste [[/Automatic expanding of Qt data structures|definitions]] after [AutoExpand] line.&lt;br /&gt;
==WINDOWS and CONSOLE subsystems==&lt;br /&gt;
CONSOLE subsystem is the one that displays console window (used for standard output and error streams) in addition to application's windows. WINDOWS subsystem redirects standard output and error streams to system debugging subsystem that can be displayed if needed in [[Projects/KDE_on_Windows/Tools#DebugView|DebugView]] or debuggers like msvc or [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg]].&lt;br /&gt;
Hint: To remove CONSOLE subsystem from already built .exe file, type &amp;lt;code&amp;gt;editbin /subsystem:windows file.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: Qt's qmake syntax supports ''console'' and ''windows'' parameters of the ''CONFIG'' variable, so CONSOLE subsystem can be enabled by specifying &amp;lt;tt&amp;gt;CONFIG += console&amp;lt;/tt&amp;gt; in the .pro file, windows subsystem can be enabled with &amp;lt;tt&amp;gt;CONFIG += windows&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
Running a VC++2005 SP1 app on another computer: manifest files are needed. See [http://www.codeproject.com/KB/cpp/vcredists_x86.aspx] and [http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx].&lt;br /&gt;
&lt;br /&gt;
===Note on debug builds===&lt;br /&gt;
The hints above are for release builds (or ReleaseWithDebugInfo). Moving Debug versions of binaries to other computers is only allowed (and technicallu possible) if you have Express Edition installed there, as there is no redistributable package for Debug versions provided and even the license disallows distribution of any debug binaries (even your own).&lt;br /&gt;
&lt;br /&gt;
= MinGW debugging hints =&lt;br /&gt;
&lt;br /&gt;
There are gdb binaries you can directly run after unpacking them, e.g. from &lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=20507 mingw's gdb downloads on sourceforge]. &lt;br /&gt;
&lt;br /&gt;
To get a backtrace for a crash you can reproduce: Start the gdb binary with the full path to the executable on the command line, for example like&lt;br /&gt;
&amp;lt;code&amp;gt;..\gdb\gdb.exe c:\programme\kontact\bin\kontact.exe&amp;lt;/code&amp;gt;. When getting&lt;br /&gt;
the command prompt use the run command with the arguments for your application, e.g &amp;lt;code&amp;gt;run --nofork&amp;lt;/code&amp;gt;. Now wait until your applications starts and go on reproducing the crash. Once you encounter the crash, gdb will be in control&lt;br /&gt;
in the command line again. &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; will get you the backtrace.&lt;br /&gt;
&lt;br /&gt;
Instead of running gdb from the beginning, you can also attach to a running process. Use the regular &amp;quot;task-manager&amp;quot; to see which process. Enable the process id columns so you can see the number. Now you can start gdb (still give it the path to the application executable if you can) and use the &amp;lt;code&amp;gt;attach&amp;lt;/code&amp;gt; command with the process id you want to attach to from the&lt;br /&gt;
gdb prompt. Gdb will stop the process it attached to, so you can say &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; and then try to produce the crash.&lt;br /&gt;
&lt;br /&gt;
* Dr. Mingw - Just in Time Debugger [http://jrfonseca.planetaclix.pt/projects/gnu-win32/software/drmingw/]&lt;br /&gt;
* Debugging Qt programs on Windows [http://lists.trolltech.com/qt-interest/2005-08/thread01124-0.html]&lt;br /&gt;
&lt;br /&gt;
'''''WARNING''''': If you are having crashes when starting applications via gdb beware of certain applications (mostly anti-virus software) that could cause problems like &amp;quot;Embassy Trust Suite&amp;quot;, for example. See this [http://www.cygwin.com/ml/cygwin/2007-06/msg00405.html post]. &lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows</id>
		<title>Development/Tutorials/Debugging/Debugging on MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows"/>
				<updated>2009-08-22T10:59:57Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* One-step attaching to running application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Hints=&lt;br /&gt;
==Debugging with WinDbg==&lt;br /&gt;
WinDbg, distributed as a part of ''Debugging Tools for Windows'', is a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps.  It uses the Microsoft Visual Studio debug symbol formats for source-level debugging. [[Projects/KDE_on_Windows/Tools#WinDbg|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging with DebugView==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool, coming from SysInternals (currently acquired by Microsoft). [[Projects/KDE_on_Windows/Tools#DebugView|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging kioslaves==&lt;br /&gt;
kioslaves on windows are started by klauncher (or kio) as separate kioslave processes. The kioslave executable then loads the related kioslave dll dynamically. &lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_WAIT variable ===&lt;br /&gt;
To debug kioslaves:&lt;br /&gt;
#Set the KDE_SLAVE_DEBUG_WAIT environment variable in a current cmd.exe shell to the name of the kioslave's protocol (the first parameter of KIO::SlaveBase() constructor), e.g.&amp;lt;pre&amp;gt;set KDE_SLAVE_DEBUG_WAIT=file&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Terminate &amp;lt;tt&amp;gt;klauncher&amp;lt;/tt&amp;gt; process so it can be restarted.&lt;br /&gt;
#Any application you want to debug at kioslave level have to be executed within the scope of the current environment (cmd.exe), what also means that if you want to use development environment, you have to do that in the environment as well, e.g. for MSVC Express, by typing &amp;lt;tt&amp;gt;vcexpress&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the kioslave is requested the next time, a debugger will be started and attached to the kioslave process immediatly before the kioslave's kdemain() function. &lt;br /&gt;
&lt;br /&gt;
On mingw platform gdb is launched and connected to the kioslave process. On msvc platforms the currently installed just-in-time debugger is used. This may be msvc's IDE or the [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg debugger]].  The latter could be set as jit-debugger by running 'windbg -I' command (capital -I like ICE, see [http://msdn2.microsoft.com/en-us/library/cc266343.aspx]).&lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_POPUP variable ===&lt;br /&gt;
Alternatively, you can set &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; variable instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. This will display a native message box so developer you can attach the debugger to the KIO slave process and click OK. No DebugBreak() is invoked. Just click OK without attaching to continue using the KIO slave without debugging.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
*You can set, say, the variable to 'file' for the kio_file slave, '''but''' set it to 'smtps' for the kio_smtp is you want to debug smtp protocol secured with SSL.&lt;br /&gt;
*(Vista only): ''kioslave.exe has stopped working'' message dialog can appear instead of offer for starting the debugger. Reason: Just-In-Time (JIT) Debugging of an elevated process will fail ([http://msdn2.microsoft.com/en-us/vstudio/aa964140.aspx#question20a msdn link]) apparently for security reasons. Either:&lt;br /&gt;
**Use &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. See the [[#Using_KDE_SLAVE_DEBUG_POPUP_variable|Using KDE_SLAVE_DEBUG_POPUP variable]] above for more info.&lt;br /&gt;
**(not possible under msvc 2005): start applications and klauncher without administration permissions or attach the debugger manually before the debugger catches unhandled exceptions or an user-defined breakpoint (DebugBreak()). &lt;br /&gt;
*You may want to inspect kioslave sources [http://lxr.kde.org/source/KDE/kdelibs/kinit/kioslave.cpp] for more informations.&lt;br /&gt;
&lt;br /&gt;
== Checking dependency of shared libraries ==&lt;br /&gt;
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. [[Projects/KDE_on_Windows/Tools#Dependency_Walker|more...]]&lt;br /&gt;
&lt;br /&gt;
= MS Visual Studio hints =&lt;br /&gt;
&lt;br /&gt;
== Using MS Visual Studio environment for just debugging ==&lt;br /&gt;
&lt;br /&gt;
Let's assume you're using command line tools (typically CMake) and want to use MS Visual Studio environment for just debugging. You don't need to create msvc project for your KDE application to be able to start debugging. &lt;br /&gt;
&lt;br /&gt;
* compile and working executable version of your appliation (compiled in debug mode)&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''File-&amp;gt;Open Project/Solution''&lt;br /&gt;
* pick your exe file in the file window&lt;br /&gt;
* you can set command line arguments as usual, by pick ''Project-&amp;gt;...Properties'' command and enter all of them it in ''Command Arguments'' field&lt;br /&gt;
* if you have libraries placed in other directories than your application's .exe file, and you want to step into these libraries' source code while debugging, pick ''Project-&amp;gt;...Properties'' command and enter paths to these directories in ''Symbol Path'' field&lt;br /&gt;
* hit F5 to run the application start the application or F10 to start step by step&lt;br /&gt;
* all debugging functions like setting breakpoints will be available, so you can open source code in the integrated editor and press F9 where needed&lt;br /&gt;
* you can even edit your source code but to compile it, do it with your external, command line tools. You cannot compile the application in the msvc environment because you have not defined a project file&lt;br /&gt;
* before compiling your application, stop debugging session to unlock binaries; no need to close msvc window&lt;br /&gt;
* after compilation you can start debugging again&lt;br /&gt;
* on exit you will be asked to save .sln file (so-called ''solution file'') with your debugging session -- do it and you will be able just to click the .sln file to start your debugging again&lt;br /&gt;
* it's recommended to save the .sln file in the same directory where the .exe file sits&lt;br /&gt;
*hints on reopening the debugging session:&lt;br /&gt;
**Next time you will run msvc environment, you can see name of your application's .sln file in ''File-&amp;gt;Recent Projects'' submenu - you can click it to load your debugging session.&lt;br /&gt;
**On command line you can type &amp;quot;cd path-to-your-sln-file; &amp;lt;yourfilename&amp;gt;.sln&amp;quot; to execute.&lt;br /&gt;
**You can also use &amp;quot;vcexpress /debugexe &amp;lt;myapplication&amp;gt; &amp;lt;args&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Attaching to running application ==&lt;br /&gt;
&lt;br /&gt;
If you have your application is already running, you can attach to it and then start debugging. &lt;br /&gt;
&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''Debug-&amp;gt;processes''&lt;br /&gt;
* select your from the processes list and click &amp;quot;Attach...&amp;quot;&lt;br /&gt;
* msvc environment will load your .sln file if it exists in the same directory as the .exe file, so your breakpoints set in previous session will be active again&lt;br /&gt;
* your program will stop on any breakpoint you have set&lt;br /&gt;
&lt;br /&gt;
== One-step attaching to running application ==&lt;br /&gt;
*You can create a macro that automates the task. See [http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx].&lt;br /&gt;
*MSVC 2008 or later can always attach to the running process (if exists). Just set the &amp;quot;Attach&amp;quot; option to &amp;quot;Yes&amp;quot; in the &amp;quot;Project-&amp;gt;[yourapp] Properties&amp;quot; window.&lt;br /&gt;
&lt;br /&gt;
== Memory Values ==&lt;br /&gt;
If you are using the debug heap, memory is initialized and cleared with special values. Most interesting values are: &lt;br /&gt;
* 0xCDCDCDCD - Allocated in heap, but not initialized&lt;br /&gt;
* 0xDDDDDDDD - Released heap memory.&lt;br /&gt;
* 0xFDFDFDFD - &amp;quot;NoMansLand&amp;quot; fences automatically placed at boundary of heap memory. Should never be overwritten. If you do overwrite one, you're probably walking off the end of an array.&lt;br /&gt;
* 0xCCCCCCCC - Allocated on stack, but not initialized&lt;br /&gt;
See also: [http://www.samblackburn.com/wfc/technotes/WTN006.htm]&lt;br /&gt;
&lt;br /&gt;
==How to Not Step Into Functions in the Debugger==&lt;br /&gt;
You'll probably want to avoind stepping into lower-level functions like QString constructors or operators while debugging step-by-step. Here's the detailed (unofficial) [http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx instruction] for various msvc versions.&lt;br /&gt;
&lt;br /&gt;
==Enable automatic expanding of Qt data structures==&lt;br /&gt;
From the msvc docs: &amp;quot;While debugging, Data Tips and items in the Watch and Variable windows are automatically expanded to show their most important elements. The expansion follows the format given by the rules in this file. You can add rules for your types or change the predefined rules.&amp;quot; ([http://www.thedatafarm.com/blog/content/binary/datatips2.jpg example screen])&lt;br /&gt;
&lt;br /&gt;
MSVC 2005: To add support for expanding Qt data structures like QString of QRect, edit {msvc_installation_directory}\Common7\Packages\Debugger\autoexp.dat file and paste [[/Automatic expanding of Qt data structures|definitions]] after [AutoExpand] line.&lt;br /&gt;
==WINDOWS and CONSOLE subsystems==&lt;br /&gt;
CONSOLE subsystem is the one that displays console window (used for standard output and error streams) in addition to application's windows. WINDOWS subsystem redirects standard output and error streams to system debugging subsystem that can be displayed if needed in [[Projects/KDE_on_Windows/Tools#DebugView|DebugView]] or debuggers like msvc or [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg]].&lt;br /&gt;
Hint: To remove CONSOLE subsystem from already built .exe file, type &amp;lt;code&amp;gt;editbin /subsystem:windows file.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: Qt's qmake syntax supports ''console'' and ''windows'' parameters of the ''CONFIG'' variable, so CONSOLE subsystem can be enabled by specifying &amp;lt;tt&amp;gt;CONFIG += console&amp;lt;/tt&amp;gt; in the .pro file, windows subsystem can be enabled with &amp;lt;tt&amp;gt;CONFIG += windows&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
Running a VC++2005 SP1 app on another computer: manifest files are needed. See [http://www.codeproject.com/KB/cpp/vcredists_x86.aspx] and [http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx].&lt;br /&gt;
&lt;br /&gt;
===Note on debug builds===&lt;br /&gt;
The hints above are for release builds (or ReleaseWithDebugInfo). Moving Debug versions of binaries to other computers is only allowed (and technicallu possible) if you have Express Edition installed there, as there is no redistributable package for Debug versions provided and even the license disallows distribution of any debug binaries (even your own).&lt;br /&gt;
&lt;br /&gt;
= MinGW debugging hints =&lt;br /&gt;
&lt;br /&gt;
There are gdb binaries you can directly run after unpacking them, e.g. from &lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=20507 mingw's gdb downloads on sourceforge]. &lt;br /&gt;
&lt;br /&gt;
To get a backtrace for a crash you can reproduce: Start the gdb binary with the full path to the executable on the command line, for example like&lt;br /&gt;
&amp;lt;code&amp;gt;..\gdb\gdb.exe c:\programme\kontact\bin\kontact.exe&amp;lt;/code&amp;gt;. When getting&lt;br /&gt;
the command prompt use the run command with the arguments for your application, e.g &amp;lt;code&amp;gt;run --nofork&amp;lt;/code&amp;gt;. Now wait until your applications starts and go on reproducing the crash. Once you encounter the crash, gdb will be in control&lt;br /&gt;
in the command line again. &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; will get you the backtrace.&lt;br /&gt;
&lt;br /&gt;
Instead of running gdb from the beginning, you can also attach to a running process. Use the regular &amp;quot;task-manager&amp;quot; to see which process. Enable the process id columns so you can see the number. Now you can start gdb (still give it the path to the application executable if you can) and use the &amp;lt;code&amp;gt;attach&amp;lt;/code&amp;gt; command with the process id you want to attach to from the&lt;br /&gt;
gdb prompt. Gdb will stop the process it attached to, so you can say &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; and then try to produce the crash.&lt;br /&gt;
&lt;br /&gt;
* Dr. Mingw - Just in Time Debugger [http://jrfonseca.planetaclix.pt/projects/gnu-win32/software/drmingw/]&lt;br /&gt;
* Debugging Qt programs on Windows [http://lists.trolltech.com/qt-interest/2005-08/thread01124-0.html]&lt;br /&gt;
&lt;br /&gt;
'''''WARNING''''': If you are having crashes when starting applications via gdb beware of certain applications (mostly anti-virus software) that could cause problems like &amp;quot;Embassy Trust Suite&amp;quot;, for example. See this [http://www.cygwin.com/ml/cygwin/2007-06/msg00405.html post]. &lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows</id>
		<title>Development/Tutorials/Debugging/Debugging on MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows"/>
				<updated>2009-08-22T10:55:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Using MS Visual Studio environment for just debugging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Hints=&lt;br /&gt;
==Debugging with WinDbg==&lt;br /&gt;
WinDbg, distributed as a part of ''Debugging Tools for Windows'', is a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps.  It uses the Microsoft Visual Studio debug symbol formats for source-level debugging. [[Projects/KDE_on_Windows/Tools#WinDbg|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging with DebugView==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool, coming from SysInternals (currently acquired by Microsoft). [[Projects/KDE_on_Windows/Tools#DebugView|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging kioslaves==&lt;br /&gt;
kioslaves on windows are started by klauncher (or kio) as separate kioslave processes. The kioslave executable then loads the related kioslave dll dynamically. &lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_WAIT variable ===&lt;br /&gt;
To debug kioslaves:&lt;br /&gt;
#Set the KDE_SLAVE_DEBUG_WAIT environment variable in a current cmd.exe shell to the name of the kioslave's protocol (the first parameter of KIO::SlaveBase() constructor), e.g.&amp;lt;pre&amp;gt;set KDE_SLAVE_DEBUG_WAIT=file&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Terminate &amp;lt;tt&amp;gt;klauncher&amp;lt;/tt&amp;gt; process so it can be restarted.&lt;br /&gt;
#Any application you want to debug at kioslave level have to be executed within the scope of the current environment (cmd.exe), what also means that if you want to use development environment, you have to do that in the environment as well, e.g. for MSVC Express, by typing &amp;lt;tt&amp;gt;vcexpress&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the kioslave is requested the next time, a debugger will be started and attached to the kioslave process immediatly before the kioslave's kdemain() function. &lt;br /&gt;
&lt;br /&gt;
On mingw platform gdb is launched and connected to the kioslave process. On msvc platforms the currently installed just-in-time debugger is used. This may be msvc's IDE or the [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg debugger]].  The latter could be set as jit-debugger by running 'windbg -I' command (capital -I like ICE, see [http://msdn2.microsoft.com/en-us/library/cc266343.aspx]).&lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_POPUP variable ===&lt;br /&gt;
Alternatively, you can set &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; variable instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. This will display a native message box so developer you can attach the debugger to the KIO slave process and click OK. No DebugBreak() is invoked. Just click OK without attaching to continue using the KIO slave without debugging.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
*You can set, say, the variable to 'file' for the kio_file slave, '''but''' set it to 'smtps' for the kio_smtp is you want to debug smtp protocol secured with SSL.&lt;br /&gt;
*(Vista only): ''kioslave.exe has stopped working'' message dialog can appear instead of offer for starting the debugger. Reason: Just-In-Time (JIT) Debugging of an elevated process will fail ([http://msdn2.microsoft.com/en-us/vstudio/aa964140.aspx#question20a msdn link]) apparently for security reasons. Either:&lt;br /&gt;
**Use &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. See the [[#Using_KDE_SLAVE_DEBUG_POPUP_variable|Using KDE_SLAVE_DEBUG_POPUP variable]] above for more info.&lt;br /&gt;
**(not possible under msvc 2005): start applications and klauncher without administration permissions or attach the debugger manually before the debugger catches unhandled exceptions or an user-defined breakpoint (DebugBreak()). &lt;br /&gt;
*You may want to inspect kioslave sources [http://lxr.kde.org/source/KDE/kdelibs/kinit/kioslave.cpp] for more informations.&lt;br /&gt;
&lt;br /&gt;
== Checking dependency of shared libraries ==&lt;br /&gt;
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. [[Projects/KDE_on_Windows/Tools#Dependency_Walker|more...]]&lt;br /&gt;
&lt;br /&gt;
= MS Visual Studio hints =&lt;br /&gt;
&lt;br /&gt;
== Using MS Visual Studio environment for just debugging ==&lt;br /&gt;
&lt;br /&gt;
Let's assume you're using command line tools (typically CMake) and want to use MS Visual Studio environment for just debugging. You don't need to create msvc project for your KDE application to be able to start debugging. &lt;br /&gt;
&lt;br /&gt;
* compile and working executable version of your appliation (compiled in debug mode)&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''File-&amp;gt;Open Project/Solution''&lt;br /&gt;
* pick your exe file in the file window&lt;br /&gt;
* you can set command line arguments as usual, by pick ''Project-&amp;gt;...Properties'' command and enter all of them it in ''Command Arguments'' field&lt;br /&gt;
* if you have libraries placed in other directories than your application's .exe file, and you want to step into these libraries' source code while debugging, pick ''Project-&amp;gt;...Properties'' command and enter paths to these directories in ''Symbol Path'' field&lt;br /&gt;
* hit F5 to run the application start the application or F10 to start step by step&lt;br /&gt;
* all debugging functions like setting breakpoints will be available, so you can open source code in the integrated editor and press F9 where needed&lt;br /&gt;
* you can even edit your source code but to compile it, do it with your external, command line tools. You cannot compile the application in the msvc environment because you have not defined a project file&lt;br /&gt;
* before compiling your application, stop debugging session to unlock binaries; no need to close msvc window&lt;br /&gt;
* after compilation you can start debugging again&lt;br /&gt;
* on exit you will be asked to save .sln file (so-called ''solution file'') with your debugging session -- do it and you will be able just to click the .sln file to start your debugging again&lt;br /&gt;
* it's recommended to save the .sln file in the same directory where the .exe file sits&lt;br /&gt;
*hints on reopening the debugging session:&lt;br /&gt;
**Next time you will run msvc environment, you can see name of your application's .sln file in ''File-&amp;gt;Recent Projects'' submenu - you can click it to load your debugging session.&lt;br /&gt;
**On command line you can type &amp;quot;cd path-to-your-sln-file; &amp;lt;yourfilename&amp;gt;.sln&amp;quot; to execute.&lt;br /&gt;
**You can also use &amp;quot;vcexpress /debugexe &amp;lt;myapplication&amp;gt; &amp;lt;args&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Attaching to running application ==&lt;br /&gt;
&lt;br /&gt;
If you have your application is already running, you can attach to it and then start debugging. &lt;br /&gt;
&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''Debug-&amp;gt;processes''&lt;br /&gt;
* select your from the processes list and click &amp;quot;Attach...&amp;quot;&lt;br /&gt;
* msvc environment will load your .sln file if it exists in the same directory as the .exe file, so your breakpoints set in previous session will be active again&lt;br /&gt;
* your program will stop on any breakpoint you have set&lt;br /&gt;
&lt;br /&gt;
== One-step attaching to running application ==&lt;br /&gt;
You can create a macro that automates the task. See [http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx].&lt;br /&gt;
&lt;br /&gt;
== Memory Values ==&lt;br /&gt;
If you are using the debug heap, memory is initialized and cleared with special values. Most interesting values are: &lt;br /&gt;
* 0xCDCDCDCD - Allocated in heap, but not initialized&lt;br /&gt;
* 0xDDDDDDDD - Released heap memory.&lt;br /&gt;
* 0xFDFDFDFD - &amp;quot;NoMansLand&amp;quot; fences automatically placed at boundary of heap memory. Should never be overwritten. If you do overwrite one, you're probably walking off the end of an array.&lt;br /&gt;
* 0xCCCCCCCC - Allocated on stack, but not initialized&lt;br /&gt;
See also: [http://www.samblackburn.com/wfc/technotes/WTN006.htm]&lt;br /&gt;
&lt;br /&gt;
==How to Not Step Into Functions in the Debugger==&lt;br /&gt;
You'll probably want to avoind stepping into lower-level functions like QString constructors or operators while debugging step-by-step. Here's the detailed (unofficial) [http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx instruction] for various msvc versions.&lt;br /&gt;
&lt;br /&gt;
==Enable automatic expanding of Qt data structures==&lt;br /&gt;
From the msvc docs: &amp;quot;While debugging, Data Tips and items in the Watch and Variable windows are automatically expanded to show their most important elements. The expansion follows the format given by the rules in this file. You can add rules for your types or change the predefined rules.&amp;quot; ([http://www.thedatafarm.com/blog/content/binary/datatips2.jpg example screen])&lt;br /&gt;
&lt;br /&gt;
MSVC 2005: To add support for expanding Qt data structures like QString of QRect, edit {msvc_installation_directory}\Common7\Packages\Debugger\autoexp.dat file and paste [[/Automatic expanding of Qt data structures|definitions]] after [AutoExpand] line.&lt;br /&gt;
==WINDOWS and CONSOLE subsystems==&lt;br /&gt;
CONSOLE subsystem is the one that displays console window (used for standard output and error streams) in addition to application's windows. WINDOWS subsystem redirects standard output and error streams to system debugging subsystem that can be displayed if needed in [[Projects/KDE_on_Windows/Tools#DebugView|DebugView]] or debuggers like msvc or [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg]].&lt;br /&gt;
Hint: To remove CONSOLE subsystem from already built .exe file, type &amp;lt;code&amp;gt;editbin /subsystem:windows file.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: Qt's qmake syntax supports ''console'' and ''windows'' parameters of the ''CONFIG'' variable, so CONSOLE subsystem can be enabled by specifying &amp;lt;tt&amp;gt;CONFIG += console&amp;lt;/tt&amp;gt; in the .pro file, windows subsystem can be enabled with &amp;lt;tt&amp;gt;CONFIG += windows&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
Running a VC++2005 SP1 app on another computer: manifest files are needed. See [http://www.codeproject.com/KB/cpp/vcredists_x86.aspx] and [http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx].&lt;br /&gt;
&lt;br /&gt;
===Note on debug builds===&lt;br /&gt;
The hints above are for release builds (or ReleaseWithDebugInfo). Moving Debug versions of binaries to other computers is only allowed (and technicallu possible) if you have Express Edition installed there, as there is no redistributable package for Debug versions provided and even the license disallows distribution of any debug binaries (even your own).&lt;br /&gt;
&lt;br /&gt;
= MinGW debugging hints =&lt;br /&gt;
&lt;br /&gt;
There are gdb binaries you can directly run after unpacking them, e.g. from &lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=20507 mingw's gdb downloads on sourceforge]. &lt;br /&gt;
&lt;br /&gt;
To get a backtrace for a crash you can reproduce: Start the gdb binary with the full path to the executable on the command line, for example like&lt;br /&gt;
&amp;lt;code&amp;gt;..\gdb\gdb.exe c:\programme\kontact\bin\kontact.exe&amp;lt;/code&amp;gt;. When getting&lt;br /&gt;
the command prompt use the run command with the arguments for your application, e.g &amp;lt;code&amp;gt;run --nofork&amp;lt;/code&amp;gt;. Now wait until your applications starts and go on reproducing the crash. Once you encounter the crash, gdb will be in control&lt;br /&gt;
in the command line again. &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; will get you the backtrace.&lt;br /&gt;
&lt;br /&gt;
Instead of running gdb from the beginning, you can also attach to a running process. Use the regular &amp;quot;task-manager&amp;quot; to see which process. Enable the process id columns so you can see the number. Now you can start gdb (still give it the path to the application executable if you can) and use the &amp;lt;code&amp;gt;attach&amp;lt;/code&amp;gt; command with the process id you want to attach to from the&lt;br /&gt;
gdb prompt. Gdb will stop the process it attached to, so you can say &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; and then try to produce the crash.&lt;br /&gt;
&lt;br /&gt;
* Dr. Mingw - Just in Time Debugger [http://jrfonseca.planetaclix.pt/projects/gnu-win32/software/drmingw/]&lt;br /&gt;
* Debugging Qt programs on Windows [http://lists.trolltech.com/qt-interest/2005-08/thread01124-0.html]&lt;br /&gt;
&lt;br /&gt;
'''''WARNING''''': If you are having crashes when starting applications via gdb beware of certain applications (mostly anti-virus software) that could cause problems like &amp;quot;Embassy Trust Suite&amp;quot;, for example. See this [http://www.cygwin.com/ml/cygwin/2007-06/msg00405.html post]. &lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows</id>
		<title>Development/Tutorials/Debugging/Debugging on MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/Debugging_on_MS_Windows"/>
				<updated>2009-08-22T10:36:15Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Using MS Visual Studio environment for just debugging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Hints=&lt;br /&gt;
==Debugging with WinDbg==&lt;br /&gt;
WinDbg, distributed as a part of ''Debugging Tools for Windows'', is a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps.  It uses the Microsoft Visual Studio debug symbol formats for source-level debugging. [[Projects/KDE_on_Windows/Tools#WinDbg|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging with DebugView==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool, coming from SysInternals (currently acquired by Microsoft). [[Projects/KDE_on_Windows/Tools#DebugView|more...]]&lt;br /&gt;
&lt;br /&gt;
==Debugging kioslaves==&lt;br /&gt;
kioslaves on windows are started by klauncher (or kio) as separate kioslave processes. The kioslave executable then loads the related kioslave dll dynamically. &lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_WAIT variable ===&lt;br /&gt;
To debug kioslaves:&lt;br /&gt;
#Set the KDE_SLAVE_DEBUG_WAIT environment variable in a current cmd.exe shell to the name of the kioslave's protocol (the first parameter of KIO::SlaveBase() constructor), e.g.&amp;lt;pre&amp;gt;set KDE_SLAVE_DEBUG_WAIT=file&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Terminate &amp;lt;tt&amp;gt;klauncher&amp;lt;/tt&amp;gt; process so it can be restarted.&lt;br /&gt;
#Any application you want to debug at kioslave level have to be executed within the scope of the current environment (cmd.exe), what also means that if you want to use development environment, you have to do that in the environment as well, e.g. for MSVC Express, by typing &amp;lt;tt&amp;gt;vcexpress&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the kioslave is requested the next time, a debugger will be started and attached to the kioslave process immediatly before the kioslave's kdemain() function. &lt;br /&gt;
&lt;br /&gt;
On mingw platform gdb is launched and connected to the kioslave process. On msvc platforms the currently installed just-in-time debugger is used. This may be msvc's IDE or the [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg debugger]].  The latter could be set as jit-debugger by running 'windbg -I' command (capital -I like ICE, see [http://msdn2.microsoft.com/en-us/library/cc266343.aspx]).&lt;br /&gt;
&lt;br /&gt;
=== Using KDE_SLAVE_DEBUG_POPUP variable ===&lt;br /&gt;
Alternatively, you can set &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; variable instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. This will display a native message box so developer you can attach the debugger to the KIO slave process and click OK. No DebugBreak() is invoked. Just click OK without attaching to continue using the KIO slave without debugging.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
*You can set, say, the variable to 'file' for the kio_file slave, '''but''' set it to 'smtps' for the kio_smtp is you want to debug smtp protocol secured with SSL.&lt;br /&gt;
*(Vista only): ''kioslave.exe has stopped working'' message dialog can appear instead of offer for starting the debugger. Reason: Just-In-Time (JIT) Debugging of an elevated process will fail ([http://msdn2.microsoft.com/en-us/vstudio/aa964140.aspx#question20a msdn link]) apparently for security reasons. Either:&lt;br /&gt;
**Use &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_POPUP&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;KDE_SLAVE_DEBUG_WAIT&amp;lt;/tt&amp;gt;. See the [[#Using_KDE_SLAVE_DEBUG_POPUP_variable|Using KDE_SLAVE_DEBUG_POPUP variable]] above for more info.&lt;br /&gt;
**(not possible under msvc 2005): start applications and klauncher without administration permissions or attach the debugger manually before the debugger catches unhandled exceptions or an user-defined breakpoint (DebugBreak()). &lt;br /&gt;
*You may want to inspect kioslave sources [http://lxr.kde.org/source/KDE/kdelibs/kinit/kioslave.cpp] for more informations.&lt;br /&gt;
&lt;br /&gt;
== Checking dependency of shared libraries ==&lt;br /&gt;
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. [[Projects/KDE_on_Windows/Tools#Dependency_Walker|more...]]&lt;br /&gt;
&lt;br /&gt;
= MS Visual Studio hints =&lt;br /&gt;
&lt;br /&gt;
== Using MS Visual Studio environment for just debugging ==&lt;br /&gt;
&lt;br /&gt;
Let's assume you're using command line tools (typically CMake) and want to use MS Visual Studio environment for just debugging. You don't need to create msvc project for your KDE application to be able to start debugging. &lt;br /&gt;
&lt;br /&gt;
* compile and working executable version of your appliation (compiled in debug mode)&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''File-&amp;gt;Open Project/Solution''&lt;br /&gt;
* pick your exe file in the file window&lt;br /&gt;
* you can set command line arguments as usual, by pick ''Project-&amp;gt;...Properties'' command and enter all of them it in ''Command Arguments'' field&lt;br /&gt;
* if you have libraries placed in other directories than your application's .exe file, and you want to step into these libraries' source code while debugging, pick ''Project-&amp;gt;...Properties'' command and enter paths to these directories in ''Symbol Path'' field&lt;br /&gt;
* hit F5 to run the application start the application or F10 to start step by step&lt;br /&gt;
* all debugging functions like setting breakpoints will be available, so you can open source code in the integrated editor and press F9 where needed&lt;br /&gt;
* you can even edit your source code but to compile it, do it with your external, command line tools. You cannot compile the application in the msvc environment because you have not defined a project file&lt;br /&gt;
* before compiling your application, stop debugging session to unlock binaries; no need to close msvc window&lt;br /&gt;
* after compilation you can start debugging again&lt;br /&gt;
* on exit you will be asked to save .sln file (so-called ''solution file'') with your debugging session -- do it and you will be able just to click the .sln file to start your debugging again&lt;br /&gt;
* it's recommended to save the .sln file in the .exe file directory&lt;br /&gt;
* next time you will run msvc environment, you can see name of your application's .sln file in ''File-&amp;gt;Recent Projects'' submenu - you can click it to load your debugging session&lt;br /&gt;
&lt;br /&gt;
== Attaching to running application ==&lt;br /&gt;
&lt;br /&gt;
If you have your application is already running, you can attach to it and then start debugging. &lt;br /&gt;
&lt;br /&gt;
* run msvc environment&lt;br /&gt;
* execute ''Debug-&amp;gt;processes''&lt;br /&gt;
* select your from the processes list and click &amp;quot;Attach...&amp;quot;&lt;br /&gt;
* msvc environment will load your .sln file if it exists in the same directory as the .exe file, so your breakpoints set in previous session will be active again&lt;br /&gt;
* your program will stop on any breakpoint you have set&lt;br /&gt;
&lt;br /&gt;
== One-step attaching to running application ==&lt;br /&gt;
You can create a macro that automates the task. See [http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx].&lt;br /&gt;
&lt;br /&gt;
== Memory Values ==&lt;br /&gt;
If you are using the debug heap, memory is initialized and cleared with special values. Most interesting values are: &lt;br /&gt;
* 0xCDCDCDCD - Allocated in heap, but not initialized&lt;br /&gt;
* 0xDDDDDDDD - Released heap memory.&lt;br /&gt;
* 0xFDFDFDFD - &amp;quot;NoMansLand&amp;quot; fences automatically placed at boundary of heap memory. Should never be overwritten. If you do overwrite one, you're probably walking off the end of an array.&lt;br /&gt;
* 0xCCCCCCCC - Allocated on stack, but not initialized&lt;br /&gt;
See also: [http://www.samblackburn.com/wfc/technotes/WTN006.htm]&lt;br /&gt;
&lt;br /&gt;
==How to Not Step Into Functions in the Debugger==&lt;br /&gt;
You'll probably want to avoind stepping into lower-level functions like QString constructors or operators while debugging step-by-step. Here's the detailed (unofficial) [http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx instruction] for various msvc versions.&lt;br /&gt;
&lt;br /&gt;
==Enable automatic expanding of Qt data structures==&lt;br /&gt;
From the msvc docs: &amp;quot;While debugging, Data Tips and items in the Watch and Variable windows are automatically expanded to show their most important elements. The expansion follows the format given by the rules in this file. You can add rules for your types or change the predefined rules.&amp;quot; ([http://www.thedatafarm.com/blog/content/binary/datatips2.jpg example screen])&lt;br /&gt;
&lt;br /&gt;
MSVC 2005: To add support for expanding Qt data structures like QString of QRect, edit {msvc_installation_directory}\Common7\Packages\Debugger\autoexp.dat file and paste [[/Automatic expanding of Qt data structures|definitions]] after [AutoExpand] line.&lt;br /&gt;
==WINDOWS and CONSOLE subsystems==&lt;br /&gt;
CONSOLE subsystem is the one that displays console window (used for standard output and error streams) in addition to application's windows. WINDOWS subsystem redirects standard output and error streams to system debugging subsystem that can be displayed if needed in [[Projects/KDE_on_Windows/Tools#DebugView|DebugView]] or debuggers like msvc or [[Projects/KDE_on_Windows/Tools#WinDbg|WinDbg]].&lt;br /&gt;
Hint: To remove CONSOLE subsystem from already built .exe file, type &amp;lt;code&amp;gt;editbin /subsystem:windows file.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: Qt's qmake syntax supports ''console'' and ''windows'' parameters of the ''CONFIG'' variable, so CONSOLE subsystem can be enabled by specifying &amp;lt;tt&amp;gt;CONFIG += console&amp;lt;/tt&amp;gt; in the .pro file, windows subsystem can be enabled with &amp;lt;tt&amp;gt;CONFIG += windows&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
Running a VC++2005 SP1 app on another computer: manifest files are needed. See [http://www.codeproject.com/KB/cpp/vcredists_x86.aspx] and [http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx].&lt;br /&gt;
&lt;br /&gt;
===Note on debug builds===&lt;br /&gt;
The hints above are for release builds (or ReleaseWithDebugInfo). Moving Debug versions of binaries to other computers is only allowed (and technicallu possible) if you have Express Edition installed there, as there is no redistributable package for Debug versions provided and even the license disallows distribution of any debug binaries (even your own).&lt;br /&gt;
&lt;br /&gt;
= MinGW debugging hints =&lt;br /&gt;
&lt;br /&gt;
There are gdb binaries you can directly run after unpacking them, e.g. from &lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=20507 mingw's gdb downloads on sourceforge]. &lt;br /&gt;
&lt;br /&gt;
To get a backtrace for a crash you can reproduce: Start the gdb binary with the full path to the executable on the command line, for example like&lt;br /&gt;
&amp;lt;code&amp;gt;..\gdb\gdb.exe c:\programme\kontact\bin\kontact.exe&amp;lt;/code&amp;gt;. When getting&lt;br /&gt;
the command prompt use the run command with the arguments for your application, e.g &amp;lt;code&amp;gt;run --nofork&amp;lt;/code&amp;gt;. Now wait until your applications starts and go on reproducing the crash. Once you encounter the crash, gdb will be in control&lt;br /&gt;
in the command line again. &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; will get you the backtrace.&lt;br /&gt;
&lt;br /&gt;
Instead of running gdb from the beginning, you can also attach to a running process. Use the regular &amp;quot;task-manager&amp;quot; to see which process. Enable the process id columns so you can see the number. Now you can start gdb (still give it the path to the application executable if you can) and use the &amp;lt;code&amp;gt;attach&amp;lt;/code&amp;gt; command with the process id you want to attach to from the&lt;br /&gt;
gdb prompt. Gdb will stop the process it attached to, so you can say &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; and then try to produce the crash.&lt;br /&gt;
&lt;br /&gt;
* Dr. Mingw - Just in Time Debugger [http://jrfonseca.planetaclix.pt/projects/gnu-win32/software/drmingw/]&lt;br /&gt;
* Debugging Qt programs on Windows [http://lists.trolltech.com/qt-interest/2005-08/thread01124-0.html]&lt;br /&gt;
&lt;br /&gt;
'''''WARNING''''': If you are having crashes when starting applications via gdb beware of certain applications (mostly anti-virus software) that could cause problems like &amp;quot;Embassy Trust Suite&amp;quot;, for example. See this [http://www.cygwin.com/ml/cygwin/2007-06/msg00405.html post]. &lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-22T10:06:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Compiler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvarsall.bat&amp;lt;/tt&amp;gt; to set your environment variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK. It is installed into %PROGRAMFILES%\Microsoft SDKs\Windows. &lt;br /&gt;
Only version 6.0a is installed by the Visual Studio 2008 Express installer, while 6.1 is required to compile KDE components. So also download and install [http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&amp;amp;displaylang=en version 6.1, i.e. Windows SDK for Windows Server 2008] by hand. See also the [http://msdn.microsoft.com/en-us/windowsserver/dd146047.aspx Which SDK is Right for Me?] document.&lt;br /&gt;
&lt;br /&gt;
=== Improve Integration with the Visual Studio Environment ===&lt;br /&gt;
You can improve:&lt;br /&gt;
*Debugger support for Qt datatypes using autoexp.dat&lt;br /&gt;
*IntelliSense behaviour by adding Qt include directories&lt;br /&gt;
For details read http://eecs.vanderbilt.edu/research/hmtl/wiki/pmwiki.php?n=Knowledge.Qt&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T22:09:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvarsall.bat&amp;lt;/tt&amp;gt; to set your environment variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK. It is installed into %PROGRAMFILES%\Microsoft SDKs\Windows. &lt;br /&gt;
Only version 6.0a is installed by the Visual Studio 2008 Express installer, while 6.1 is required to compile KDE components. So also download and install [http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&amp;amp;displaylang=en version 6.1, i.e. Windows SDK for Windows Server 2008] by hand. See also the [http://msdn.microsoft.com/en-us/windowsserver/dd146047.aspx Which SDK is Right for Me?] document.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T21:57:48Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvarsall.bat&amp;lt;/tt&amp;gt; to set your environment variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK. It is installed into %PROGRAMFILES%\Microsoft SDKs\Windows. &lt;br /&gt;
Only version 6.0a is installed by the Visual Studio 2008 Express installer, while 6.1 is required to compile KDE components. So also download and install [http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&amp;amp;displaylang=en version 6.1, i.e. Windows SDK for Windows Server 2008] by hand.&lt;br /&gt;
&lt;br /&gt;
See also the [http://msdn.microsoft.com/en-us/windowsserver/dd146047.aspx Which SDK is Right for Me?] document.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T21:53:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvarsall.bat&amp;lt;/tt&amp;gt; to set your environment variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK. It is installed into %PROGRAMFILES%\Microsoft SDKs\Windows\. &lt;br /&gt;
&amp;amp;Only version 6.0a is installed by the Visual Studio 2008 Express installer, while 6.1 is required to compile KDE components. So also download and install [http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&amp;amp;displaylang=en version 6.1, i.e. Windows SDK for Windows Server 2008] by hand.&lt;br /&gt;
&lt;br /&gt;
See also the [http://msdn.microsoft.com/en-us/windowsserver/dd146047.aspx Which SDK is Right for Me?] document.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T21:41:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvarsall.bat&amp;lt;/tt&amp;gt; to set your environment variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK that are also needed to compile KDE components. It is installed into %PROGRAMFILES%\Microsoft SDKs\Windows\. Note that apparently version 6.0a is installed on vista, while 6.1 is required. So to upgrade, download [http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&amp;amp;displaylang=en 6.1] by hand.&lt;br /&gt;
&lt;br /&gt;
See also the [http://msdn.microsoft.com/en-us/windowsserver/dd146047.aspx Which SDK is Right for Me?] document.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T21:31:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvarsall.bat&amp;lt;/tt&amp;gt; to set your environment variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK that are also needed to compile KDE components. It is installed into %PROGRAMFILES%\Microsoft SDKs\Windows\. Note that apparently version 6.0a is installed on vista, while 6.1 is required. So to upgrade, download [http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&amp;amp;displaylang=en 6.1] by hand.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T21:14:46Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvarsall.bat&amp;lt;/tt&amp;gt; to set your environment variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK, that are also needed to compile KDE components.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T21:14:01Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Compiler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
** [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
** [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
{{Note|It is recommended to install Visual studio into a path not containing spaces. To do this, change the installation path from the proposed ..\Program Files\ to something like c:\vc9.}}&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvars32.bat&amp;lt;/tt&amp;gt; to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK, that are also needed to compile KDE components.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T19:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
* [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
* [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvars32.bat&amp;lt;/tt&amp;gt; to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install (downloader) at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. It takes about 130 MB of download, assuming no MS SQL Server is selected. &lt;br /&gt;
&lt;br /&gt;
The installer also downloads the Windows SDK, that are also needed to compile KDE components.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T19:28:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
* [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
* [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvars32.bat&amp;lt;/tt&amp;gt; to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the Web Install at [http://www.microsoft.com/express/download/ http://www.microsoft.com/express/download]. This takes about 130 MB of download, assuming no MS SQL Server is selected.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T19:27:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
* [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
* [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvars32.bat&amp;lt;/tt&amp;gt; to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the [http://www.microsoft.com/express/download/ Web Install at http://www.microsoft.com/express/download]. This takes about 130 MB of download, assuming no MS SQL Server is selected.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T19:27:09Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Compiler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
*First, uninstall previous version of Visual Studio, e.g. 2005 or 2003 if you have one. Do this to avoid problems.&lt;br /&gt;
*Now, you can use either:&lt;br /&gt;
* [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
* [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvars32.bat&amp;lt;/tt&amp;gt; to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the [http://www.microsoft.com/express/download/ Web Install]. This takes about 130 MB of download, assuming no MS SQL Server is selected.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T19:24:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
You can use either:&lt;br /&gt;
* [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
* [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvars32.bat&amp;lt;/tt&amp;gt; to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install it using the [http://www.microsoft.com/express/download/ Web Install]. This takes about 130 MB of download, assuming no MS SQL Server is selected.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T19:24:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 Express Edition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
You can use either:&lt;br /&gt;
* [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
* [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvars32.bat&amp;lt;/tt&amp;gt; to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install is using the [http://www.microsoft.com/express/download/ Web Install]. This takes about 130 MB of download, assuming no MS SQL Server is selected.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T19:23:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Visual Studio 2008 SP1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
You can use either:&lt;br /&gt;
* [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
* [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run &amp;lt;tt&amp;gt;vcvars32.bat&amp;lt;/tt&amp;gt; to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install is using the &lt;br /&gt;
*[http://www.microsoft.com/express/download/ Web Install]. This takes about 130 MB of download, assuming no MS SQL Server is selected.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio</id>
		<title>Getting Started/Build/Windows/MS Visual Studio</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/MS_Visual_Studio"/>
				<updated>2009-08-11T19:17:07Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Compiler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{improve|''This page is outdated - please don't use it anymore unless you know exactly what you do. Use [[Getting_Started/Build/KDE4/Windows/emerge|emerge]] instead''}}&lt;br /&gt;
{{KDE4}}&lt;br /&gt;
{{improve|''This page has been moved out of [http://kdelibs.com/wiki/index.php/Building_KDElibs_4_using_MS_Visual_Studio kdelibs.com] wiki page.''}}&lt;br /&gt;
== Basic Tools ==&lt;br /&gt;
=== Kdewin-Installer ===&lt;br /&gt;
This is a program that lets you easily install all the requirements for building kdelibs. It also has a list of tools in its list that are helpful and needed, like the mingw compiler suite, subversion clients, debugging tools and so on.&lt;br /&gt;
&lt;br /&gt;
The kdewin-installer is available in a GUI and console-only form from&lt;br /&gt;
[http://download.cegit.de/kde-windows/installer/ the kdewin-installer download page].&lt;br /&gt;
&lt;br /&gt;
=== The Compiler ===&lt;br /&gt;
You can use either:&lt;br /&gt;
* [[#Visual Studio 2008 SP1|(commercial) Visual Studio 2008 SP1]], or&lt;br /&gt;
* [[#Visual Studio 2008 SP1 Express Edition|free (as in beer) Visual Studio 2008 SP1 Express Edition]]&lt;br /&gt;
&lt;br /&gt;
{{warning|Visual Studio 2005 SP1 or free (as in beer) Express 2005 are no longer supported. Moreover the Express version is not available at microsoft.com.}}&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1====&lt;br /&gt;
There is not much to do - installer of the commercial version sets up the environment. Just do not forget to run vcvars32.bat to set your variables.&lt;br /&gt;
&lt;br /&gt;
====Visual Studio 2008 SP1 Express Edition====&lt;br /&gt;
Install is using the &lt;br /&gt;
*[http://www.microsoft.com/express/download/ Web Install]. This takes about 130 MB of download, assuming no MS SQL Server is selected.&lt;br /&gt;
&lt;br /&gt;
=== CMake ===&lt;br /&gt;
[http://www.cmake.org CMake] is the make tool used by KDE.&lt;br /&gt;
You can get the most recent binaries from [http://www.cmake.org/HTML/Download.html here]. Use the Win32 Installer or the zip archive. Make sure you use at least cmake 2.4.5&lt;br /&gt;
&lt;br /&gt;
On Windows 2000, it's recommended to install cmake in a path without spaces to avoid troubles.&lt;br /&gt;
&lt;br /&gt;
== Compile and Install additional libraries ==&lt;br /&gt;
These libraries have to be installed:&lt;br /&gt;
&lt;br /&gt;
=== D-Bus for Windows ===&lt;br /&gt;
This library can be downloaded and installed with the installer (use the package name dbus-msvc) or you can [[Getting_Started/Build/KDE4/Windows/Building DBus|compile]] it by yourself.&lt;br /&gt;
&lt;br /&gt;
=== Qt 4 ===&lt;br /&gt;
This Framework can be downloaded with the installer, or you can [[Getting_Started/Build/KDE4/Windows/Building Qt 4|build it on your own]].&lt;br /&gt;
&lt;br /&gt;
=== KDESupport Libraries ===&lt;br /&gt;
There are several libraries which will be required for building kdelibs. [[Getting Started/Build/KDE4/Windows/Building KDESupport Libraries|You may want to compile them yourself]] or simply download them using the KDEWin-Installer. You will need:&lt;br /&gt;
*kdewin32 (compiled with msvc)&lt;br /&gt;
*strigi&lt;br /&gt;
*soprano&lt;br /&gt;
*qca2&lt;br /&gt;
*qimageblitz&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
To set up a build environment, follow the steps over [[Getting Started/Build/KDE4/Windows/Environment|here]]. '''If you have Cygwin installed, please be sure to remove Cygwin's /bin out of your path.'''&lt;br /&gt;
&lt;br /&gt;
== Build KDElibs ==&lt;br /&gt;
Check out the sources and make another build directory at the same level as kdelibs: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir kdelibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build KDE libraries with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdelibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use the IDE:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdelibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(&amp;lt;strike&amp;gt;use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler&amp;lt;/strike&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdelibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdelibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdelibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
If you use makefiles and also want to build the test programs add the option &amp;lt;tt&amp;gt;-DKDE4_BUILD_TESTS=1&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command. This is not necessary for the IDE projects.&lt;br /&gt;
&lt;br /&gt;
== Troubles? ==&lt;br /&gt;
*to enable the release build (for example if you get libcmt.lib vs msvcrt.lib conflict on linking stage) add &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=Release&amp;lt;/tt&amp;gt; to the &amp;lt;tt&amp;gt;cmake&amp;lt;/tt&amp;gt; command&lt;br /&gt;
*when kdewin32 is not found, try adding the cmake parameter (with YOUR path)&amp;lt;tt&amp;gt;-DGNUWIN32_DIR=c:/gnuwin32&amp;lt;/tt&amp;gt;&lt;br /&gt;
*don't use a cygwin or mingw shell, you will get errors because these shells use UNIX path names&lt;br /&gt;
*you could restart the configure process by deleting CMakeCache.txt&lt;br /&gt;
*you could test for only one library by deleting the assignment in CMakeCache.txt&lt;br /&gt;
*ask for more help on [https://mail.kde.org/mailman/listinfo/kde-buildsystem kde-buildsystem@kde.org] mailing list&lt;br /&gt;
*whenever you update your checkout DON'T forget to rebuild '''AND''' reinstall kdewin32.lib&lt;br /&gt;
&lt;br /&gt;
== Going further: kdepimlibs ==&lt;br /&gt;
'''kdepimlibs''' are needed by kdebase or other modules like koffice. &lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kdepimlibs require:&lt;br /&gt;
*[http://boost.org/ boost libraries]. Download the tarball. As boost is consisted of headers only, unpack the tarball and copy &amp;lt;tt&amp;gt;boost&amp;lt;/tt&amp;gt; subdirectory to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;. Then add use &amp;lt;tt&amp;gt;set BOOST_ROOT=%KDEDIR%\include&amp;lt;/tt&amp;gt; (you may want to add it to your &amp;lt;tt&amp;gt;environment.bat&amp;lt;/tt&amp;gt; file as well).&lt;br /&gt;
*[http://www.gpg4win.org/ gpgme] libraries, needed to provide GNU Privacy Guard support in KDE PIM applications&lt;br /&gt;
*(really optional for now) [http://www.openldap.org OpenLDAP]: LDAP (Lightweight Directory Access Protocol) libraries Needed to provide LDAP functionality in KDE&lt;br /&gt;
*(really optional for now) [http://asg.web.cmu.edu/sasl/sasl-library.html cyrus-sasl]: Cyrus SASL API needed to support authentication of logins&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
Check out the sources, make another build directory and build: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd {KDE_SOURCE_DIR}\trunk\KDE&lt;br /&gt;
svn up kdepimlibs&lt;br /&gt;
mkdir kdepimlibs-build&lt;br /&gt;
cd kdelibs-build&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%KDEDIRS% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G&amp;quot;NMake Makefiles&amp;quot; ..\kdepimlibs&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or use Visual Studio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Debug\&lt;br /&gt;
 -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\kdepimlibs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use -G &amp;quot;Visual Studio 7 .NET 2003&amp;quot; for the older compiler)&lt;br /&gt;
&lt;br /&gt;
In the latter case &amp;lt;tt&amp;gt;kdepimlibs.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. '''Tip:''' to do this from command line, type:&lt;br /&gt;
&lt;br /&gt;
 devenv /build Debug /project INSTALL kdepimlibs.sln&lt;br /&gt;
 devenv /build Release /project INSTALL kdepimlibs.sln&lt;br /&gt;
&lt;br /&gt;
The devenv command is not available in the Express Edition.&lt;br /&gt;
&lt;br /&gt;
== Going further: kofficelibs ==&lt;br /&gt;
''(work in progress, to be moved to KOffice wiki)''&lt;br /&gt;
&lt;br /&gt;
'''kofficelibs''' are needed for apps like KWord or Kexi.&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
kofficelibs require:&lt;br /&gt;
*[http://www.littlecms.com Little cms] library. Download the newest lcms-1.??.zip from [http://www.littlecms.com/downloads.htm] and uncompress. To build it with msvc, go to &amp;lt;tt&amp;gt;Projects&amp;lt;/tt&amp;gt; subdir and choose a subdir for your compiler (i.e. Vc7 or Vc2005). &lt;br /&gt;
*#Then you will see &amp;lt;tt&amp;gt;lcms.sln&amp;lt;/tt&amp;gt; solution file - you can click it to open in the msvc IDE. But first, you need to fix some paths in the project files. You probably have &amp;lt;tt&amp;gt;%KDEDIR%\lib\jpeg.lib&amp;lt;/tt&amp;gt;, not libjpeg.lib, so edit &amp;lt;tt&amp;gt;tifficc.vcproj&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tiffdiff.vcproj&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jpegicc.vcproj&amp;lt;/tt&amp;gt; and change libjpeg.lib to jpeg.lib in &amp;lt;tt&amp;gt;AdditionalDependencies&amp;lt;/tt&amp;gt; variable. Then add full path to your &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt; directory (where tiffio.h resides) in AdditionalIncludeDirectories variable, (note: do it by expanding KDEDIR environment variable, i.e the result should be like: &amp;lt;pre&amp;gt;AdditionalIncludeDirectories=&amp;quot;..\..\include;f:\kde4\include&amp;quot;&amp;lt;/pre&amp;gt; Then add &amp;lt;tt&amp;gt;AdditionalLibraryDirectories=&amp;quot;c:\your\path\to\kde\lib&amp;quot;&amp;lt;/tt&amp;gt; line just after every two occurences of &amp;lt;tt&amp;gt;AdditionalIncludeDirectories=&amp;lt;/tt&amp;gt;. All the changes are presented in [[Getting_Started/Build/KDE4/Windows/Littlecms.patch|this pseudo-patch]] (change f:\ paths to your KDEDIR location!).&lt;br /&gt;
*#You probbaly want to skip building Python wrapper, so click on Build-&amp;gt;Configuration Manager menu command and check off &amp;quot;Build&amp;quot; in &amp;quot;Python&amp;quot; line.&lt;br /&gt;
*#Select &amp;quot;Build Solution&amp;quot; menu command. After successful build, you should notice:&amp;lt;tt&amp;gt;Build: 9 succeeded, 0 failed, 1 skipped&amp;lt;/tt&amp;gt;&lt;br /&gt;
*#To also build Release versions of the binaries, in the ''Configuration Manager'', change active configuration to ''Release'' and repeat steps 1-3.&lt;br /&gt;
*# Copy the compiled binaries. From your &amp;lt;tt&amp;gt;lcms-1.??\Lib\Ms&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.lib&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\lib&amp;lt;/tt&amp;gt;. From &amp;lt;tt&amp;gt;lcms-1.??\bin&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.dll&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.exe&amp;lt;/tt&amp;gt; files to &amp;lt;tt&amp;gt;%KDEDIR%\bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Copy lcms headers: from &amp;lt;tt&amp;gt;lcms-1.??\include&amp;lt;/tt&amp;gt; copy &amp;lt;tt&amp;gt;*.h&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;%KDEDIR%\include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*#Later when you will run cmake for kofficelibs, you get message like &amp;lt;tt&amp;gt;-- Found lcms version 1.16, F:/kde4/lib/lcms.lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building app modules using prebuilt kdelibs ==&lt;br /&gt;
Install all devel packages using kdewin-installer as usual, + msvc2005. Then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdesdk&lt;br /&gt;
mkdir kdesdk\build&lt;br /&gt;
cd kdesdk\build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you have to add some paths to your PATH environment variable simliar to this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set PATH=%QTDIR%\bin;%PATH%;%INSTALL_PATH%\lib;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You may need to setup msvc environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Build command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_PATH% -DCMAKE_BUILD_TYPE=Release -G&amp;quot;NMake Makefiles&amp;quot; ..&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful links==&lt;br /&gt;
*[[Getting_Started/Build/KDE4/Windows/3rd-party_libraries|List of libraries that are needed to build KDE on windows]] (most of these are already installed by the kde-installer) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Kross/Introduction</id>
		<title>Development/Tutorials/Kross/Introduction</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Kross/Introduction"/>
				<updated>2009-03-07T17:45:51Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Interpreter plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The [http://kross.dipe.org Kross] scripting framework provides full [http://www.python.org/ Python], [http://www.ruby-lang.org/ Ruby] and [http://xmelegance.org/kjsembed KDE JavaScript] scripting support. The goal was&lt;br /&gt;
to limit the work needed on applications to have them fully scriptable and to provide a modular way to transparently integrate additional interpreters and in that way extend your application with a new scripting-backend without any new line of code and even without any recompile. To achieve this internally Qt's introspection-functionality like signals, slots, properties, enums, QVariant, QObject, QMetaObject, QMetaType, etc. are used to deal with functionality at runtime.&lt;br /&gt;
&lt;br /&gt;
===What Kross is===&lt;br /&gt;
Kross is a modular scripting framework that eases embedding of scripting interpreters like Python, Ruby and JavaScript transparently into native applications to bridge the static and dynamic worlds together.&lt;br /&gt;
&lt;br /&gt;
Scripting interpreters are plugins that are loaded dynamically on demand at runtime by the Kross framework. The application that uses Kross to provide scripting functionality to the user does not need to know anything about the interpreter, itself or any other backend-details. All the application needs to know is that there exists scripting code that should be executed. Kross will then take care of it.&lt;br /&gt;
&lt;br /&gt;
===What Kross is not===&lt;br /&gt;
Kross does not implement its own scripting language, rather, it provides access to already existing solutions. Kross does not implement a complete Toolkit-binding, rather, it provides access to already existing solutions like PyQt/PyKDE or TkInter for Python or Korundum/QtRuby for Ruby. Kross does not auto-generate code, it is not needed to maintain any configuration files, and it does not come with yet another bindings-API. All it does is to connect things transparently together and to offer optional access to already existing technologies.&lt;br /&gt;
&lt;br /&gt;
===Reuse and choice are the goals===&lt;br /&gt;
There exists a wide range of solutions to deal with scripting. Programming languages like Python have enjoyed years of evolution and a large community around them with 3rd-party modules for nearly everything. The same goes for a lot of other languages where there sometimes exists a special function that is only available to a particular language, and where each language comes with its own way of doing things. Each user may have their own preference for what scripting language they like to use, and over time, may have acquired skills in some specific areas.&lt;br /&gt;
&lt;br /&gt;
Rather than limiting users to only one specific language with its own way of doing things, Kross offers a flexible way of supporting multiple programming languages without additional code and maintenance work, at the application level. Kross allows the user to choose what they like and know the most, and it minimizes the entry-barrier to get his things done and to be able to contribute to one's own solutions significantly.&lt;br /&gt;
&lt;br /&gt;
===Supported interpreters===&lt;br /&gt;
As of today Python, Ruby and JavaScript are supported. While all of them are passing the unittests, current state is, that Python is the most complete one followed by Ruby which is near the same state and finally JavaScript which needs some more tweaks to be as rock-stable as the other both implementations.&lt;br /&gt;
&lt;br /&gt;
Work on progress are krossjava (thanks to google for supporting this plugin within the Google Summer of Code 2007) that implements support for the Java Virtual Machine and krossfalcon that implements support for The Falcon Programming Language.&lt;br /&gt;
&lt;br /&gt;
For sure any interpreter-plugin you may like to implement is very welcome. At the end the open source world is about choices :)&lt;br /&gt;
&lt;br /&gt;
===Advantage of Kross over other solutions===&lt;br /&gt;
* '''Scripting interpreter independent.''' Kross does not implement an interpreter, it provides access to already existing interpreters. You don't limit your users to a particular scripting language, each user is free to decide which scripting language is best suited.&lt;br /&gt;
* '''Real embedding.''' Rather then communicating with scripting backends e.g. over stdin/stdout or D-Bus Kross does come with plugins that really embed the interpreters and deal with them on the native C/C++ code level to gain optimal performance and flexibility.&lt;br /&gt;
* '''Kross is fast.''' Kross had a bit of luck to be adopted by Krita so early since one of the top-priorities Krita had on a scripting backend was performance. During the years we managed to increase the speed to a level where it's hard to see a difference to native in C/C++ written code.&lt;br /&gt;
* '''Kross is platform-independent.''' From the beginning Kross was designed with platform-independence in mind. This is the result of the origins of Kross - it started as Kexi plugin, and Kexi itself runs at least on Linux, Windows and Mac since it's early days.&lt;br /&gt;
* '''Kross is stable and well proven.''' Before Kross finally landed in kdelibs it was in use in KOffice for 3 major releases and was thus &amp;quot;tested&amp;quot; by a wide range of users worldwide.&lt;br /&gt;
* '''A lot of documentation, scripts and applications are using Kross already today.''' The latter guarantees that Kross offers the solution for many scenarios.&lt;br /&gt;
* '''Kross can be easily extended with a new scripting interpreter.''' There are no changes needed to the applications. So, whatever hype we are able to see in the next few years, we are ready to fullfit the possible user-requests for them without much pain.&lt;br /&gt;
* '''Kross benefits from applications.''' The synergy-effect if multiple applications are sharing the same interpreter plugin implementations ensures that bugs are discovered and fixed as soon as possible. Also each app is able to profit if someone writes for example a plugin for the LUA-interpreter each app is able to use the new backend without any recompile.&lt;br /&gt;
* '''Kross reuses existing technologies as much as possible.''' There is no need for code-generation at compile time and no new &amp;quot;bindings API&amp;quot; is introduced since we are reusing the Qt Meta-Object System. You are able to throw in a QObject and a script is able to connect with the signals, call slots as there are functions, access enumerations, get/set properties or pass QObject/QWidget instances around as there are classes.&lt;br /&gt;
* '''The interpreter backend is very flexible.''' Each interpreter's plugin is able to decide on its own how to implement the bridging functionality. If you like for example to have it more &amp;quot;pythonic&amp;quot; by using the decorators introduced in Python 2.4, you are free to implement it and each app that uses Kross will profit by beeing able to use such decorators from now on.&lt;br /&gt;
* '''Kross will stay backward-compatible.''' Kross is part of kdelibs and thus follows strict policies to provide backward-compatibility at least during the lifetime of KDE4.&lt;br /&gt;
&lt;br /&gt;
==The Interpreter plugins==&lt;br /&gt;
&lt;br /&gt;
Kross offers a ''plugin interface'' to integrate interpreter backends like Python, Ruby and KDE-Javascript. They are loaded on demand at runtime. Neither the application nor Kross needs to know any details about the backends. This clear separation between the application and scripting details enables at the one hand, to deal with scripting at an abstract level without being bound to only one backend, and at the other hand makes it easy to integrate scripting into an already existing application.&lt;br /&gt;
&lt;br /&gt;
Each interpreter plugin needs to implement two abstract classes;&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] class is a singleton controlled by the     [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/manager.h?view=markup Kross::Manager] and could be used to setup the interpreter or do other things to share functionality between instances of the Script class.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] class handles exactly one script instance. An application is able to deal with multiple scripts at the same time where each of them has it's own instance of the Kross::Script class controlled by an instance of the more abstract [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/action.h?view=markup Kross::Action] class.&lt;br /&gt;
&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/ Python plugin] implements access to the [http://www.python.org/ Python] scripting language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.py?view=markup unittest.py] Python script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other scripts are...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testkross.py?view=markup testkross.py] Python script file demonstrates how to use Kross to execute some JavaScript code within a python script.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguitk.py?view=markup testguitk.py] Python script file that creates and displays a modal dialog using the TkInter GUI-toolkit.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguiqt.py?view=markup testguiqt.py] Python script file shows how to use PyQt while the [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguiform.py?view=markup testguiform.py] uses the Kross Form module.&lt;br /&gt;
&lt;br /&gt;
The krosspython plugin consists of...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythoninterpreter.h?view=markup Kross::PythonInterpreter] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] for the Python interpreter backend and implements the createScript factory method to create [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] instances.&lt;br /&gt;
*  The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] for the Python backend to provide the functionality to execute Python code within a script-container.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonmodule.h?view=markup Kross::PythonModule] class is the __main__ Python environment used as global object namespace. This module is shared between the different [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] instances which run in there own module namespace. The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonmodule.h?view=markup Kross::PythonModule] also spends access to the the whole Kross functionality and manages all the @a Kross::PythonExtension modules.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonextension.h?view=markup Kross::PythonExtension] class implements a Py::Object to wrap a QObject instance into the world of Python.&lt;br /&gt;
* Within [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonvariant.h?view=markup Kross::PythonVariant] the Kross::PythonType helper class is used to cast between QVariant and Py::Object values while the Kross::PythonMetaTypeFactory helper class is used as factory within [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonextension.h?view=markup Kross::PythonExtension] to translate an argument into a Kross::MetaType needed for QGenericArgument's data pointer.&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/ Ruby plugin] implements access to the [http://www.ruby-lang.org/ Ruby] scripting language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.rb?view=markup unittest.rb] Ruby script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The krossruby plugin consists of...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyinterpreter.h?view=markup Kross::RubyInterpreter] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] for the Ruby interpreter backend and provides with the createScript a factory method to create [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] instances.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] for the Ruby backend to provide the functionality to execute Ruby code within a script-container.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubymodule.h?view=markup Kross::RubyModule] class is the __main__ Ruby environment used as global object namespace. This module is shared between the different [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] instances which run in there own module namespace. The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubymodule.h?view=markup Kross::RubyModule] also spends access to the the whole Kross functionality and manages all the @a Kross::RubyExtension modules.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyextension.h?view=markup Kross::RubyExtension] class implements a Ruby VALUE object to wrap a QObject instance into the world of Ruby.&lt;br /&gt;
* Within [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyvariant.h?view=markup Kross::RubyVariant] the Kross::RubyType helper class is used to cast between QVariant and Ruby VALUE values while the Kross::RubyMetaTypeFactory helper class is used as factory within [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyextension.h?view=markup Kross::RubyExtension] to translate an argument into a Kross::MetaType needed for QGenericArgument's data pointer.&lt;br /&gt;
&lt;br /&gt;
===JavaScript===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/kjs KDE JavaScript plugin] uses the in kdelibs4 included Kjs and KjsEmbed4 frameworks to provide access to the JavaScript language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.js?view=markup unittest.js] KDE-JavaScript script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For details about KDE-JavaScript see...&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjs/README?view=markup Kjs readme]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjs/ Kjs svn]&lt;br /&gt;
* [http://xmelegance.org/kjsembed KjsEmbed home]&lt;br /&gt;
* [https://mail.kde.org/mailman/listinfo/kjsembed KjsEmbed mailinglist]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjsembed/ KjsEmbed svn]&lt;br /&gt;
&lt;br /&gt;
===Java===&lt;br /&gt;
&lt;br /&gt;
The [[Projects/Summer_of_Code/2007/Projects/KrossJava|Google Summer of Code 2007]] did provide us the [http://websvn.kde.org/trunk/KDE/kdebindings/java/krossjava/ krossjava] backend for Java :-)&lt;br /&gt;
&lt;br /&gt;
===Falcon===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/playground/bindings/krossfalcon/ krossfalcon] plugin does implement access to [http://www.falconpl.org The Falcon Programming Language].&lt;br /&gt;
&lt;br /&gt;
==The Module plugins==&lt;br /&gt;
&lt;br /&gt;
Modules are plugins loaded on demand at runtime to provide additional functionality. They only provide a factory to create and return a QObject instance that is then exposed to the scripting backend.&lt;br /&gt;
&lt;br /&gt;
Since Qt's introspection functionality is used, we are able to throw in just {{qt|QObject}}'s and have them act as classes/objects within a scripting backend. Slots are membermethods while properties and enumerations are membervariables. If your application also likes to offer [http://hal.freedesktop.org/wiki/Software/dbus D-Bus] support it may be an idea to reuse the {{qt|QDBusAbstractAdaptor}} implementations your application has also for scripting, like for example [[Development/Tutorials/KSpread_Scripting|KSpread]] did.&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the following code that implements the MyObject class which inherits from QObject;&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
class MyObject : public QObject {&lt;br /&gt;
  Q_OBJECT&lt;br /&gt;
  Q_PROPERTY(QString name READ name WRITE setName)&lt;br /&gt;
  public:&lt;br /&gt;
    MyObject(QObject* parent = 0) : QObject(parent) {}&lt;br /&gt;
    virtual ~MyObject() {}&lt;br /&gt;
    QString name() const { return objectName(); }&lt;br /&gt;
    void setName(const QString&amp;amp; name) {&lt;br /&gt;
      return setObjectName(name);&lt;br /&gt;
    }&lt;br /&gt;
  public slots:&lt;br /&gt;
    QObject* create(const QString&amp;amp; name,&lt;br /&gt;
                    QObject* parent=0) {&lt;br /&gt;
      MyObject* obj = new MyObject(parent);&lt;br /&gt;
      obj-&amp;gt;setObjectName(name);&lt;br /&gt;
      return obj;&lt;br /&gt;
    }&lt;br /&gt;
    QObject* parent() const { return QObject::parent(); }&lt;br /&gt;
    void setParent(QObject* parent) {&lt;br /&gt;
      QObject::setParent(parent);&lt;br /&gt;
      emit parentChanged(); &lt;br /&gt;
    }&lt;br /&gt;
  signals:&lt;br /&gt;
    void parentChanged();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
extern &amp;quot;C&amp;quot; {&lt;br /&gt;
  KDE_EXPORT QObject* krossmodule() {&lt;br /&gt;
    return new MyObject();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
At the bottom the krossmodule() function will be called by Kross and returns an instance of MyObject that is then exposed to the scripting backend.&lt;br /&gt;
&lt;br /&gt;
Then we just need to have our myobject.h and myobject.cpp files, filled with the content above, defined in the CMakeLists.txt file. The library needs to be named &amp;quot;krossmodule...&amp;quot; where the &amp;quot;...&amp;quot; is then the name the module is accessible as. For our example we use &amp;quot;krossmodulemyobjectmod&amp;quot; and therefore we are able to access the module if installed as &amp;quot;myobjectmod&amp;quot;. The example does not depend on Kross, so you may like to replace ${KROSS_INCLUDES} with whatever else your module depends on.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include_directories(${CMAKE_SOURCE_DIR}&lt;br /&gt;
  ${KROSS_INCLUDES})&lt;br /&gt;
set(krossmodulemyobjectmod_PART_SRCS&lt;br /&gt;
  myobject.cpp)&lt;br /&gt;
kde4_add_plugin(krossmodulemyobjectmod&lt;br /&gt;
  ${krossmodulemyobjectmod_PART_SRCS})&lt;br /&gt;
target_link_libraries(krossmodulemyobjectmod&lt;br /&gt;
  ${KDE4_KDECORE_LIBS} ${KDE4_KROSSCORE_LIBS})&lt;br /&gt;
install(TARGETS krossmodulemyobjectmod&lt;br /&gt;
  DESTINATION ${PLUGIN_INSTALL_DIR})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Python sample code accesses then the module at runtime and uses the QObject, calls it's slots and properties and connects a signal with a python function (e.g. save as file named &amp;quot;myobjecttest.py&amp;quot; and execute with &amp;quot;kross ./myobjecttest.py&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
m = Kross.module(&amp;quot;myobjectmod&amp;quot;)&lt;br /&gt;
m.name = &amp;quot;MyObjectModuleName&amp;quot;&lt;br /&gt;
obj1 = m.create(&amp;quot;OtherObjectName&amp;quot;)&lt;br /&gt;
def myCallbackFunc(args):&lt;br /&gt;
    print &amp;quot;The parent of obj1 changed&amp;quot;&lt;br /&gt;
obj1.connect(&amp;quot;parentChanged()&amp;quot;,myCallbackFunc)&lt;br /&gt;
obj1.setParent(m)&lt;br /&gt;
print &amp;quot;%s %s&amp;quot; % (obj1.name,obj1.parent().name)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manager, GuiClient, Action==&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/manager.h?view=markup Kross::Manager] class is a singleton that provides access to the interpreters, to actions and to the modules. The Kross::Manager is available within scripting code as module named &amp;quot;Kross&amp;quot;. Following Python script uses the Kross module to create a new Kross::Action instance, fills it with JavaScript code and executes that JavaScript code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
a = Kross.action(&amp;quot;MyKjsScript&amp;quot;)&lt;br /&gt;
a.setInterpreter(&amp;quot;javascript&amp;quot;)&lt;br /&gt;
a.setCode(&amp;quot;println(\&amp;quot;Hello world from Kjs\&amp;quot;);&amp;quot;)&lt;br /&gt;
a.trigger()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/guiclient.h?view=markup Kross::GuiClient] class implements KXMLGUIClient to provide GUI functionality, handling of XML configuration files on a more abstract level and offers some predefined actions that could be optionally used in your application.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/action.h?view=markup Kross::Action] class offers an abstract container to deal with scripts like a single standalone scriptfile. Each action holds a reference to the by the matching [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] instance created by [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] instance. Following Python script accesses the Kross module and the self variable which is our Kross::Action instance that provides the context for the running Python script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
print &amp;quot;objectName=%s&amp;quot; % Kross.objectName()&lt;br /&gt;
print &amp;quot;interpreters=%s&amp;quot; % Kross.interpreters()&lt;br /&gt;
print &amp;quot;objectName=%s&amp;quot; % self.objectName()&lt;br /&gt;
print &amp;quot;text=%s&amp;quot; % self.text&lt;br /&gt;
print &amp;quot;enabled=%s&amp;quot; % self.enabled&lt;br /&gt;
print &amp;quot;currentPath=%s&amp;quot; % self.currentPath()&lt;br /&gt;
print &amp;quot;interpreter=%s&amp;quot; % self.interpreter()&lt;br /&gt;
print &amp;quot;description=%s&amp;quot; % self.description()&lt;br /&gt;
print &amp;quot;code=%s&amp;quot; % self.code()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Bus and Kross==&lt;br /&gt;
&lt;br /&gt;
With the [http://doc.trolltech.com/4.2/qtdbus.html QtDBus module] Qt provides a library that a Qt/KDE application is able to use to make Inter-Process Communication using the [http://dbus.freedesktop.org D-BUS protocol].&lt;br /&gt;
&lt;br /&gt;
The QtDBus module uses the Qt Signals and Slots mechanism. Applications that like to provide parts of their functionality to the D-Bus world are able to do so by implementing classes that inherit from the {{qt|QDBusAbstractAdaptor}} class.&lt;br /&gt;
&lt;br /&gt;
Kross is able to reuse such by an application provided bindings. So, once your application supports D-Bus, Kross is able to reuse those already existing code and offers transparent access to the scripting-backends to them. How does this differ from e.g. the python-dbus package? Well, first method-calls don't go through the dbus-socket and then it's not dbus-related at all except, that we are able to reuse what your application offers anyway: a clean interface to the outside world. But that's not all, we are not limited to what's possible with D-Bus. We are also able to exchange instance-pointers to QObject or QWidget instances.&lt;br /&gt;
&lt;br /&gt;
For an example you may like to take a look at how it was done in the KSpread [http://websvn.kde.org/trunk/koffice/kspread/plugins/scripting/ScriptingModule.cpp?view=markup ScriptingModule] class.&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Kross/Introduction</id>
		<title>Development/Tutorials/Kross/Introduction</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Kross/Introduction"/>
				<updated>2009-03-07T17:29:18Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* What Kross is */ grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The [http://kross.dipe.org Kross] scripting framework provides full [http://www.python.org/ Python], [http://www.ruby-lang.org/ Ruby] and [http://xmelegance.org/kjsembed KDE JavaScript] scripting support. The goal was&lt;br /&gt;
to limit the work needed on applications to have them fully scriptable and to provide a modular way to transparently integrate additional interpreters and in that way extend your application with a new scripting-backend without any new line of code and even without any recompile. To achieve this internally Qt's introspection-functionality like signals, slots, properties, enums, QVariant, QObject, QMetaObject, QMetaType, etc. are used to deal with functionality at runtime.&lt;br /&gt;
&lt;br /&gt;
===What Kross is===&lt;br /&gt;
Kross is a modular scripting framework that eases embedding of scripting interpreters like Python, Ruby and JavaScript transparently into native applications to bridge the static and dynamic worlds together.&lt;br /&gt;
&lt;br /&gt;
Scripting interpreters are plugins that are loaded dynamically on demand at runtime by the Kross framework. The application that uses Kross to provide scripting functionality to the user does not need to know anything about the interpreter, itself or any other backend-details. All the application needs to know is that there exists scripting code that should be executed. Kross will then take care of it.&lt;br /&gt;
&lt;br /&gt;
===What Kross is not===&lt;br /&gt;
Kross does not implement its own scripting language, rather, it provides access to already existing solutions. Kross does not implement a complete Toolkit-binding, rather, it provides access to already existing solutions like PyQt/PyKDE or TkInter for Python or Korundum/QtRuby for Ruby. Kross does not auto-generate code, it is not needed to maintain any configuration files, and it does not come with yet another bindings-API. All it does is to connect things transparently together and to offer optional access to already existing technologies.&lt;br /&gt;
&lt;br /&gt;
===Reuse and choice are the goals===&lt;br /&gt;
There exists a wide range of solutions to deal with scripting. Programming languages like Python have enjoyed years of evolution and a large community around them with 3rd-party modules for nearly everything. The same goes for a lot of other languages where there sometimes exists a special function that is only available to a particular language, and where each language comes with its own way of doing things. Each user may have their own preference for what scripting language they like to use, and over time, may have acquired skills in some specific areas.&lt;br /&gt;
&lt;br /&gt;
Rather than limiting users to only one specific language with its own way of doing things, Kross offers a flexible way of supporting multiple programming languages without additional code and maintenance work, at the application level. Kross allows the user to choose what they like and know the most, and it minimizes the entry-barrier to get his things done and to be able to contribute to one's own solutions significantly.&lt;br /&gt;
&lt;br /&gt;
===Supported interpreters===&lt;br /&gt;
As of today Python, Ruby and JavaScript are supported. While all of them are passing the unittests, current state is, that Python is the most complete one followed by Ruby which is near the same state and finally JavaScript which needs some more tweaks to be as rock-stable as the other both implementations.&lt;br /&gt;
&lt;br /&gt;
Work on progress are krossjava (thanks to google for supporting this plugin within the Google Summer of Code 2007) that implements support for the Java Virtual Machine and krossfalcon that implements support for The Falcon Programming Language.&lt;br /&gt;
&lt;br /&gt;
For sure any interpreter-plugin you may like to implement is very welcome. At the end the open source world is about choices :)&lt;br /&gt;
&lt;br /&gt;
===Advantage of Kross over other solutions===&lt;br /&gt;
* '''Scripting interpreter independent.''' Kross does not implement an interpreter, it provides access to already existing interpreters. You don't limit your users to a particular scripting language, each user is free to decide which scripting language is best suited.&lt;br /&gt;
* '''Real embedding.''' Rather then communicating with scripting backends e.g. over stdin/stdout or D-Bus Kross does come with plugins that really embed the interpreters and deal with them on the native C/C++ code level to gain optimal performance and flexibility.&lt;br /&gt;
* '''Kross is fast.''' Kross had a bit of luck to be adopted by Krita so early since one of the top-priorities Krita had on a scripting backend was performance. During the years we managed to increase the speed to a level where it's hard to see a difference to native in C/C++ written code.&lt;br /&gt;
* '''Kross is platform-independent.''' From the beginning Kross was designed with platform-independence in mind. This is the result of the origins of Kross - it started as Kexi plugin, and Kexi itself runs at least on Linux, Windows and Mac since it's early days.&lt;br /&gt;
* '''Kross is stable and well proven.''' Before Kross finally landed in kdelibs it was in use in KOffice for 3 major releases and was thus &amp;quot;tested&amp;quot; by a wide range of users worldwide.&lt;br /&gt;
* '''A lot of documentation, scripts and applications are using Kross already today.''' The latter guarantees that Kross offers the solution for many scenarios.&lt;br /&gt;
* '''Kross can be easily extended with a new scripting interpreter.''' There are no changes needed to the applications. So, whatever hype we are able to see in the next few years, we are ready to fullfit the possible user-requests for them without much pain.&lt;br /&gt;
* '''Kross benefits from applications.''' The synergy-effect if multiple applications are sharing the same interpreter plugin implementations ensures that bugs are discovered and fixed as soon as possible. Also each app is able to profit if someone writes for example a plugin for the LUA-interpreter each app is able to use the new backend without any recompile.&lt;br /&gt;
* '''Kross reuses existing technologies as much as possible.''' There is no need for code-generation at compile time and no new &amp;quot;bindings API&amp;quot; is introduced since we are reusing the Qt Meta-Object System. You are able to throw in a QObject and a script is able to connect with the signals, call slots as there are functions, access enumerations, get/set properties or pass QObject/QWidget instances around as there are classes.&lt;br /&gt;
* '''The interpreter backend is very flexible.''' Each interpreter's plugin is able to decide on its own how to implement the bridging functionality. If you like for example to have it more &amp;quot;pythonic&amp;quot; by using the decorators introduced in Python 2.4, you are free to implement it and each app that uses Kross will profit by beeing able to use such decorators from now on.&lt;br /&gt;
* '''Kross will stay backward-compatible.''' Kross is part of kdelibs and thus follows strict policies to provide backward-compatibility at least during the lifetime of KDE4.&lt;br /&gt;
&lt;br /&gt;
==The Interpreter plugins==&lt;br /&gt;
&lt;br /&gt;
Kross offers a plugin-interface to integrate interpreter backends like Python, Ruby and KDE-Javascript. They are loaded on demand at runtime. Neither the application nor Kross needs to know any details about the backends. This clear separation between the application and scripting details enables at the one hand, to deal with scripting at an abstract level without being bound to only one backend, and at the other hand makes it easy to integrate scripting into an already existing application.&lt;br /&gt;
&lt;br /&gt;
Each interpreter plugin needs to implement two abstract classes;&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] class is a singleton controlled by the     [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/manager.h?view=markup Kross::Manager] and could be used to setup the interpreter or do other things to share functionality between instances of the Script class.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] class handles exactly one script instance. An application is able to deal with multiple scripts at the same time where each of them has it's own instance of the Kross::Script class controlled by an instance of the more abstract [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/action.h?view=markup Kross::Action] class.&lt;br /&gt;
&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/ Python plugin] implements access to the [http://www.python.org/ Python] scripting language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.py?view=markup unittest.py] Python script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other scripts are...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testkross.py?view=markup testkross.py] Python script file demonstrates how to use Kross to execute some JavaScript code within a python script.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguitk.py?view=markup testguitk.py] Python script file that creates and displays a modal dialog using the TkInter GUI-toolkit.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguiqt.py?view=markup testguiqt.py] Python script file shows how to use PyQt while the [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguiform.py?view=markup testguiform.py] uses the Kross Form module.&lt;br /&gt;
&lt;br /&gt;
The krosspython plugin consists of...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythoninterpreter.h?view=markup Kross::PythonInterpreter] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] for the Python interpreter backend and implements the createScript factory method to create [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] instances.&lt;br /&gt;
*  The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] for the Python backend to provide the functionality to execute Python code within a script-container.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonmodule.h?view=markup Kross::PythonModule] class is the __main__ Python environment used as global object namespace. This module is shared between the different [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] instances which run in there own module namespace. The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonmodule.h?view=markup Kross::PythonModule] also spends access to the the whole Kross functionality and manages all the @a Kross::PythonExtension modules.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonextension.h?view=markup Kross::PythonExtension] class implements a Py::Object to wrap a QObject instance into the world of Python.&lt;br /&gt;
* Within [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonvariant.h?view=markup Kross::PythonVariant] the Kross::PythonType helper class is used to cast between QVariant and Py::Object values while the Kross::PythonMetaTypeFactory helper class is used as factory within [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonextension.h?view=markup Kross::PythonExtension] to translate an argument into a Kross::MetaType needed for QGenericArgument's data pointer.&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/ Ruby plugin] implements access to the [http://www.ruby-lang.org/ Ruby] scripting language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.rb?view=markup unittest.rb] Ruby script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The krossruby plugin consists of...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyinterpreter.h?view=markup Kross::RubyInterpreter] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] for the Ruby interpreter backend and provides with the createScript a factory method to create [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] instances.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] for the Ruby backend to provide the functionality to execute Ruby code within a script-container.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubymodule.h?view=markup Kross::RubyModule] class is the __main__ Ruby environment used as global object namespace. This module is shared between the different [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] instances which run in there own module namespace. The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubymodule.h?view=markup Kross::RubyModule] also spends access to the the whole Kross functionality and manages all the @a Kross::RubyExtension modules.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyextension.h?view=markup Kross::RubyExtension] class implements a Ruby VALUE object to wrap a QObject instance into the world of Ruby.&lt;br /&gt;
* Within [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyvariant.h?view=markup Kross::RubyVariant] the Kross::RubyType helper class is used to cast between QVariant and Ruby VALUE values while the Kross::RubyMetaTypeFactory helper class is used as factory within [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyextension.h?view=markup Kross::RubyExtension] to translate an argument into a Kross::MetaType needed for QGenericArgument's data pointer.&lt;br /&gt;
&lt;br /&gt;
===JavaScript===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/kjs KDE JavaScript plugin] uses the in kdelibs4 included Kjs and KjsEmbed4 frameworks to provide access to the JavaScript language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.js?view=markup unittest.js] KDE-JavaScript script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For details about KDE-JavaScript see...&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjs/README?view=markup Kjs readme]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjs/ Kjs svn]&lt;br /&gt;
* [http://xmelegance.org/kjsembed KjsEmbed home]&lt;br /&gt;
* [https://mail.kde.org/mailman/listinfo/kjsembed KjsEmbed mailinglist]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjsembed/ KjsEmbed svn]&lt;br /&gt;
&lt;br /&gt;
===Java===&lt;br /&gt;
&lt;br /&gt;
The [[Projects/Summer_of_Code/2007/Projects/KrossJava|Google Summer of Code 2007]] did provide us the [http://websvn.kde.org/trunk/KDE/kdebindings/java/krossjava/ krossjava] backend for Java :-)&lt;br /&gt;
&lt;br /&gt;
===Falcon===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/playground/bindings/krossfalcon/ krossfalcon] plugin does implement access to [http://www.falconpl.org The Falcon Programming Language].&lt;br /&gt;
&lt;br /&gt;
==The Module plugins==&lt;br /&gt;
&lt;br /&gt;
Modules are plugins loaded on demand at runtime to provide additional functionality. They only provide a factory to create and return a QObject instance that is then exposed to the scripting backend.&lt;br /&gt;
&lt;br /&gt;
Since Qt's introspection functionality is used, we are able to throw in just {{qt|QObject}}'s and have them act as classes/objects within a scripting backend. Slots are membermethods while properties and enumerations are membervariables. If your application also likes to offer [http://hal.freedesktop.org/wiki/Software/dbus D-Bus] support it may be an idea to reuse the {{qt|QDBusAbstractAdaptor}} implementations your application has also for scripting, like for example [[Development/Tutorials/KSpread_Scripting|KSpread]] did.&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the following code that implements the MyObject class which inherits from QObject;&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
class MyObject : public QObject {&lt;br /&gt;
  Q_OBJECT&lt;br /&gt;
  Q_PROPERTY(QString name READ name WRITE setName)&lt;br /&gt;
  public:&lt;br /&gt;
    MyObject(QObject* parent = 0) : QObject(parent) {}&lt;br /&gt;
    virtual ~MyObject() {}&lt;br /&gt;
    QString name() const { return objectName(); }&lt;br /&gt;
    void setName(const QString&amp;amp; name) {&lt;br /&gt;
      return setObjectName(name);&lt;br /&gt;
    }&lt;br /&gt;
  public slots:&lt;br /&gt;
    QObject* create(const QString&amp;amp; name,&lt;br /&gt;
                    QObject* parent=0) {&lt;br /&gt;
      MyObject* obj = new MyObject(parent);&lt;br /&gt;
      obj-&amp;gt;setObjectName(name);&lt;br /&gt;
      return obj;&lt;br /&gt;
    }&lt;br /&gt;
    QObject* parent() const { return QObject::parent(); }&lt;br /&gt;
    void setParent(QObject* parent) {&lt;br /&gt;
      QObject::setParent(parent);&lt;br /&gt;
      emit parentChanged(); &lt;br /&gt;
    }&lt;br /&gt;
  signals:&lt;br /&gt;
    void parentChanged();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
extern &amp;quot;C&amp;quot; {&lt;br /&gt;
  KDE_EXPORT QObject* krossmodule() {&lt;br /&gt;
    return new MyObject();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
At the bottom the krossmodule() function will be called by Kross and returns an instance of MyObject that is then exposed to the scripting backend.&lt;br /&gt;
&lt;br /&gt;
Then we just need to have our myobject.h and myobject.cpp files, filled with the content above, defined in the CMakeLists.txt file. The library needs to be named &amp;quot;krossmodule...&amp;quot; where the &amp;quot;...&amp;quot; is then the name the module is accessible as. For our example we use &amp;quot;krossmodulemyobjectmod&amp;quot; and therefore we are able to access the module if installed as &amp;quot;myobjectmod&amp;quot;. The example does not depend on Kross, so you may like to replace ${KROSS_INCLUDES} with whatever else your module depends on.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include_directories(${CMAKE_SOURCE_DIR}&lt;br /&gt;
  ${KROSS_INCLUDES})&lt;br /&gt;
set(krossmodulemyobjectmod_PART_SRCS&lt;br /&gt;
  myobject.cpp)&lt;br /&gt;
kde4_add_plugin(krossmodulemyobjectmod&lt;br /&gt;
  ${krossmodulemyobjectmod_PART_SRCS})&lt;br /&gt;
target_link_libraries(krossmodulemyobjectmod&lt;br /&gt;
  ${KDE4_KDECORE_LIBS} ${KDE4_KROSSCORE_LIBS})&lt;br /&gt;
install(TARGETS krossmodulemyobjectmod&lt;br /&gt;
  DESTINATION ${PLUGIN_INSTALL_DIR})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Python sample code accesses then the module at runtime and uses the QObject, calls it's slots and properties and connects a signal with a python function (e.g. save as file named &amp;quot;myobjecttest.py&amp;quot; and execute with &amp;quot;kross ./myobjecttest.py&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
m = Kross.module(&amp;quot;myobjectmod&amp;quot;)&lt;br /&gt;
m.name = &amp;quot;MyObjectModuleName&amp;quot;&lt;br /&gt;
obj1 = m.create(&amp;quot;OtherObjectName&amp;quot;)&lt;br /&gt;
def myCallbackFunc(args):&lt;br /&gt;
    print &amp;quot;The parent of obj1 changed&amp;quot;&lt;br /&gt;
obj1.connect(&amp;quot;parentChanged()&amp;quot;,myCallbackFunc)&lt;br /&gt;
obj1.setParent(m)&lt;br /&gt;
print &amp;quot;%s %s&amp;quot; % (obj1.name,obj1.parent().name)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manager, GuiClient, Action==&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/manager.h?view=markup Kross::Manager] class is a singleton that provides access to the interpreters, to actions and to the modules. The Kross::Manager is available within scripting code as module named &amp;quot;Kross&amp;quot;. Following Python script uses the Kross module to create a new Kross::Action instance, fills it with JavaScript code and executes that JavaScript code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
a = Kross.action(&amp;quot;MyKjsScript&amp;quot;)&lt;br /&gt;
a.setInterpreter(&amp;quot;javascript&amp;quot;)&lt;br /&gt;
a.setCode(&amp;quot;println(\&amp;quot;Hello world from Kjs\&amp;quot;);&amp;quot;)&lt;br /&gt;
a.trigger()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/guiclient.h?view=markup Kross::GuiClient] class implements KXMLGUIClient to provide GUI functionality, handling of XML configuration files on a more abstract level and offers some predefined actions that could be optionally used in your application.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/action.h?view=markup Kross::Action] class offers an abstract container to deal with scripts like a single standalone scriptfile. Each action holds a reference to the by the matching [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] instance created by [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] instance. Following Python script accesses the Kross module and the self variable which is our Kross::Action instance that provides the context for the running Python script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
print &amp;quot;objectName=%s&amp;quot; % Kross.objectName()&lt;br /&gt;
print &amp;quot;interpreters=%s&amp;quot; % Kross.interpreters()&lt;br /&gt;
print &amp;quot;objectName=%s&amp;quot; % self.objectName()&lt;br /&gt;
print &amp;quot;text=%s&amp;quot; % self.text&lt;br /&gt;
print &amp;quot;enabled=%s&amp;quot; % self.enabled&lt;br /&gt;
print &amp;quot;currentPath=%s&amp;quot; % self.currentPath()&lt;br /&gt;
print &amp;quot;interpreter=%s&amp;quot; % self.interpreter()&lt;br /&gt;
print &amp;quot;description=%s&amp;quot; % self.description()&lt;br /&gt;
print &amp;quot;code=%s&amp;quot; % self.code()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Bus and Kross==&lt;br /&gt;
&lt;br /&gt;
With the [http://doc.trolltech.com/4.2/qtdbus.html QtDBus module] Qt provides a library that a Qt/KDE application is able to use to make Inter-Process Communication using the [http://dbus.freedesktop.org D-BUS protocol].&lt;br /&gt;
&lt;br /&gt;
The QtDBus module uses the Qt Signals and Slots mechanism. Applications that like to provide parts of their functionality to the D-Bus world are able to do so by implementing classes that inherit from the {{qt|QDBusAbstractAdaptor}} class.&lt;br /&gt;
&lt;br /&gt;
Kross is able to reuse such by an application provided bindings. So, once your application supports D-Bus, Kross is able to reuse those already existing code and offers transparent access to the scripting-backends to them. How does this differ from e.g. the python-dbus package? Well, first method-calls don't go through the dbus-socket and then it's not dbus-related at all except, that we are able to reuse what your application offers anyway: a clean interface to the outside world. But that's not all, we are not limited to what's possible with D-Bus. We are also able to exchange instance-pointers to QObject or QWidget instances.&lt;br /&gt;
&lt;br /&gt;
For an example you may like to take a look at how it was done in the KSpread [http://websvn.kde.org/trunk/koffice/kspread/plugins/scripting/ScriptingModule.cpp?view=markup ScriptingModule] class.&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KWord_Scripting</id>
		<title>Development/Tutorials/KWord Scripting</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KWord_Scripting"/>
				<updated>2009-03-07T17:23:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Intro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Intro==&lt;br /&gt;
&lt;br /&gt;
KWord uses [[Development/Languages/Kross|Kross]] to provide scripting with [http://www.python.org/ Python], [http://www.ruby-lang.org/ Ruby] and [http://xmelegance.org/kjsembed KDE JavaScript].&lt;br /&gt;
&lt;br /&gt;
===The Scripting Plugin===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/ KWord Scripting Plugin] implements a plugin to dynamic access the scripting functionality from within KWord.&lt;br /&gt;
&lt;br /&gt;
* The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/KWScriptingPart.h?view=markup KWScriptingPart] class implements a KPart component to integrate scripting as plugin into KWord.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/Module.h?view=markup Scripting::Module] class enables access to the KWord functionality from within the scripting backends.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/FrameSet.h?view=markup FrameSet] and [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/Frame.h?view=markup Frame] classes are holding the content that is displayed on screen.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/TextDocument.h?view=markup TextDocument] class represents a QTextDocument within the Scribe text-engine KWord uses to enable editing of text content. The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/TextCursor.h?view=markup TextCursor] implements a control structure for the successive traversal of content within such a TextDocument .&lt;br /&gt;
&lt;br /&gt;
===Scripting Handbook===&lt;br /&gt;
&lt;br /&gt;
The [http://kross.dipe.org/dox/kword.html KWord Scripting Handbook] ([http://kross.dipe.org/dox/kword.pdf PDF]) contains a full reference of the functionality accessible from within the scripting backends.&lt;br /&gt;
&lt;br /&gt;
The Handbook is generated from the sourcecode using doxygen and KWord's [[Development/Tutorials/KWord_Scripting#Import_combined_Doxygen_XML_File|Import Doxygen XML File]] python script.&lt;br /&gt;
&lt;br /&gt;
==Samples==&lt;br /&gt;
&lt;br /&gt;
=== Load and save documents ===&lt;br /&gt;
&lt;br /&gt;
Following Python script demonstrates how to load and save files;&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
KWord.document().openURL(&amp;quot;/home/myuser/myDoc.odt&amp;quot;)&lt;br /&gt;
KWord.document().saveAs(&amp;quot;/home/myuser/myDocCopy.odt&amp;quot;)&lt;br /&gt;
KWord.document().saveAs(&amp;quot;/home/myuser/myDocAsText.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All slots and signals within the [http://websvn.kde.org/trunk/koffice/libs/kofficecore/KoDocumentAdaptor.h?view=markup KoDocumentAdaptor] are accessible as KWord.document().&lt;br /&gt;
&lt;br /&gt;
=== Import and export content ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_importfile.py?view=markup sample_importfile.py] Python script implements import of content from a text or html file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
f = open(&amp;quot;/home/myuser/mytextfile.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
doc.setText( ' '.join(f.readlines()) )&lt;br /&gt;
#doc.setHtml( ' '.join(f.readlines()) )&lt;br /&gt;
f.close()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_exportfile.py?view=markup sample_exportfile.py] Python script implements export of content to a text or html file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
f = open(&amp;quot;/home/myuser/mytextfile.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
f.write( doc.toText() )&lt;br /&gt;
#f.write( doc.toHtml() )&lt;br /&gt;
f.close()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Framesets, Frames and Shapes ===&lt;br /&gt;
&lt;br /&gt;
The following python script adds a polygon shape and then prints the name and the ID of each shape.&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
KWord.addFrame(&amp;quot;mypoly&amp;quot;, &amp;quot;KoRegularPolygonShape&amp;quot;)&lt;br /&gt;
for i in range( KWord.frameCount() ):&lt;br /&gt;
    f = KWord.frame(i)&lt;br /&gt;
    print &amp;quot;%s %s&amp;quot; % (f.frameSet().name(),f.shapeId())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_insertshape.py?view=markup sample_insertshape.py] Python script implements inserting of a shape into the document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
textshape = KWord.addTextFrame(&amp;quot;MyTextShape&amp;quot;)&lt;br /&gt;
textshape.document().setText(&amp;quot;Some text&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_allshapes.py?view=markup sample_allshapes.py] Python script just adds all shapes into the document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
for shapeId in KWord.shapeKeys():&lt;br /&gt;
    frame = KWord.addFrame(&amp;quot;myshape&amp;quot;, shapeId)&lt;br /&gt;
    if frame:&lt;br /&gt;
        frame.setTextRunAround(frame.RunThrough)&lt;br /&gt;
        frame.setPosition(200, 50)&lt;br /&gt;
        frame.resize(160, 80)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Text content ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_text.py?view=markup sample_text.py] Python script demonstrates usage of the text engine.&lt;br /&gt;
&lt;br /&gt;
The following python sample adds some text at the end of the main framesets document.&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
cursor = doc.rootFrame().lastCursorPosition()&lt;br /&gt;
cursor.insertHtml(&amp;quot;&amp;lt;b&amp;gt;Some text&amp;lt;/b&amp;gt;&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This python sample adds some text and sets the page header and the page footer.&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
doc.lastCursor().insertHtml(&amp;quot;Even more &amp;lt;b&amp;gt;Hello World&amp;lt;/b&amp;gt;&amp;quot;)&lt;br /&gt;
KWord.firstPageHeaderFrameSet().document().setText(&amp;quot;Header&amp;quot;)&lt;br /&gt;
KWord.firstPageFooterFrameSet().document().setText(&amp;quot;Footer&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python sample that prints the url and some metainformations of the document.&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
print KWord.document().url()&lt;br /&gt;
print KWord.document().documentInfoTitle()&lt;br /&gt;
print KWord.document().documentInfoAuthorName()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_lists_html.py?view=markup sample_lists_html.py] Python script demonstrates how to create lists with HTML.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_lists_cursor.py?view=markup sample_lists_cursor.py] Python script demonstrates how to create lists with a cursor.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_tables.py?view=markup sample_tables.py] Python script demonstrates how to deal with tables.&lt;br /&gt;
&lt;br /&gt;
=== KoStore and XML ===&lt;br /&gt;
&lt;br /&gt;
The following python sample does demonstrate how to print the element-names of all xml-files that are within the KWord KoStore backend (see [http://websvn.kde.org/trunk/koffice/libs/kokross/KoScriptingOdf.h?view=markup KoScriptingOdf.h]) for our current document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
store = KWord.store()&lt;br /&gt;
reader = store.open(&amp;quot;META-INF/manifest.xml&amp;quot;)&lt;br /&gt;
if not reader:&lt;br /&gt;
    raise &amp;quot;Failed to read the mainfest&amp;quot;&lt;br /&gt;
paths = []&lt;br /&gt;
for i in range( reader.count() ):&lt;br /&gt;
    if reader.type(i) == &amp;quot;text/xml&amp;quot;:&lt;br /&gt;
        paths.append( reader.path(i) )&lt;br /&gt;
for p in paths:&lt;br /&gt;
    reader = store.open(p)&lt;br /&gt;
    if not reader:&lt;br /&gt;
        raise &amp;quot;Failed to read %s&amp;quot; % p&lt;br /&gt;
    def onElement():&lt;br /&gt;
        print reader.name()&lt;br /&gt;
    reader.connect(&amp;quot;onElement()&amp;quot;, onElement)&lt;br /&gt;
    reader.start()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_variables.py?view=markup sample_variables.py] Python script demonstrates how to handle variables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
for v in doc.variableNames():&lt;br /&gt;
    print &amp;quot;name=%s value=%s&amp;quot; % (v, doc.variableValue(v))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/variable_readfile.py?view=markup variable_readfile.py] Python script to read a variable from a file.&lt;br /&gt;
&lt;br /&gt;
=== KWord ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_cursor.rb?view=markup sample_cursor.rb] Ruby script demonstrates how to control the cursor.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_actions.py?view=markup sample_actions.py] Python script demonstrates usage of actions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
KWord.shell().slotFileNew()&lt;br /&gt;
KWord.mainWindow().setCaption(&amp;quot;My Caption&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_toolactions.py?view=markup sample_toolactions.py] Python script demonstrates how to trigger actions the current tool provides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
tool = KWord.tool()&lt;br /&gt;
for n in tool.actionNames():&lt;br /&gt;
    print &amp;quot;%s: %s&amp;quot; % (n, tool.actionText(n))&lt;br /&gt;
    tool.triggerAction(n)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_progressbar.py?view=markup sample_progressbar.py] Python script demonstrates how to use the progressbar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
for i in range(1,101):&lt;br /&gt;
    KWord.shell().slotProgress(i)&lt;br /&gt;
KWord.shell().slotProgress(-1)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/onlinehelp.py?view=markup onlinehelp.py] Python script uses the KHTML Part to display the KWord Scripting online help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import Kross&lt;br /&gt;
forms = Kross.module(&amp;quot;forms&amp;quot;)&lt;br /&gt;
dialog = forms.createDialog(&amp;quot;KHTML Part&amp;quot;)&lt;br /&gt;
page = dialog.addPage(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
url = &amp;quot;http://wiki.koffice.org&amp;quot;&lt;br /&gt;
part = forms.loadPart(page, &amp;quot;libkhtmlpart&amp;quot;, url)&lt;br /&gt;
dialog.exec_loop()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripts ==&lt;br /&gt;
&lt;br /&gt;
=== Import from a Text or HTML File ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/importfile.py?view=markup importfile.py] allows to import content from text- or html-files.&lt;br /&gt;
&lt;br /&gt;
=== Import combined Doxygen XML File ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/importdoxyxml.py?view=markup importdoxyxml.py] implements import of combined doxygen XML files into KWord.&lt;br /&gt;
&lt;br /&gt;
As example this got used to generate the KSpread Scripting API-Reference. This is done by running doxygen with the [http://websvn.kde.org/trunk/koffice/kspread/plugins/scripting/docs/ KSpread doxygen file].&lt;br /&gt;
&lt;br /&gt;
We are able to produce from within the commandline the handbook like demonstrated bellow;&lt;br /&gt;
    cd kspread/plugins/scripting/docs&lt;br /&gt;
    doxygen kspreadscripting.doxyfile&lt;br /&gt;
    cd xml&lt;br /&gt;
    xsltproc combine.xslt index.xml | importdoxyxml.py kspread.html&lt;br /&gt;
&lt;br /&gt;
You are also able to just generate a combined doxygen XML file with;&lt;br /&gt;
    cd kspread/plugins/scripting/docs&lt;br /&gt;
    doxygen kspreadscripting.doxyfile&lt;br /&gt;
    cd xml&lt;br /&gt;
    xsltproc combine.xslt index.xml &amp;gt; ~/mydoxygen.xml&lt;br /&gt;
&lt;br /&gt;
Such a combined doxygen XML file can then be imported into our running KWord instance by running &amp;quot;Import Doxygen XML File&amp;quot; python script from the Tools/Scripts-menu.&lt;br /&gt;
&lt;br /&gt;
=== Import File with OpenOffice.org UNO ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/ooimport.py?view=markup ooimport.py] uses the PyUNO module to access OpenOffice.org and import content from any by OpenOffice.org supported fileformat.&lt;br /&gt;
For this an optional hidden OpenOffice.org instance need to be started. Then the script connects as client to this OpenOffice.org server instance and controls it. If the script got executed and the connecting to the server failed, then it will startup such a hidden OpenOffice.org server instance and shuts it down again once the work is done.&lt;br /&gt;
&lt;br /&gt;
If the script got executed from within KWord (e.g. by using the &amp;quot;Tools=&amp;gt;Script Manager&amp;quot;) the following dialog is displayed. The user chooses the file he likes to import and may also able to change settings related to how the connection to OpenOffice.org should be established. Then a progressdialog will be displayed while in the background we try to connect with OpenOffice.org and let it load the file and pass the content back to KWord.&lt;br /&gt;
&lt;br /&gt;
[[Image:kwordscriptingooimport.jpg]]&lt;br /&gt;
&lt;br /&gt;
That way KWord is able to optional use the OpenOffice.org import-filters to import content from file formats like;&lt;br /&gt;
&lt;br /&gt;
OpenDocument Text (*.odt), OpenDocument Text Template (*.ott), OpenOffice.org 1.0 Text Document (*.sxw), OpenOffice.org 1.0 Text Document Template (*.stw), Microsoft Word 95/97/2000/XP (*.doc), Microsoft Word 95/97/2000/XP Template (*.dot), Microsoft Word 2003 XML (*.xml), Rich Text Format (*.rtf), Text (*.txt), HTML Document (*.html *.htm), DocBook (*.xml), StarWriter 1.0 - 5.0 (*.sdw), StarWriter 3.0 - 5.0 Templates (*.vor), WordPerfect Document (*.wpd), Lotus WordPro Document (*.lwp), Ichitaro 8/9/10/11 (*.jtd), Ichitaro 8/9/10/11 Template (*.jtt), Hangul WP 97 (*.hwp), WPS 2000/Office 1.0 (*.wps), etc.&lt;br /&gt;
&lt;br /&gt;
=== Export to a Text or HTML File ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/exportfile.py?view=markup exportfile.py] allows to export content to text- or html-files.&lt;br /&gt;
&lt;br /&gt;
=== XML Viewer ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/xmlviewer.py?view=markup xmlviewer.py] to view the ISO OpenDocumentText XML representation of the current document displayed in KWord.&lt;br /&gt;
&lt;br /&gt;
The XML Viewer does also allow to open the XML of the current document with an external application like KWrite or KXMLEditor. The &amp;quot;Compare...&amp;quot; button enables to compare the current XML with the XML of another ODT file.&lt;br /&gt;
&lt;br /&gt;
[[Image:kwordxmlviewer.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Document Structure Viewer ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/doctree.rb?view=markup doctree.rb] QtRuby script implement a document structur viewer.&lt;br /&gt;
&lt;br /&gt;
The viewer displays the framesets, frames, documents and there objects as tree where each node may provide additional functionality like a collection of properties, text or styles.&lt;br /&gt;
&lt;br /&gt;
[[Image:kwordscriptingdoctree.jpg]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Jstaniek</id>
		<title>User:Jstaniek</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Jstaniek"/>
				<updated>2008-10-01T14:50:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kexi developer &amp;amp; maintainer, KDElibs/win32 founder&lt;br /&gt;
&lt;br /&gt;
*[http://kexi-project.org/pjs.html About me]&lt;br /&gt;
*[http://www.kdedevelopers.org/blog/104 My blog]&lt;br /&gt;
*[http://www.linkedin.com/in/jstaniek LinkedIn profile]&lt;br /&gt;
*e-mail: staniek at kde dot org&lt;br /&gt;
&lt;br /&gt;
== Interesting places in this wiki ==&lt;br /&gt;
*[http://techbase.kde.org/index.php?title=Special%3AAllpages&amp;amp;from=&amp;amp;namespace=10 Template list]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/KDE_on_Windows</id>
		<title>Talk:Projects/KDE on Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/KDE_on_Windows"/>
				<updated>2008-09-24T15:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* KOffice 2.0 Beta 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TODO==&lt;br /&gt;
[[User:Jstaniek|jstaniek]] 19:52, 11 January 2008 (CET):&lt;br /&gt;
Move these docs to the TechBase if relevant:&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32&lt;br /&gt;
*(important) http://wiki.kde.org/tiki-index.php?page=KDElibs%2Fwin32+Porting+Guidelines&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Notes&lt;br /&gt;
*Mention http://www.progressive-comp.com/?t=114629615300001&amp;amp;r=1&amp;amp;w=2&lt;br /&gt;
*Mention this history http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Changelog&lt;br /&gt;
*Update kdelibs.com pages; mark more pages as outdated&lt;br /&gt;
*Remove the wiki.kde.org pages afterwards leaving only link to the techbase.&lt;br /&gt;
&lt;br /&gt;
== Musik/Sound Issues ==&lt;br /&gt;
&lt;br /&gt;
Getting mp3-support in KDE for Windows is major PITA at the moment, so this section needs defintly improvement to be end-user ready. &lt;br /&gt;
&lt;br /&gt;
The first step would be get a hold of all codecs and check which are the best and fit best in our purpose.&lt;br /&gt;
&lt;br /&gt;
After we found the best solution the next step would be to integrate this into the installer. The codecs could be installed automaticly or the user could be given choice and also educate him of legal conseqences.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
    Release of Amarok Beta 1 Nerrivik for Windows&lt;br /&gt;
&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;date&amp;gt;&lt;br /&gt;
	July 29th, 2008&lt;br /&gt;
&amp;lt;/date&amp;gt;&lt;br /&gt;
&amp;lt;fullstory&amp;gt;&lt;br /&gt;
    After joint efforts, the KDE on Windows Team is glad to announce availability of the first Beta release &lt;br /&gt;
    of Amarok. &lt;br /&gt;
    Note that the quality of this software differs from its Linux counterpart&lt;br /&gt;
    and might only reach Alpha level so far. Nevertheless, users are invited to file related bug reports using the &amp;lt;a href=&amp;quot;http://bugs.kde.org&amp;quot;&amp;gt;KDE Bugzilla&amp;lt;/a&amp;gt; web site.&lt;br /&gt;
    The official release notes were published the Amarok Team at &amp;lt;a href=&amp;quot;http://amarok.kde.org/en/releases/2.0/beta/1&amp;quot;&amp;gt;amarok.kde.org&amp;lt;/a&amp;gt;.&lt;br /&gt;
Windows binaries are available via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
    (&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:ps_ml[AT]gmx[DOT]de&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;/fullstory&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===KOffice 2.0 Beta 1===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Announcement: Release of KOffice 2.0 Beta 1 for Windows&lt;br /&gt;
&lt;br /&gt;
Along with other platforms, the KDE on Windows Team has released &lt;br /&gt;
the first beta version of KOffice 2.0 running on MS Windows.&lt;br /&gt;
&lt;br /&gt;
As stated in the &amp;lt;a href=&amp;quot;http://www.koffice.org/announcements/announce-2.0beta1.php&amp;quot;&amp;gt;announcement&amp;lt;/a&amp;gt;, &lt;br /&gt;
the goal of this release is to prepare a basically usable 2.0 &lt;br /&gt;
version thanks to feedback from both users and developers &lt;br /&gt;
on the new user interface and underlying infrastructure. &lt;br /&gt;
Therefore, Windows users are also invited to join the community.&lt;br /&gt;
&lt;br /&gt;
Note that the quality of Windows version of this software differs from its Linux counterpart. &lt;br /&gt;
A number of components might only reach Alpha level so far or might be currently unavailable on Windows.&lt;br /&gt;
&lt;br /&gt;
The official release notes from the KOffice Team are published &lt;br /&gt;
at &amp;lt;a href=&amp;quot;http://www.koffice.org/releases/2.0beta1-release.php&amp;quot;&amp;gt;www.koffice.org&amp;lt;/a&amp;gt;. &lt;br /&gt;
 Windows executables for the new KOffice are available directly via the &lt;br /&gt;
&amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
(&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:kde-windows[AT]kde[DOT]org&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/KDE_on_Windows</id>
		<title>Talk:Projects/KDE on Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/KDE_on_Windows"/>
				<updated>2008-09-24T08:15:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* KOffice 2.0 Beta 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TODO==&lt;br /&gt;
[[User:Jstaniek|jstaniek]] 19:52, 11 January 2008 (CET):&lt;br /&gt;
Move these docs to the TechBase if relevant:&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32&lt;br /&gt;
*(important) http://wiki.kde.org/tiki-index.php?page=KDElibs%2Fwin32+Porting+Guidelines&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Notes&lt;br /&gt;
*Mention http://www.progressive-comp.com/?t=114629615300001&amp;amp;r=1&amp;amp;w=2&lt;br /&gt;
*Mention this history http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Changelog&lt;br /&gt;
*Update kdelibs.com pages; mark more pages as outdated&lt;br /&gt;
*Remove the wiki.kde.org pages afterwards leaving only link to the techbase.&lt;br /&gt;
&lt;br /&gt;
== Musik/Sound Issues ==&lt;br /&gt;
&lt;br /&gt;
Getting mp3-support in KDE for Windows is major PITA at the moment, so this section needs defintly improvement to be end-user ready. &lt;br /&gt;
&lt;br /&gt;
The first step would be get a hold of all codecs and check which are the best and fit best in our purpose.&lt;br /&gt;
&lt;br /&gt;
After we found the best solution the next step would be to integrate this into the installer. The codecs could be installed automaticly or the user could be given choice and also educate him of legal conseqences.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
    Release of Amarok Beta 1 Nerrivik for Windows&lt;br /&gt;
&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;date&amp;gt;&lt;br /&gt;
	July 29th, 2008&lt;br /&gt;
&amp;lt;/date&amp;gt;&lt;br /&gt;
&amp;lt;fullstory&amp;gt;&lt;br /&gt;
    After joint efforts, the KDE on Windows Team is glad to announce availability of the first Beta release &lt;br /&gt;
    of Amarok. &lt;br /&gt;
    Note that the quality of this software differs from its Linux counterpart&lt;br /&gt;
    and might only reach Alpha level so far. Nevertheless, users are invited to file related bug reports using the &amp;lt;a href=&amp;quot;http://bugs.kde.org&amp;quot;&amp;gt;KDE Bugzilla&amp;lt;/a&amp;gt; web site.&lt;br /&gt;
    The official release notes were published the Amarok Team at &amp;lt;a href=&amp;quot;http://amarok.kde.org/en/releases/2.0/beta/1&amp;quot;&amp;gt;amarok.kde.org&amp;lt;/a&amp;gt;.&lt;br /&gt;
Windows binaries are available via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
    (&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:ps_ml[AT]gmx[DOT]de&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;/fullstory&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===KOffice 2.0 Beta 1===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Announcement: Release of KOffice 2.0 Beta 1 for Windows&lt;br /&gt;
&lt;br /&gt;
Along with other platforms, the KDE on Windows Team has released &lt;br /&gt;
the first beta version of KOffice 2.0 running on MS Windows.&lt;br /&gt;
&lt;br /&gt;
As stated in the &amp;lt;a href=&amp;quot;http://www.koffice.org/announcements/announce-2.0beta1.php&amp;quot;&amp;gt;announcement&amp;lt;/a&amp;gt;, &lt;br /&gt;
the goal of this release is to prepare a basically usable 2.0 &lt;br /&gt;
version thanks to feedback from both users and developers &lt;br /&gt;
on the new user interface and underlying infrastructure. &lt;br /&gt;
Therefore, Windows users are also invited to join the community.&lt;br /&gt;
&lt;br /&gt;
The official release notes from the KOffice Team are published &lt;br /&gt;
at &amp;lt;a href=&amp;quot;http://www.koffice.org/releases/2.0beta1-release.php&amp;quot;&amp;gt;www.koffice.org&amp;lt;/a&amp;gt;. &lt;br /&gt;
 Windows executables for the new KOffice are available directly via the &lt;br /&gt;
&amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
(&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:kde-windows[AT]kde[DOT]org&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/KDE_on_Windows</id>
		<title>Talk:Projects/KDE on Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/KDE_on_Windows"/>
				<updated>2008-09-24T08:15:18Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* KOffice 2.0 Beta 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TODO==&lt;br /&gt;
[[User:Jstaniek|jstaniek]] 19:52, 11 January 2008 (CET):&lt;br /&gt;
Move these docs to the TechBase if relevant:&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32&lt;br /&gt;
*(important) http://wiki.kde.org/tiki-index.php?page=KDElibs%2Fwin32+Porting+Guidelines&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Notes&lt;br /&gt;
*Mention http://www.progressive-comp.com/?t=114629615300001&amp;amp;r=1&amp;amp;w=2&lt;br /&gt;
*Mention this history http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Changelog&lt;br /&gt;
*Update kdelibs.com pages; mark more pages as outdated&lt;br /&gt;
*Remove the wiki.kde.org pages afterwards leaving only link to the techbase.&lt;br /&gt;
&lt;br /&gt;
== Musik/Sound Issues ==&lt;br /&gt;
&lt;br /&gt;
Getting mp3-support in KDE for Windows is major PITA at the moment, so this section needs defintly improvement to be end-user ready. &lt;br /&gt;
&lt;br /&gt;
The first step would be get a hold of all codecs and check which are the best and fit best in our purpose.&lt;br /&gt;
&lt;br /&gt;
After we found the best solution the next step would be to integrate this into the installer. The codecs could be installed automaticly or the user could be given choice and also educate him of legal conseqences.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
    Release of Amarok Beta 1 Nerrivik for Windows&lt;br /&gt;
&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;date&amp;gt;&lt;br /&gt;
	July 29th, 2008&lt;br /&gt;
&amp;lt;/date&amp;gt;&lt;br /&gt;
&amp;lt;fullstory&amp;gt;&lt;br /&gt;
    After joint efforts, the KDE on Windows Team is glad to announce availability of the first Beta release &lt;br /&gt;
    of Amarok. &lt;br /&gt;
    Note that the quality of this software differs from its Linux counterpart&lt;br /&gt;
    and might only reach Alpha level so far. Nevertheless, users are invited to file related bug reports using the &amp;lt;a href=&amp;quot;http://bugs.kde.org&amp;quot;&amp;gt;KDE Bugzilla&amp;lt;/a&amp;gt; web site.&lt;br /&gt;
    The official release notes were published the Amarok Team at &amp;lt;a href=&amp;quot;http://amarok.kde.org/en/releases/2.0/beta/1&amp;quot;&amp;gt;amarok.kde.org&amp;lt;/a&amp;gt;.&lt;br /&gt;
Windows binaries are available via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
    (&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:ps_ml[AT]gmx[DOT]de&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;/fullstory&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===KOffice 2.0 Beta 1===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Announcement: Release of KOffice 2.0 Beta 1 for Windows&lt;br /&gt;
&lt;br /&gt;
Along with other platforms, the KDE on Windows Team has released &lt;br /&gt;
the first beta version of KOffice 2.0 running on MS Windows.&lt;br /&gt;
&lt;br /&gt;
As stated in the &amp;lt;a href=&amp;quot;http://www.koffice.org/announcements/announce-2.0beta1.php&amp;quot;&amp;gt;announcement&amp;lt;/a&amp;gt;, &lt;br /&gt;
the goal of this release is to prepare a basically usable 2.0 &lt;br /&gt;
version thanks to feedback from both users and developers &lt;br /&gt;
on the new user interface and underlying infrastructure. &lt;br /&gt;
Therefore, Windows users are also invited to join the community.&lt;br /&gt;
&lt;br /&gt;
The official release notes from the KOffice Team are published &lt;br /&gt;
at &amp;lt;a href=&amp;quot;http://www.koffice.org/releases/2.0beta1-release.php&amp;quot;&amp;gt;www.koffice.org&amp;lt;/a&amp;gt;. &lt;br /&gt;
 Windows executables for the new KOffice are available directly via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
(&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:kde-windows[AT]kde[DOT]org&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/KDE_on_Windows</id>
		<title>Talk:Projects/KDE on Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/KDE_on_Windows"/>
				<updated>2008-09-24T08:14:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Announcements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TODO==&lt;br /&gt;
[[User:Jstaniek|jstaniek]] 19:52, 11 January 2008 (CET):&lt;br /&gt;
Move these docs to the TechBase if relevant:&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32&lt;br /&gt;
*(important) http://wiki.kde.org/tiki-index.php?page=KDElibs%2Fwin32+Porting+Guidelines&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Notes&lt;br /&gt;
*Mention http://www.progressive-comp.com/?t=114629615300001&amp;amp;r=1&amp;amp;w=2&lt;br /&gt;
*Mention this history http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Changelog&lt;br /&gt;
*Update kdelibs.com pages; mark more pages as outdated&lt;br /&gt;
*Remove the wiki.kde.org pages afterwards leaving only link to the techbase.&lt;br /&gt;
&lt;br /&gt;
== Musik/Sound Issues ==&lt;br /&gt;
&lt;br /&gt;
Getting mp3-support in KDE for Windows is major PITA at the moment, so this section needs defintly improvement to be end-user ready. &lt;br /&gt;
&lt;br /&gt;
The first step would be get a hold of all codecs and check which are the best and fit best in our purpose.&lt;br /&gt;
&lt;br /&gt;
After we found the best solution the next step would be to integrate this into the installer. The codecs could be installed automaticly or the user could be given choice and also educate him of legal conseqences.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
    Release of Amarok Beta 1 Nerrivik for Windows&lt;br /&gt;
&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;date&amp;gt;&lt;br /&gt;
	July 29th, 2008&lt;br /&gt;
&amp;lt;/date&amp;gt;&lt;br /&gt;
&amp;lt;fullstory&amp;gt;&lt;br /&gt;
    After joint efforts, the KDE on Windows Team is glad to announce availability of the first Beta release &lt;br /&gt;
    of Amarok. &lt;br /&gt;
    Note that the quality of this software differs from its Linux counterpart&lt;br /&gt;
    and might only reach Alpha level so far. Nevertheless, users are invited to file related bug reports using the &amp;lt;a href=&amp;quot;http://bugs.kde.org&amp;quot;&amp;gt;KDE Bugzilla&amp;lt;/a&amp;gt; web site.&lt;br /&gt;
    The official release notes were published the Amarok Team at &amp;lt;a href=&amp;quot;http://amarok.kde.org/en/releases/2.0/beta/1&amp;quot;&amp;gt;amarok.kde.org&amp;lt;/a&amp;gt;.&lt;br /&gt;
Windows binaries are available via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
    (&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:ps_ml[AT]gmx[DOT]de&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;/fullstory&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===KOffice 2.0 Beta 1===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Announcement: Release of KOffice 2.0 Beta 1 for Windows&lt;br /&gt;
&lt;br /&gt;
Along with other platforms, the KDE on Windows Team has released the first beta version of KOffice 2.0 running on MS Windows.&lt;br /&gt;
&lt;br /&gt;
As stated in the &amp;lt;a href=&amp;quot;http://www.koffice.org/announcements/announce-2.0beta1.php&amp;quot;&amp;gt;announcement&amp;lt;/a&amp;gt;, the goal of this release is to prepare a basically usable 2.0 version thanks to feedback from both users and developers on the new user interface and underlying infrastructure. Therefore, Windows users are also invited to join the community.&lt;br /&gt;
&lt;br /&gt;
The official release notes from the KOffice Team are published at &amp;lt;a href=&amp;quot;http://www.koffice.org/releases/2.0beta1-release.php&amp;quot;&amp;gt;www.koffice.org&amp;lt;/a&amp;gt;. Windows executables for the new KOffice are available directly via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
(&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:kde-windows[AT]kde[DOT]org&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Windows</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Windows"/>
				<updated>2008-09-24T08:13:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: Redirecting to Projects/KDE on Windows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Projects/KDE_on_Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Jstaniek</id>
		<title>User:Jstaniek</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Jstaniek"/>
				<updated>2008-09-12T18:23:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kexi developer &amp;amp; maintainer, KDElibs/win32 founder&lt;br /&gt;
&lt;br /&gt;
* [http://kexi-project.org/pjs.html About me]&lt;br /&gt;
* [http://www.kdedevelopers.org/blog/104 My blog]&lt;br /&gt;
* e-mail: staniek at kde dot org&lt;br /&gt;
&lt;br /&gt;
== Interesting places in this wiki ==&lt;br /&gt;
*[http://techbase.kde.org/index.php?title=Special%3AAllpages&amp;amp;from=&amp;amp;namespace=10 Template list]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Tools</id>
		<title>Projects/KDE on Windows/Tools</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Tools"/>
				<updated>2008-09-07T22:12:01Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* More System Diagnostics Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Required or recommended tools for development and using KDE libraries and applications under MS Windows.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Process Explorer ==&lt;br /&gt;
''&amp;quot;Ever wondered which program has a particular file or directory open? Now you can find out. Process Explorer shows you information about which handles and DLLs processes have opened or loaded.&amp;quot;'' (freeware, for all Windows versions) [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx more]&lt;br /&gt;
[[Image:ProcessExplorer.jpg|thumb|center|Process Explorer]]&lt;br /&gt;
&lt;br /&gt;
== Console 2 ==&lt;br /&gt;
''&amp;quot;Console is a Windows console window (cmd.exe) enhancement, useful for using when you depend on this shell, e.g. with msvc. Console features include: multiple tabs, text editor-like text selection, different background types, alpha and color-key transparency, configurable font, different window styles.&amp;quot;'' (GPL, for Windows 2000 or newer) [http://sourceforge.net/projects/console more]&lt;br /&gt;
[[Image:ConsoleWindowsTool.png|thumb|center|Console window]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Tools for Windows ==&lt;br /&gt;
You can use programs from ''Debugging Tools for Windows'' package to debug drivers, applications, and services on systems with Windows NT kernel. (freeware) [http://www.microsoft.com/whdc/devtools/debugging/default.mspx more]&lt;br /&gt;
&lt;br /&gt;
Among [http://msdn2.microsoft.com/en-us/library/cc267862.aspx others], ''Debugging Tools for Windows'' do contain:&lt;br /&gt;
&lt;br /&gt;
=== WinDbg ===&lt;br /&gt;
WinDbg (windbg.exe), a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps (postmortem debugging). &lt;br /&gt;
&lt;br /&gt;
Form [http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx]: ''&amp;quot;WinDbg provides source-level debugging through a graphical user interface and a text-based interface. WinDbg uses the Microsoft Visual Studio debug symbol formats for source-level debugging. It can access any public function's names and variables exposed by modules that were compiled with Codeview (.pdb) symbol files.&lt;br /&gt;
WinDbg can view source code, set breakpoints, view variables (including C++ objects), stack traces, and memory. It includes a command window to issue a wide variety of commands not available through the drop-down menus. [..] It also allows you to remotely debug user-mode code.&amp;quot;'',&lt;br /&gt;
&lt;br /&gt;
To change the postmortem debugger to WinDbg, run windbg -I. (The I must be capitalized.) &lt;br /&gt;
&lt;br /&gt;
Resources related to WinDbg:&lt;br /&gt;
* [http://msdn2.microsoft.com/en-us/library/cc266343.aspx Enabling Postmortem Debugging]&lt;br /&gt;
* [http://software.rkuster.com/windbg/WinDBG_A_to_Z.pdf WinDbg. From A to Z! &amp;amp;nbsp; ] - Theory and examples (56 pages, 580 Kb)&lt;br /&gt;
* [http://software.rkuster.com/windbg/printcmd.htm Common WinDbg Commands (Thematically Grouped)]&lt;br /&gt;
* [http://www.networkworld.com/news/2005/041105-windows-crash.html Tutorial on solving system crashes using WinDbg]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
*&amp;quot;Debugging Tools for Windows&amp;quot; documentation (debugger.chm) (see [http://msdn2.microsoft.com/en-us/library/cc267445.aspx online version]),&lt;br /&gt;
&lt;br /&gt;
=== CDB ===&lt;br /&gt;
*CDB (cdb.exe), a user-mode debugger with a console interface,&lt;br /&gt;
&lt;br /&gt;
=== Logger ===&lt;br /&gt;
Logger (logger.exe and logexts.dll), a tool and a plugin DLL that record the function calls and other actions of a program,&lt;br /&gt;
&lt;br /&gt;
=== LogViewer ===&lt;br /&gt;
LogViewer  (logviewer.exe), a tool that displays the logs created by Logger,&lt;br /&gt;
&lt;br /&gt;
=== GFlags ===&lt;br /&gt;
*GFlags (Global Flags Editor, gflags.exe), a tool used to control registry keys and other settings&lt;br /&gt;
&lt;br /&gt;
=== The Breakin tool ===&lt;br /&gt;
*The Breakin tool  (breakin.exe), a tool used to cause a user-mode break to occur in a process,&lt;br /&gt;
&lt;br /&gt;
=== The Kill tool ===&lt;br /&gt;
*The Kill tool  (kill.exe), a tool used to terminate a process,&lt;br /&gt;
&lt;br /&gt;
=== UMDH ===&lt;br /&gt;
*UMDH (User-Mode Dump Heap utility, umdh.exe), a tool used to analyze heap allocations&lt;br /&gt;
&lt;br /&gt;
== DebugView ==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool. The tool offers searching in logs, filtering them using wildcards and saving them to file. (freeware) [http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx more]&lt;br /&gt;
[[Image:DebugViewWindows.png|thumb|center|DebugView window]]&lt;br /&gt;
&lt;br /&gt;
== Dependency Walker ==&lt;br /&gt;
A tool for checking dependency of shared libraries. This utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. (freeware) [http://www.dependencywalker.com/ more]&lt;br /&gt;
[[Image:DependencyWalkerWindows.png|thumb|center|Dependency Walker window]]&lt;br /&gt;
&lt;br /&gt;
== Process Monitor ==&lt;br /&gt;
Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity. Use it to discover what process is using given files (very useful knowledge since Windows can block these files). [http://technet.microsoft.com/de-de/sysinternals/bb896645(en-us).aspx more]&lt;br /&gt;
&lt;br /&gt;
=== Handle ===&lt;br /&gt;
Command line program used to find out which program has a particular file or directory open. Handle is a utility that displays information about open handles for any process in the system. [http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx more]&lt;br /&gt;
&lt;br /&gt;
== AutoRuns ==&lt;br /&gt;
AutoRuns provides very comprehensive knowledge of auto-starting locations, shows what programs are configured to run during system bootup or login, and shows the entries in the order Windows processes them. These programs include ones in your startup folder, Run, RunOnce, and other Registry keys. [http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx more]&lt;br /&gt;
&lt;br /&gt;
== More System Diagnostics Tools ==&lt;br /&gt;
*[http://technet.microsoft.com/en-us/sysinternals/default.aspx Windows Sysinternals: File and Disk Utilities, Networking Utilities, Process Utilities, Security Utilities, System Information, Miscellaneous Utilities]&lt;br /&gt;
*[http://msdn2.microsoft.com/en-us/library/aa139733.aspx Debugging and Error Handling, Performance Monitoring, Performance Tools Kit, Error Reporting, Windows Events]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Tools</id>
		<title>Projects/KDE on Windows/Tools</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Tools"/>
				<updated>2008-09-07T22:11:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* More Diagnostics Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Required or recommended tools for development and using KDE libraries and applications under MS Windows.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Process Explorer ==&lt;br /&gt;
''&amp;quot;Ever wondered which program has a particular file or directory open? Now you can find out. Process Explorer shows you information about which handles and DLLs processes have opened or loaded.&amp;quot;'' (freeware, for all Windows versions) [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx more]&lt;br /&gt;
[[Image:ProcessExplorer.jpg|thumb|center|Process Explorer]]&lt;br /&gt;
&lt;br /&gt;
== Console 2 ==&lt;br /&gt;
''&amp;quot;Console is a Windows console window (cmd.exe) enhancement, useful for using when you depend on this shell, e.g. with msvc. Console features include: multiple tabs, text editor-like text selection, different background types, alpha and color-key transparency, configurable font, different window styles.&amp;quot;'' (GPL, for Windows 2000 or newer) [http://sourceforge.net/projects/console more]&lt;br /&gt;
[[Image:ConsoleWindowsTool.png|thumb|center|Console window]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Tools for Windows ==&lt;br /&gt;
You can use programs from ''Debugging Tools for Windows'' package to debug drivers, applications, and services on systems with Windows NT kernel. (freeware) [http://www.microsoft.com/whdc/devtools/debugging/default.mspx more]&lt;br /&gt;
&lt;br /&gt;
Among [http://msdn2.microsoft.com/en-us/library/cc267862.aspx others], ''Debugging Tools for Windows'' do contain:&lt;br /&gt;
&lt;br /&gt;
=== WinDbg ===&lt;br /&gt;
WinDbg (windbg.exe), a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps (postmortem debugging). &lt;br /&gt;
&lt;br /&gt;
Form [http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx]: ''&amp;quot;WinDbg provides source-level debugging through a graphical user interface and a text-based interface. WinDbg uses the Microsoft Visual Studio debug symbol formats for source-level debugging. It can access any public function's names and variables exposed by modules that were compiled with Codeview (.pdb) symbol files.&lt;br /&gt;
WinDbg can view source code, set breakpoints, view variables (including C++ objects), stack traces, and memory. It includes a command window to issue a wide variety of commands not available through the drop-down menus. [..] It also allows you to remotely debug user-mode code.&amp;quot;'',&lt;br /&gt;
&lt;br /&gt;
To change the postmortem debugger to WinDbg, run windbg -I. (The I must be capitalized.) &lt;br /&gt;
&lt;br /&gt;
Resources related to WinDbg:&lt;br /&gt;
* [http://msdn2.microsoft.com/en-us/library/cc266343.aspx Enabling Postmortem Debugging]&lt;br /&gt;
* [http://software.rkuster.com/windbg/WinDBG_A_to_Z.pdf WinDbg. From A to Z! &amp;amp;nbsp; ] - Theory and examples (56 pages, 580 Kb)&lt;br /&gt;
* [http://software.rkuster.com/windbg/printcmd.htm Common WinDbg Commands (Thematically Grouped)]&lt;br /&gt;
* [http://www.networkworld.com/news/2005/041105-windows-crash.html Tutorial on solving system crashes using WinDbg]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
*&amp;quot;Debugging Tools for Windows&amp;quot; documentation (debugger.chm) (see [http://msdn2.microsoft.com/en-us/library/cc267445.aspx online version]),&lt;br /&gt;
&lt;br /&gt;
=== CDB ===&lt;br /&gt;
*CDB (cdb.exe), a user-mode debugger with a console interface,&lt;br /&gt;
&lt;br /&gt;
=== Logger ===&lt;br /&gt;
Logger (logger.exe and logexts.dll), a tool and a plugin DLL that record the function calls and other actions of a program,&lt;br /&gt;
&lt;br /&gt;
=== LogViewer ===&lt;br /&gt;
LogViewer  (logviewer.exe), a tool that displays the logs created by Logger,&lt;br /&gt;
&lt;br /&gt;
=== GFlags ===&lt;br /&gt;
*GFlags (Global Flags Editor, gflags.exe), a tool used to control registry keys and other settings&lt;br /&gt;
&lt;br /&gt;
=== The Breakin tool ===&lt;br /&gt;
*The Breakin tool  (breakin.exe), a tool used to cause a user-mode break to occur in a process,&lt;br /&gt;
&lt;br /&gt;
=== The Kill tool ===&lt;br /&gt;
*The Kill tool  (kill.exe), a tool used to terminate a process,&lt;br /&gt;
&lt;br /&gt;
=== UMDH ===&lt;br /&gt;
*UMDH (User-Mode Dump Heap utility, umdh.exe), a tool used to analyze heap allocations&lt;br /&gt;
&lt;br /&gt;
== DebugView ==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool. The tool offers searching in logs, filtering them using wildcards and saving them to file. (freeware) [http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx more]&lt;br /&gt;
[[Image:DebugViewWindows.png|thumb|center|DebugView window]]&lt;br /&gt;
&lt;br /&gt;
== Dependency Walker ==&lt;br /&gt;
A tool for checking dependency of shared libraries. This utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. (freeware) [http://www.dependencywalker.com/ more]&lt;br /&gt;
[[Image:DependencyWalkerWindows.png|thumb|center|Dependency Walker window]]&lt;br /&gt;
&lt;br /&gt;
== Process Monitor ==&lt;br /&gt;
Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity. Use it to discover what process is using given files (very useful knowledge since Windows can block these files). [http://technet.microsoft.com/de-de/sysinternals/bb896645(en-us).aspx more]&lt;br /&gt;
&lt;br /&gt;
=== Handle ===&lt;br /&gt;
Command line program used to find out which program has a particular file or directory open. Handle is a utility that displays information about open handles for any process in the system. [http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx more]&lt;br /&gt;
&lt;br /&gt;
== AutoRuns ==&lt;br /&gt;
AutoRuns provides very comprehensive knowledge of auto-starting locations, shows what programs are configured to run during system bootup or login, and shows the entries in the order Windows processes them. These programs include ones in your startup folder, Run, RunOnce, and other Registry keys. [http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx more]&lt;br /&gt;
&lt;br /&gt;
== More System Diagnostics Tools ==&lt;br /&gt;
*[http://technet.microsoft.com/en-us/sysinternals/default.aspx File and Disk Utilities, Networking Utilities, Process Utilities, Security Utilities, System Information, Miscellaneous Utilities]&lt;br /&gt;
*[http://msdn2.microsoft.com/en-us/library/aa139733.aspx Debugging and Error Handling, Performance Monitoring, Performance Tools Kit, Error Reporting, Windows Events]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Tools</id>
		<title>Projects/KDE on Windows/Tools</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Tools"/>
				<updated>2008-09-07T22:08:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Process Monitor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Required or recommended tools for development and using KDE libraries and applications under MS Windows.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Process Explorer ==&lt;br /&gt;
''&amp;quot;Ever wondered which program has a particular file or directory open? Now you can find out. Process Explorer shows you information about which handles and DLLs processes have opened or loaded.&amp;quot;'' (freeware, for all Windows versions) [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx more]&lt;br /&gt;
[[Image:ProcessExplorer.jpg|thumb|center|Process Explorer]]&lt;br /&gt;
&lt;br /&gt;
== Console 2 ==&lt;br /&gt;
''&amp;quot;Console is a Windows console window (cmd.exe) enhancement, useful for using when you depend on this shell, e.g. with msvc. Console features include: multiple tabs, text editor-like text selection, different background types, alpha and color-key transparency, configurable font, different window styles.&amp;quot;'' (GPL, for Windows 2000 or newer) [http://sourceforge.net/projects/console more]&lt;br /&gt;
[[Image:ConsoleWindowsTool.png|thumb|center|Console window]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Tools for Windows ==&lt;br /&gt;
You can use programs from ''Debugging Tools for Windows'' package to debug drivers, applications, and services on systems with Windows NT kernel. (freeware) [http://www.microsoft.com/whdc/devtools/debugging/default.mspx more]&lt;br /&gt;
&lt;br /&gt;
Among [http://msdn2.microsoft.com/en-us/library/cc267862.aspx others], ''Debugging Tools for Windows'' do contain:&lt;br /&gt;
&lt;br /&gt;
=== WinDbg ===&lt;br /&gt;
WinDbg (windbg.exe), a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps (postmortem debugging). &lt;br /&gt;
&lt;br /&gt;
Form [http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx]: ''&amp;quot;WinDbg provides source-level debugging through a graphical user interface and a text-based interface. WinDbg uses the Microsoft Visual Studio debug symbol formats for source-level debugging. It can access any public function's names and variables exposed by modules that were compiled with Codeview (.pdb) symbol files.&lt;br /&gt;
WinDbg can view source code, set breakpoints, view variables (including C++ objects), stack traces, and memory. It includes a command window to issue a wide variety of commands not available through the drop-down menus. [..] It also allows you to remotely debug user-mode code.&amp;quot;'',&lt;br /&gt;
&lt;br /&gt;
To change the postmortem debugger to WinDbg, run windbg -I. (The I must be capitalized.) &lt;br /&gt;
&lt;br /&gt;
Resources related to WinDbg:&lt;br /&gt;
* [http://msdn2.microsoft.com/en-us/library/cc266343.aspx Enabling Postmortem Debugging]&lt;br /&gt;
* [http://software.rkuster.com/windbg/WinDBG_A_to_Z.pdf WinDbg. From A to Z! &amp;amp;nbsp; ] - Theory and examples (56 pages, 580 Kb)&lt;br /&gt;
* [http://software.rkuster.com/windbg/printcmd.htm Common WinDbg Commands (Thematically Grouped)]&lt;br /&gt;
* [http://www.networkworld.com/news/2005/041105-windows-crash.html Tutorial on solving system crashes using WinDbg]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
*&amp;quot;Debugging Tools for Windows&amp;quot; documentation (debugger.chm) (see [http://msdn2.microsoft.com/en-us/library/cc267445.aspx online version]),&lt;br /&gt;
&lt;br /&gt;
=== CDB ===&lt;br /&gt;
*CDB (cdb.exe), a user-mode debugger with a console interface,&lt;br /&gt;
&lt;br /&gt;
=== Logger ===&lt;br /&gt;
Logger (logger.exe and logexts.dll), a tool and a plugin DLL that record the function calls and other actions of a program,&lt;br /&gt;
&lt;br /&gt;
=== LogViewer ===&lt;br /&gt;
LogViewer  (logviewer.exe), a tool that displays the logs created by Logger,&lt;br /&gt;
&lt;br /&gt;
=== GFlags ===&lt;br /&gt;
*GFlags (Global Flags Editor, gflags.exe), a tool used to control registry keys and other settings&lt;br /&gt;
&lt;br /&gt;
=== The Breakin tool ===&lt;br /&gt;
*The Breakin tool  (breakin.exe), a tool used to cause a user-mode break to occur in a process,&lt;br /&gt;
&lt;br /&gt;
=== The Kill tool ===&lt;br /&gt;
*The Kill tool  (kill.exe), a tool used to terminate a process,&lt;br /&gt;
&lt;br /&gt;
=== UMDH ===&lt;br /&gt;
*UMDH (User-Mode Dump Heap utility, umdh.exe), a tool used to analyze heap allocations&lt;br /&gt;
&lt;br /&gt;
== DebugView ==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool. The tool offers searching in logs, filtering them using wildcards and saving them to file. (freeware) [http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx more]&lt;br /&gt;
[[Image:DebugViewWindows.png|thumb|center|DebugView window]]&lt;br /&gt;
&lt;br /&gt;
== Dependency Walker ==&lt;br /&gt;
A tool for checking dependency of shared libraries. This utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. (freeware) [http://www.dependencywalker.com/ more]&lt;br /&gt;
[[Image:DependencyWalkerWindows.png|thumb|center|Dependency Walker window]]&lt;br /&gt;
&lt;br /&gt;
== Process Monitor ==&lt;br /&gt;
Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity. Use it to discover what process is using given files (very useful knowledge since Windows can block these files). [http://technet.microsoft.com/de-de/sysinternals/bb896645(en-us).aspx more]&lt;br /&gt;
&lt;br /&gt;
=== Handle ===&lt;br /&gt;
Command line program used to find out which program has a particular file or directory open. Handle is a utility that displays information about open handles for any process in the system. [http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx more]&lt;br /&gt;
&lt;br /&gt;
== AutoRuns ==&lt;br /&gt;
AutoRuns provides very comprehensive knowledge of auto-starting locations, shows what programs are configured to run during system bootup or login, and shows the entries in the order Windows processes them. These programs include ones in your startup folder, Run, RunOnce, and other Registry keys. [http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx more]&lt;br /&gt;
&lt;br /&gt;
== More Diagnostics Tools ==&lt;br /&gt;
[http://msdn2.microsoft.com/en-us/library/aa139733.aspx Debugging and Error Handling, Performance Monitoring, Performance Tools Kit, Error Reporting, Windows Events] (MSDN).&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Tools</id>
		<title>Projects/KDE on Windows/Tools</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Tools"/>
				<updated>2008-09-07T22:02:32Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: autoruns&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Required or recommended tools for development and using KDE libraries and applications under MS Windows.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Process Explorer ==&lt;br /&gt;
''&amp;quot;Ever wondered which program has a particular file or directory open? Now you can find out. Process Explorer shows you information about which handles and DLLs processes have opened or loaded.&amp;quot;'' (freeware, for all Windows versions) [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx more]&lt;br /&gt;
[[Image:ProcessExplorer.jpg|thumb|center|Process Explorer]]&lt;br /&gt;
&lt;br /&gt;
== Console 2 ==&lt;br /&gt;
''&amp;quot;Console is a Windows console window (cmd.exe) enhancement, useful for using when you depend on this shell, e.g. with msvc. Console features include: multiple tabs, text editor-like text selection, different background types, alpha and color-key transparency, configurable font, different window styles.&amp;quot;'' (GPL, for Windows 2000 or newer) [http://sourceforge.net/projects/console more]&lt;br /&gt;
[[Image:ConsoleWindowsTool.png|thumb|center|Console window]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Tools for Windows ==&lt;br /&gt;
You can use programs from ''Debugging Tools for Windows'' package to debug drivers, applications, and services on systems with Windows NT kernel. (freeware) [http://www.microsoft.com/whdc/devtools/debugging/default.mspx more]&lt;br /&gt;
&lt;br /&gt;
Among [http://msdn2.microsoft.com/en-us/library/cc267862.aspx others], ''Debugging Tools for Windows'' do contain:&lt;br /&gt;
&lt;br /&gt;
=== WinDbg ===&lt;br /&gt;
WinDbg (windbg.exe), a user-mode and kernel-mode debugger with a graphical interface. It can also be used to debug user-mode crash dumps (postmortem debugging). &lt;br /&gt;
&lt;br /&gt;
Form [http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx]: ''&amp;quot;WinDbg provides source-level debugging through a graphical user interface and a text-based interface. WinDbg uses the Microsoft Visual Studio debug symbol formats for source-level debugging. It can access any public function's names and variables exposed by modules that were compiled with Codeview (.pdb) symbol files.&lt;br /&gt;
WinDbg can view source code, set breakpoints, view variables (including C++ objects), stack traces, and memory. It includes a command window to issue a wide variety of commands not available through the drop-down menus. [..] It also allows you to remotely debug user-mode code.&amp;quot;'',&lt;br /&gt;
&lt;br /&gt;
To change the postmortem debugger to WinDbg, run windbg -I. (The I must be capitalized.) &lt;br /&gt;
&lt;br /&gt;
Resources related to WinDbg:&lt;br /&gt;
* [http://msdn2.microsoft.com/en-us/library/cc266343.aspx Enabling Postmortem Debugging]&lt;br /&gt;
* [http://software.rkuster.com/windbg/WinDBG_A_to_Z.pdf WinDbg. From A to Z! &amp;amp;nbsp; ] - Theory and examples (56 pages, 580 Kb)&lt;br /&gt;
* [http://software.rkuster.com/windbg/printcmd.htm Common WinDbg Commands (Thematically Grouped)]&lt;br /&gt;
* [http://www.networkworld.com/news/2005/041105-windows-crash.html Tutorial on solving system crashes using WinDbg]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
*&amp;quot;Debugging Tools for Windows&amp;quot; documentation (debugger.chm) (see [http://msdn2.microsoft.com/en-us/library/cc267445.aspx online version]),&lt;br /&gt;
&lt;br /&gt;
=== CDB ===&lt;br /&gt;
*CDB (cdb.exe), a user-mode debugger with a console interface,&lt;br /&gt;
&lt;br /&gt;
=== Logger ===&lt;br /&gt;
Logger (logger.exe and logexts.dll), a tool and a plugin DLL that record the function calls and other actions of a program,&lt;br /&gt;
&lt;br /&gt;
=== LogViewer ===&lt;br /&gt;
LogViewer  (logviewer.exe), a tool that displays the logs created by Logger,&lt;br /&gt;
&lt;br /&gt;
=== GFlags ===&lt;br /&gt;
*GFlags (Global Flags Editor, gflags.exe), a tool used to control registry keys and other settings&lt;br /&gt;
&lt;br /&gt;
=== The Breakin tool ===&lt;br /&gt;
*The Breakin tool  (breakin.exe), a tool used to cause a user-mode break to occur in a process,&lt;br /&gt;
&lt;br /&gt;
=== The Kill tool ===&lt;br /&gt;
*The Kill tool  (kill.exe), a tool used to terminate a process,&lt;br /&gt;
&lt;br /&gt;
=== UMDH ===&lt;br /&gt;
*UMDH (User-Mode Dump Heap utility, umdh.exe), a tool used to analyze heap allocations&lt;br /&gt;
&lt;br /&gt;
== DebugView ==&lt;br /&gt;
Debug messages (logs) generated by kDebug() and kWarning() are not visible on MS Windows unless application is compiled in so-called CONSOLE subsystem. To show these messages also in WINDOWS subsystem, you can use DebugView tool. The tool offers searching in logs, filtering them using wildcards and saving them to file. (freeware) [http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx more]&lt;br /&gt;
[[Image:DebugViewWindows.png|thumb|center|DebugView window]]&lt;br /&gt;
&lt;br /&gt;
== Dependency Walker ==&lt;br /&gt;
A tool for checking dependency of shared libraries. This utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. (freeware) [http://www.dependencywalker.com/ more]&lt;br /&gt;
[[Image:DependencyWalkerWindows.png|thumb|center|Dependency Walker window]]&lt;br /&gt;
&lt;br /&gt;
== Process Monitor ==&lt;br /&gt;
Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity.&lt;br /&gt;
[http://technet.microsoft.com/de-de/sysinternals/bb896645(en-us).aspx more]&lt;br /&gt;
&lt;br /&gt;
== AutoRuns ==&lt;br /&gt;
AutoRuns provides very comprehensive knowledge of auto-starting locations, shows what programs are configured to run during system bootup or login, and shows the entries in the order Windows processes them. These programs include ones in your startup folder, Run, RunOnce, and other Registry keys. [http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx more]&lt;br /&gt;
&lt;br /&gt;
== More Diagnostics Tools ==&lt;br /&gt;
[http://msdn2.microsoft.com/en-us/library/aa139733.aspx Debugging and Error Handling, Performance Monitoring, Performance Tools Kit, Error Reporting, Windows Events] (MSDN).&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/KDE_on_Windows</id>
		<title>Talk:Projects/KDE on Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/KDE_on_Windows"/>
				<updated>2008-08-22T12:52:32Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TODO==&lt;br /&gt;
[[User:Jstaniek|jstaniek]] 19:52, 11 January 2008 (CET):&lt;br /&gt;
Move these docs to the TechBase if relevant:&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32&lt;br /&gt;
*(important) http://wiki.kde.org/tiki-index.php?page=KDElibs%2Fwin32+Porting+Guidelines&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Notes&lt;br /&gt;
*Mention http://www.progressive-comp.com/?t=114629615300001&amp;amp;r=1&amp;amp;w=2&lt;br /&gt;
*Mention this history http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Changelog&lt;br /&gt;
*Update kdelibs.com pages; mark more pages as outdated&lt;br /&gt;
*Remove the wiki.kde.org pages afterwards leaving only link to the techbase.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
    Release of Amarok Beta 1 Nerrivik for Windows&lt;br /&gt;
&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;date&amp;gt;&lt;br /&gt;
	July 29th, 2008&lt;br /&gt;
&amp;lt;/date&amp;gt;&lt;br /&gt;
&amp;lt;fullstory&amp;gt;&lt;br /&gt;
    After joint efforts, the KDE on Windows Team is glad to announce availability of the first Beta release &lt;br /&gt;
    of Amarok. &lt;br /&gt;
    Note that the quality of this software differs from its Linux counterpart&lt;br /&gt;
    and might only reach Alpha level so far. Nevertheless, users are invited to file related bug reports using the &amp;lt;a href=&amp;quot;http://bugs.kde.org&amp;quot;&amp;gt;KDE Bugzilla&amp;lt;/a&amp;gt; web site.&lt;br /&gt;
    The official release notes were published the Amarok Team at &amp;lt;a href=&amp;quot;http://amarok.kde.org/en/releases/2.0/beta/1&amp;quot;&amp;gt;amarok.kde.org&amp;lt;/a&amp;gt;.&lt;br /&gt;
Windows binaries are available via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
    (&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:ps_ml[AT]gmx[DOT]de&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;/fullstory&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/KDE_on_Windows</id>
		<title>Talk:Projects/KDE on Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/KDE_on_Windows"/>
				<updated>2008-08-22T12:52:07Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TODO==&lt;br /&gt;
[[User:Jstaniek|jstaniek]] 19:52, 11 January 2008 (CET):&lt;br /&gt;
Move these docs to the TechBase if relevant:&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32&lt;br /&gt;
*(important) http://wiki.kde.org/tiki-index.php?page=KDElibs%2Fwin32+Porting+Guidelines&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Notes&lt;br /&gt;
*Mention http://www.progressive-comp.com/?t=114629615300001&amp;amp;r=1&amp;amp;w=2&lt;br /&gt;
*Mention this history http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Changelog&lt;br /&gt;
*Update kdelibs.com pages; mark more pages as outdated&lt;br /&gt;
*Remove the wiki.kde.org pages afterwards leaving only link to the techbase.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
    Announcement: Release of Amarok Beta 1 Nerrivik on Windows&lt;br /&gt;
&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;date&amp;gt;&lt;br /&gt;
	July 29th, 2008&lt;br /&gt;
&amp;lt;/date&amp;gt;&lt;br /&gt;
&amp;lt;fullstory&amp;gt;&lt;br /&gt;
    After joint efforts, the KDE on Windows Team is glad to announce availability of the first Beta release &lt;br /&gt;
    of Amarok. &lt;br /&gt;
    Note that the quality of this software differs from its Linux counterpart&lt;br /&gt;
    and might only reach Alpha level so far. Nevertheless, users are invited to file related bug reports using the &amp;lt;a href=&amp;quot;http://bugs.kde.org&amp;quot;&amp;gt;KDE Bugzilla&amp;lt;/a&amp;gt; web site.&lt;br /&gt;
    The official release notes were published the Amarok Team at &amp;lt;a href=&amp;quot;http://amarok.kde.org/en/releases/2.0/beta/1&amp;quot;&amp;gt;amarok.kde.org&amp;lt;/a&amp;gt;.&lt;br /&gt;
Windows binaries are available via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
    (&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:ps_ml[AT]gmx[DOT]de&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;/fullstory&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/KDE_on_Windows</id>
		<title>Talk:Projects/KDE on Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/KDE_on_Windows"/>
				<updated>2008-08-22T12:50:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Announcements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TODO==&lt;br /&gt;
[[User:Jstaniek|jstaniek]] 19:52, 11 January 2008 (CET):&lt;br /&gt;
Move these docs to the TechBase if relevant:&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32&lt;br /&gt;
*(important) http://wiki.kde.org/tiki-index.php?page=KDElibs%2Fwin32+Porting+Guidelines&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Notes&lt;br /&gt;
*Mention http://www.progressive-comp.com/?t=114629615300001&amp;amp;r=1&amp;amp;w=2&lt;br /&gt;
*Mention this history http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Changelog&lt;br /&gt;
*Update kdelibs.com pages; mark more pages as outdated&lt;br /&gt;
*Remove the wiki.kde.org pages afterwards leaving only link to the techbase.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
    Announcement: Release of Amarok Beta 1 Nerrivik on Windows&lt;br /&gt;
&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;date&amp;gt;&lt;br /&gt;
	July 29th, 2008&lt;br /&gt;
&amp;lt;/date&amp;gt;&lt;br /&gt;
&amp;lt;fullstory&amp;gt;&lt;br /&gt;
    After joint efforts, the KDE on Windows Team is glad to announce availability of the first Beta release &lt;br /&gt;
    of Amarok. &lt;br /&gt;
    Note that the quality of this software differs from its Linux counterpart&lt;br /&gt;
    and might only reach Alpha level so far. Nevertheless you are invited to file related bug reports using the &amp;lt;a href=&amp;quot;http://bugs.kde.org&amp;quot;&amp;gt;KDE Bugzilla&amp;lt;/a&amp;gt; web site.&lt;br /&gt;
    The official release notes were published the Amarok Team at &amp;lt;a href=&amp;quot;http://amarok.kde.org/en/releases/2.0/beta/1&amp;quot;&amp;gt;amarok.kde.org&amp;lt;/a&amp;gt;.&lt;br /&gt;
Windows binaries are available via the &amp;lt;a href=&amp;quot;http://techbase.kde.org/Projects/KDE_on_Windows/Installation#KDE_Installer_for_Windows&amp;quot;&amp;gt;KDE Installer&amp;lt;/a&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
    (&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:ps_ml[AT]gmx[DOT]de&amp;quot;&amp;gt;KDE on Windows Team&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;/fullstory&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/KDE_on_Windows</id>
		<title>Talk:Projects/KDE on Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/KDE_on_Windows"/>
				<updated>2008-08-22T12:42:42Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TODO==&lt;br /&gt;
[[User:Jstaniek|jstaniek]] 19:52, 11 January 2008 (CET):&lt;br /&gt;
Move these docs to the TechBase if relevant:&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32&lt;br /&gt;
*(important) http://wiki.kde.org/tiki-index.php?page=KDElibs%2Fwin32+Porting+Guidelines&lt;br /&gt;
*http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Notes&lt;br /&gt;
*Mention http://www.progressive-comp.com/?t=114629615300001&amp;amp;r=1&amp;amp;w=2&lt;br /&gt;
*Mention this history http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32+Changelog&lt;br /&gt;
*Update kdelibs.com pages; mark more pages as outdated&lt;br /&gt;
*Remove the wiki.kde.org pages afterwards leaving only link to the techbase.&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
    Announcement: Release of Amarok Beta 1 Nerrivik on Windows&lt;br /&gt;
&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;date&amp;gt;&lt;br /&gt;
	July 29th, 2008&lt;br /&gt;
&amp;lt;/date&amp;gt;&lt;br /&gt;
&amp;lt;fullstory&amp;gt;&lt;br /&gt;
    After some joint team efforts we are glad to announce that windows binaries for Amarok's&lt;br /&gt;
    first beta release are available via the installer.&lt;br /&gt;
    Please keep in mind that the quality of this software differs from its Linux counterpart&lt;br /&gt;
    and might only reach alpha level so far. Nevertheless we would be glad if you file all&lt;br /&gt;
    bugs you may find on &amp;lt;a href=&amp;quot;http://bugs.kde.org&amp;quot;&amp;gt;our bugzilla&amp;lt;/a&amp;gt;.&lt;br /&gt;
    The official release notes of the amarok team can be found &amp;lt;a href=&amp;quot;http://digg.com/software/Nerrivik_Beta_1_of_Amarok_2_0_released&amp;quot;&amp;gt;here&amp;lt;/a&amp;gt;.&lt;br /&gt;
    Try it out with the latest &amp;lt;a &lt;br /&gt;
href=&amp;quot;http://winkde.org/pub/kde/ports/win32/installer/&amp;quot;&amp;gt;kdewin-installer&amp;lt;/a&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
    (&amp;lt;i&amp;gt;&amp;lt;a href=&amp;quot;mailto:ps_ml[AT]gmx[DOT]de&amp;quot;&amp;gt;SE&amp;lt;/a&amp;gt;&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;/fullstory&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Policies/Kdelibs_Coding_Style</id>
		<title>Policies/Kdelibs Coding Style</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Policies/Kdelibs_Coding_Style"/>
				<updated>2008-08-03T20:23:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Artistic Style (astyle) automatic code formatting */  cc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the recommended coding style for kdelibs. Nobody is forced to use this style, but to have consistent formating of the source code files it is recommended to make use of it.&lt;br /&gt;
&lt;br /&gt;
'''In short: Kdelibs coding style follows the Qt 4 coding style.'''&lt;br /&gt;
&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* No tabs&lt;br /&gt;
* 4 Spaces instead of one tab&lt;br /&gt;
&lt;br /&gt;
== Variable declaration ==&lt;br /&gt;
* Each variable declaration on a new line&lt;br /&gt;
* Each new word in a variable name starts with a capital letter&lt;br /&gt;
* Avoid abbreviations&lt;br /&gt;
* Take useful names. No short names, except:&lt;br /&gt;
** Single character variable names can denote counters and temporary variables whose purpose is obvious&lt;br /&gt;
** Variables and functions start with a small letter&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
// wrong&lt;br /&gt;
KProgressBar *prbar;&lt;br /&gt;
QString prtxt, errstr;&lt;br /&gt;
&lt;br /&gt;
// correct&lt;br /&gt;
KProgressBar *downloadProgressBar;&lt;br /&gt;
QString progressText;&lt;br /&gt;
QString errorString;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Whitespace ==&lt;br /&gt;
* Use blank lines to group statements&lt;br /&gt;
* Use only one empty line&lt;br /&gt;
* Use one space after each keyword&lt;br /&gt;
* For pointers or references, use a single space before '*' or '&amp;amp;', but not after&lt;br /&gt;
* No space after a cast&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
// wrong&lt;br /&gt;
QString* myString;&lt;br /&gt;
if(true){&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// correct&lt;br /&gt;
QString *myString;&lt;br /&gt;
if (true) {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Braces ==&lt;br /&gt;
As a base rule, the left curly brace goes on the same line as the start of the statement.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
// wrong&lt;br /&gt;
if (true)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// correct&lt;br /&gt;
if (true) {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exception: Function implementations, class, struct and namespace declarations always have the opening brace on the start of a line.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
void debug(int i)&lt;br /&gt;
{&lt;br /&gt;
    qDebug(&amp;quot;foo: %i&amp;quot;, i);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Debug&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use curly braces even when the body of a conditional statement contains only one line.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
// wrong&lt;br /&gt;
if (true)&lt;br /&gt;
    return true;&lt;br /&gt;
&lt;br /&gt;
for (int i = 0; i &amp;lt; 10; ++i)&lt;br /&gt;
    qDebug(&amp;quot;%i&amp;quot;, i);&lt;br /&gt;
&lt;br /&gt;
// correct&lt;br /&gt;
if (true) {&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for (int i = 0; i &amp;lt; 10; ++i) {&lt;br /&gt;
    qDebug(&amp;quot;%i&amp;quot;, i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch statements ==&lt;br /&gt;
Case labels are on the same column as the switch&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
switch (myEnum) {&lt;br /&gt;
case Value1:&lt;br /&gt;
    doSomething();&lt;br /&gt;
    break;&lt;br /&gt;
case Value2:&lt;br /&gt;
    doSomethingElse();&lt;br /&gt;
    // fall through&lt;br /&gt;
default:&lt;br /&gt;
    defaultHandling();&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Line breaks ==&lt;br /&gt;
Try to keep lines shorter than 100 characters, inserting line breaks as necessary.&lt;br /&gt;
&lt;br /&gt;
== Artistic Style (astyle) automatic code formatting ==&lt;br /&gt;
You can use [http://astyle.sourceforge.net/ astyle] (&amp;gt;=1.19) to format code or to test if you have followed this document. Run the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
astyle --indent=spaces=4 --brackets=linux \&lt;br /&gt;
       --indent-labels --pad=oper --unpad=paren \&lt;br /&gt;
       --one-line=keep-statements --convert-tabs \&lt;br /&gt;
       --indent-preprocessor \&lt;br /&gt;
       `find -type f -name '*.cpp'` `find -type f -name '*.cc'` `find -type f -name '*.h'`&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A related shell script could be found for unix in [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/astyle-kdelibs kdesdk/scripts/astyle-kdelibs] and for windows in [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/astyle-kdelibs.bat kdesdk/scripts/astyle-kdelibs.bat].&lt;br /&gt;
&lt;br /&gt;
== Vim script ==&lt;br /&gt;
You can find a vim script in [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/kde-devel-vim.vim kdesdk/scripts/kde-devel-vim.vim] that helps you to keep the coding style correct. In addition to defaulting to the kdelibs coding style it will automatically use the correct style for Solid and kdepim code. If you want to add rules for other projects feel free to add them in the SetCodingStyle function.&lt;br /&gt;
&lt;br /&gt;
To use the script, include it in your {{path|~/.vimrc}} like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
source /path/to/kde/sources/kdesdk/scripts/kde-devel-vim.vim&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Document started by Urs Wolfer. Some parts of this document have been adopted from the Qt Coding Style document posted by Zack Rusin on kde-core-devel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]] [[Category:C++]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Issues/emerge</id>
		<title>Projects/KDE on Windows/Issues/emerge</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Issues/emerge"/>
				<updated>2008-07-16T10:25:33Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Issues with ''emerge'' ==&lt;br /&gt;
For system-dependent parts emerge should rely on the kdewin-installer package&lt;br /&gt;
*make the kdewin-installer work on the commandline and integrate into emerge&lt;br /&gt;
*integrate kdewin-menubuilder&lt;br /&gt;
*test for kdewin-* applications before using them&lt;br /&gt;
&lt;br /&gt;
== Some more functions that are needed ==&lt;br /&gt;
*find a better solution what to build (accept multiple targets at the commandline like the original emerge does)&lt;br /&gt;
*implement an update command which either updates the installed packages or which updates one package only&lt;br /&gt;
*make two packages possible: 'emerge-bin' and 'emerge-portage'.&lt;br /&gt;
*use another way to update the portage directory in future (rsync or similar)&lt;br /&gt;
&lt;br /&gt;
== Junior Jobs ==&lt;br /&gt;
=== Add missing documentation ===&lt;br /&gt;
There seem to be tons of options that were added but not yet documented - if someone has nothing to do or if you want to understand emerge better, you should start and document those options. The options are defined in emerge/bin/emerge.py so you should be able to find them easily.&lt;br /&gt;
&lt;br /&gt;
== Window manager ==&lt;br /&gt;
The idea is to replace the desktop and toolbtaskbar with something based on code from http://www.bb4win.org.&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-07-11T16:13:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]; see also [[#Alternative_solution|Alternative solution]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
{{FeatureDone|Usability: activate previous instances of unique apps|When another instance of unique appliaction is started, activate previous instance. This is what users expect.&amp;lt;br/&amp;gt;Moreover, if standalone application is running, e.g. KMail, and user clicked on &amp;quot;e-mail&amp;quot; component of Kontact, window of the standalone application is activated. ([http://websvn.kde.org/?view&amp;amp;#61;rev&amp;amp;revision&amp;amp;#61;827268 827268])|jstaniek}}&lt;br /&gt;
{{FeatureDone|Printing emails|Printing emails did not work ([https://www.intevation.de/roundup/kolab/issue2647 issue2647])|jstaniek}}&lt;br /&gt;
{{FeatureDone|Native &amp;quot;Open With&amp;quot; dialog on Windows|Native &amp;quot;Open With&amp;quot; dialog should be displayed on Windows by default. ([http://intevation.de/roundup/kolab/issue2766 issue2766])|jstaniek}}&lt;br /&gt;
{{FeatureDone|Windows mesage boxes take ages to come up|Some dialogs need a lot of time to pop up completly the first time. ([http://intevation.de/roundup/kolab/issue2708 issue2708], [http://intevation.de/roundup/kolab/issue2695 issue2695]); removed the delay by disabling KNotify use in message boxes (not very much used feature currently on Windows anyway).|jstaniek}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-07-07T21:48:03Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]; see also [[#Alternative_solution|Alternative solution]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
{{FeatureDone|Usability: activate previous instances of unique apps|When another instance of unique appliaction is started, activate previous instance. This is what users expect.&amp;lt;br/&amp;gt;Moreover, if standalone application is running, e.g. KMail, and user clicked on &amp;quot;e-mail&amp;quot; component of Kontact, window of the standalone application is activated.([http://websvn.kde.org/?view&amp;amp;#61;rev&amp;amp;revision&amp;amp;#61;827268 827268])|jstaniek}}&lt;br /&gt;
{{FeatureDone|Printing emails|Printing emails did not work ([https://www.intevation.de/roundup/kolab/issue2647 issue2647])|jstaniek}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-07-07T21:47:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]; see also [[#Alternative_solution|Alternative solution]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
{{FeatureDone|Usability: activate previous instances of unique apps|When another instance of unique appliaction is started, activate previous instance. This is what users expect.&amp;lt;br/&amp;gt;Moreover, if standalone application is running, e.g. KMail, and user clicked on &amp;quot;e-mail&amp;quot; component of Kontact, window of the standalone application is activated.([http://websvn.kde.org/?view&amp;amp;#61;rev&amp;amp;revision&amp;amp;#61;827268 827268])|jstaniek}}&lt;br /&gt;
{{FeatureDone|Printing emails|Printing emails did not work|jstaniek}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Software_Engineering_Framework</id>
		<title>Development/Software Engineering Framework</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Software_Engineering_Framework"/>
				<updated>2008-07-02T18:46:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended to be a summary of the tools used by the KDE&lt;br /&gt;
project for Software Engineering tasks, i.e. everything around coding work. This includes bugfixing, review, testing, documentation, requirements etc.&lt;br /&gt;
&lt;br /&gt;
The current tool used by KDE should be listed along with the extent of&lt;br /&gt;
its use, known alternatives, and advantages/disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development Tools ==&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Source Control&lt;br /&gt;
| currentState=&lt;br /&gt;
[http://websvn.kde.org/ Subversion 1.4] is used for source control management in KDE.&lt;br /&gt;
| people=&lt;br /&gt;
[http://wire.dattitu.de/authors/2-Dirk Dirk Muller] and the kde sysadmin team maintain the KDE SVN servers.&lt;br /&gt;
| futureWork=&lt;br /&gt;
There is interest in migrating to a distributed source control management tool, such as GIT. Discussion of this is taking place on the&lt;br /&gt;
[http://mail.kde.org/pipermail/kde-scm-interest kde-scm-interest]&lt;br /&gt;
mailing list.&lt;br /&gt;
| altTools=&lt;br /&gt;
* [http://git.or.cz/ git] &lt;br /&gt;
* [http://bazaar-vcs.org/ bazaar]&lt;br /&gt;
* [http://www.selenic.com/mercurial/ mercurial]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Build System&lt;br /&gt;
| currentState=&lt;br /&gt;
* [http://www.cmake.org/ CMake] is the current KDE build tool.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://www.kdedevelopers.org/blog/531 Alexander Neundorf]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Identifier search&lt;br /&gt;
| currentState=&lt;br /&gt;
http://lxr.kde.org is used for searching for existing use of classes in KDE.&lt;br /&gt;
| people=&lt;br /&gt;
* sysadmin@kde.org&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Review ==&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Patch review (pre commit)&lt;br /&gt;
| currentState=&lt;br /&gt;
* [http://reviewboard.vidsolbach.de/ Review-board] used by plasma project. In KDE in general this process does not take place, except for some specific patches which may be sent to the relevant mailing list.&lt;br /&gt;
* trunk/kdereview is used to review major new features and new applications prior to inclusion in KDE trunk.&lt;br /&gt;
| people=&lt;br /&gt;
David Solbach and the kde sysadmin team maintain the Plasma review-board installation.&lt;br /&gt;
| futureWork=&lt;br /&gt;
Review-board may be suitable for adoption by more of the KDE project, or by individual modules.&lt;br /&gt;
| altTools=&lt;br /&gt;
* Launchpad.net offers bug tracking via bugs.launchpad.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Commit review (after commit)&lt;br /&gt;
| currentState=&lt;br /&gt;
* [https://mail.kde.org/mailman/listinfo/kde-commits kde-commits] mailing list records all commits to KDE svn.&lt;br /&gt;
* The [http://commit-filter.org commit filter] is used to filter relevant commits based on path of the commit. This is used by several projects to forward commits to the relevant mailing list.&lt;br /&gt;
| altTools=&lt;br /&gt;
* Unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Design Review&lt;br /&gt;
| currentState=&lt;br /&gt;
Design review takes place on mailing lists/wikis and in face-to-face/BOF sessions at conferences and sprints.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Technical documentation&lt;br /&gt;
| currentState=&lt;br /&gt;
techbase.kde.org is a [http://www.mediawiki.org MediaWiki] powered web site used for collaborating on technical tasks such as tutorials, schedules, and project information.&lt;br /&gt;
| people=&lt;br /&gt;
* [[User:Danimo|Danimo]] is the MediaWiki admin for techbase.kde.org.&lt;br /&gt;
| futureWork=&lt;br /&gt;
* More [http://daniel.molkentin.de/blog/archives/116-KDE-TechBase-in-Need-of-Admins.html sysops for techbase] perhaps?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=API documentation&lt;br /&gt;
| currentState=&lt;br /&gt;
[http://www.stack.nl/~dimitri/doxygen/ Doxygen] is used to generate api documentation from documentation strings in code. It is generated nightly and hosted on http://api.kde.org.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://www.kdedevelopers.org/blog/1451 Allen Winter] administers api.kde.org.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=User documentation&lt;br /&gt;
| currentState=&lt;br /&gt;
[http://i18n.kde.org/docs/doc-primer/check-docs.html meinproc] is used to generate user documentation from module doc/ folders and is hosted on http://docs.kde.org.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Testing and Quality ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Bug tracking&lt;br /&gt;
| currentState=&lt;br /&gt;
Bug tracking in KDE is managed using [http://bugs.kde.org Bugzilla 2.x].&lt;br /&gt;
| people=&lt;br /&gt;
[http://mattr.info:8080/blog/?s=bugzilla Matt Rogers] and the kde sysadmin team maintain the KDE bugzilla installation.&lt;br /&gt;
| futureWork=&lt;br /&gt;
There is work being done on a transition to Bugzilla 3.0, which provides some additional features.&lt;br /&gt;
| altTools=&lt;br /&gt;
* Launchpad.net offers bug tracking via bugs.launchpad.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Static code analysis&lt;br /&gt;
| currentState=&lt;br /&gt;
[http://www.englishbreakfastnetwork.org/krazy/ Krazy] hosted at EnglishBreakfastNetwork (EBN) is used for static code analysis.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://people.fruitsalad.org/adridg/bobulate/ Adriaan de Groot] &lt;br /&gt;
* [http://www.kdedevelopers.org/blog/1451 Allen Winter] &lt;br /&gt;
| futureWork=&lt;br /&gt;
Additional checks are always welcome for adding to Krazy. See http://websvn.kde.org/trunk/quality/.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Build testing&lt;br /&gt;
| currentState=&lt;br /&gt;
* [http://developer.kde.org/~dirk/dashboard/ Continuous build server] reports broken builds on linux.&lt;br /&gt;
* [http://www.cdash.org/CDash/index.php?project=kdelibs CDash build server] stores results of non-linux builds (Windows, MacOS, FreeBSD, etc) for kdelibs.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://wire.dattitu.de/authors/2-Dirk Dirk Mueller] maintains the dashboard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Unit testing&lt;br /&gt;
| currentState=&lt;br /&gt;
[[Development/Tutorials/Unittests|Unit tests]] may be written with the QTest framework. Tests can be run with the command '&amp;lt;tt&amp;gt;make test&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
| futureWork=&lt;br /&gt;
Run the tests automatically. Possibly on EBN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Quality testing&lt;br /&gt;
| currentState=&lt;br /&gt;
The early adopter/user community tests beta versions of KDE. Additionally some work is done by SQO-OSS on quality in KDE.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://people.fruitsalad.org/adridg/bobulate/ Adriaan de Groot]&lt;br /&gt;
* [http://hemswell.lincoln.ac.uk/~padams/index.php Paul Adams]&lt;br /&gt;
| futureWork=&lt;br /&gt;
It may be possible to obtain metrics such as bugs per kloc, defect injection rate etc.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Profiling and Optimizations&lt;br /&gt;
| currentState=&lt;br /&gt;
* [http://mail.kde.org/mailman/listinfo/kde-optimize kde-optimize] mailing list coordinates optimizations in KDE.&lt;br /&gt;
* Krazy also includes some optimization checks.&lt;br /&gt;
| futureWork=&lt;br /&gt;
Tutorials?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Accessibility and Usability&lt;br /&gt;
| currentState=&lt;br /&gt;
* http://usability.kde.org/&lt;br /&gt;
* http://openusability.org/projects.php&lt;br /&gt;
* Season of usability&lt;br /&gt;
| people=&lt;br /&gt;
* [http://weblog.obso1337.org/ Celeste Lyn Paul]&lt;br /&gt;
* [http://ellen.reitmayr.net/index.php/blog Ellen Reitmayr]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Research&lt;br /&gt;
| currentState=&lt;br /&gt;
* http://research.kde.org&lt;br /&gt;
| people=&lt;br /&gt;
* [http://people.fruitsalad.org/adridg/bobulate/ Adriaan de Groot]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Marketing and Expectations ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Requirements Gathering&lt;br /&gt;
| currentState=&lt;br /&gt;
* Requirements come from user feedback on http://bugs.kde.org and from commercial interests.&lt;br /&gt;
* Developers may do some research into requirements for applications based on User Research Profiles.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Promotion&lt;br /&gt;
| currentState=&lt;br /&gt;
* The [https://mail.kde.org/mailman/listinfo/kde-promo KDE marketing team] manage marketing and promotion from official kde sources.&lt;br /&gt;
* http://dot.kde.org is the community forum around promotional announcements.&lt;br /&gt;
* http://www.kde.org/announcements is the official source of promotional announcements regarding KDE.&lt;br /&gt;
* Design and maintenance of KDE websites is organised on the [https://mail.kde.org/mailman/listinfo/kde-www kde-www mailing list]&lt;br /&gt;
| people=&lt;br /&gt;
* [http://wadejolson.wordpress.com/ Wade Olsen]&lt;br /&gt;
* [http://troy-at-kde.livejournal.com/ Troy Unrau]&lt;br /&gt;
* [http://nowwhatthe.blogspot.com/ Jos Poortvliet]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Community management&lt;br /&gt;
| currentState=&lt;br /&gt;
A community management group is being worked on.&lt;br /&gt;
| futureWork=&lt;br /&gt;
* Moderation on some community portals.&lt;br /&gt;
* Mediation&lt;br /&gt;
* A code of conduct?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Release Scheduling&lt;br /&gt;
| currentState=&lt;br /&gt;
The [https://mail.kde.org/mailman/listinfo/kde-release-team release team mailing list] is used for release planning, and release plans maintained on techbase at [[Schedules]].&lt;br /&gt;
| people=&lt;br /&gt;
[https://mail.kde.org/mailman/listinfo/release-team The KDE release team]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Feature planning&lt;br /&gt;
| currentState=&lt;br /&gt;
techbase.kde.org is currently used for feature planning, specifically [[Schedules/KDE4/4.1_Feature_Plan]] etc.&lt;br /&gt;
| people=&lt;br /&gt;
[https://mail.kde.org/mailman/listinfo/release-team The KDE release team]&lt;br /&gt;
| altTools=&lt;br /&gt;
* Launchpad.net offers a blueprints system.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theming and Translations ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Artwork&lt;br /&gt;
| currentState=&lt;br /&gt;
The [http://mail.kde.org/mailman/listinfo/kde-artists kde-artists team] creates offical artwork for KDE. Additional contributed artwork is available on http://kde-look.org.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://pinheiro-kde.blogspot.com/ Nuno Pinheiro]&lt;br /&gt;
| futureWork=&lt;br /&gt;
Tutorials on how to create artwork for kde?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Translation&lt;br /&gt;
| currentState=&lt;br /&gt;
* http://i18n.kde.org/ is used for level of completion of translations in KDE.&lt;br /&gt;
* GNU gettext is used for translation in KDE.&lt;br /&gt;
* &amp;lt;tt&amp;gt;.po&amp;lt;/tt&amp;gt; files are edited directly in KDE svn to update translations.&lt;br /&gt;
* A kde4 based translation client (lokalize) is being developed in kdesdk/.&lt;br /&gt;
* Krazy includes sanity checks/plurals checking for translation.&lt;br /&gt;
| altTools=&lt;br /&gt;
launchpad.net features a web-based tool called rosetta, which allows for easier fly-by translations.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Software_Engineering_Framework</id>
		<title>Development/Software Engineering Framework</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Software_Engineering_Framework"/>
				<updated>2008-07-02T18:44:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended to be a summary of the tools used by the KDE&lt;br /&gt;
project for Software Engineering tasks, i.e. everything around coding work. This includes bugfixing, review, testing, documentation, requirements etc.&lt;br /&gt;
&lt;br /&gt;
The current tool used by KDE should be listed along with the extent of&lt;br /&gt;
its use, known alternatives, and advantages/disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development Tools ==&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Source Control&lt;br /&gt;
| currentState=&lt;br /&gt;
[http://websvn.kde.org/ Subversion 1.4] is used for source control management in KDE.&lt;br /&gt;
| people=&lt;br /&gt;
[http://wire.dattitu.de/authors/2-Dirk Dirk Muller] and the kde sysadmin team maintain the KDE SVN servers.&lt;br /&gt;
| futureWork=&lt;br /&gt;
There is interest in migrating to a distributed source control management tool, such as GIT. Discussion of this is taking place on the&lt;br /&gt;
[http://mail.kde.org/pipermail/kde-scm-interest kde-scm-interest]&lt;br /&gt;
mailing list.&lt;br /&gt;
| altTools=&lt;br /&gt;
* [http://git.or.cz/ git] &lt;br /&gt;
* [http://bazaar-vcs.org/ bazaar]&lt;br /&gt;
* [http://www.selenic.com/mercurial/ mercurial]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Build System&lt;br /&gt;
| currentState=&lt;br /&gt;
* [http://www.cmake.org/ CMake] is the current KDE build tool.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://www.kdedevelopers.org/blog/531 Alexander Neundorf]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Identifier search&lt;br /&gt;
| currentState=&lt;br /&gt;
http://lxr.kde.org is used for searching for existing use of classes in KDE.&lt;br /&gt;
| people=&lt;br /&gt;
* sysadmin@kde.org&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Review ==&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Patch review (pre commit)&lt;br /&gt;
| currentState=&lt;br /&gt;
* [http://reviewboard.vidsolbach.de/ Review-board] used by plasma project. In KDE in general this process does not take place, except for some specific patches which may be sent to the relevant mailing list.&lt;br /&gt;
* trunk/kdereview is used to review major new features and new applications prior to inclusion in KDE trunk.&lt;br /&gt;
| people=&lt;br /&gt;
David Solbach and the kde sysadmin team maintain the Plasma review-board installation.&lt;br /&gt;
| futureWork=&lt;br /&gt;
Review-board may be suitable for adoption by more of the KDE project, or by individual modules.&lt;br /&gt;
| altTools=&lt;br /&gt;
* Launchpad.net offers bug tracking via bugs.launchpad.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Commit review (after commit)&lt;br /&gt;
| currentState=&lt;br /&gt;
* [https://mail.kde.org/mailman/listinfo/kde-commits kde-commits] mailing list records all commits to KDE svn.&lt;br /&gt;
* The [http://commit-filter.org commit filter] is used to filter relevant commits based on path of the commit. This is used by several projects to forward commits to the relevant mailing list.&lt;br /&gt;
| altTools=&lt;br /&gt;
* Unknown&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Design Review&lt;br /&gt;
| currentState=&lt;br /&gt;
Design review takes place on mailing lists/wikis and in face-to-face/BOF sessions at conferences and sprints.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Technical documentation&lt;br /&gt;
| currentState=&lt;br /&gt;
techbase.kde.org is a [http://www.mediawiki.org MediaWiki] powered web site used for collaborating on technical tasks such as tutorials, schedules, and project information.&lt;br /&gt;
| people=&lt;br /&gt;
* [[User:Danimo|Danimo]] is the MediaWiki admin for techbase.kde.org.&lt;br /&gt;
| futureWork=&lt;br /&gt;
* More [http://daniel.molkentin.de/blog/archives/116-KDE-TechBase-in-Need-of-Admins.html sysops for techbase] perhaps?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=API documentation&lt;br /&gt;
| currentState=&lt;br /&gt;
doxygen is used to generate api documentation from documentation strings in code. It is generated nightly and hosted on http://api.kde.org.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://www.kdedevelopers.org/blog/1451 Allen Winter] administers api.kde.org.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=User documentation&lt;br /&gt;
| currentState=&lt;br /&gt;
meinproc is used to generate user documentation from module doc/ folders and is hosted on http://docs.kde.org.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Testing and Quality ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Bug tracking&lt;br /&gt;
| currentState=&lt;br /&gt;
Bug tracking in KDE is managed using [http://bugs.kde.org Bugzilla 2.x].&lt;br /&gt;
| people=&lt;br /&gt;
[http://mattr.info:8080/blog/?s=bugzilla Matt Rogers] and the kde sysadmin team maintain the KDE bugzilla installation.&lt;br /&gt;
| futureWork=&lt;br /&gt;
There is work being done on a transition to Bugzilla 3.0, which provides some additional features.&lt;br /&gt;
| altTools=&lt;br /&gt;
* Launchpad.net offers bug tracking via bugs.launchpad.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Static code analysis&lt;br /&gt;
| currentState=&lt;br /&gt;
[http://www.englishbreakfastnetwork.org/krazy/ Krazy] hosted at EnglishBreakfastNetwork (EBN) is used for static code analysis.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://people.fruitsalad.org/adridg/bobulate/ Adriaan de Groot] &lt;br /&gt;
* [http://www.kdedevelopers.org/blog/1451 Allen Winter] &lt;br /&gt;
| futureWork=&lt;br /&gt;
Additional checks are always welcome for adding to Krazy. See http://websvn.kde.org/trunk/quality/.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Build testing&lt;br /&gt;
| currentState=&lt;br /&gt;
* [http://developer.kde.org/~dirk/dashboard/ Continuous build server] reports broken builds on linux.&lt;br /&gt;
* [http://www.cdash.org/CDash/index.php?project=kdelibs CDash build server] stores results of non-linux builds (Windows, MacOS, FreeBSD, etc) for kdelibs.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://wire.dattitu.de/authors/2-Dirk Dirk Mueller] maintains the dashboard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Unit testing&lt;br /&gt;
| currentState=&lt;br /&gt;
[[Development/Tutorials/Unittests|Unit tests]] may be written with the QTest framework. Tests can be run with the command '&amp;lt;tt&amp;gt;make test&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
| futureWork=&lt;br /&gt;
Run the tests automatically. Possibly on EBN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Quality testing&lt;br /&gt;
| currentState=&lt;br /&gt;
The early adopter/user community tests beta versions of KDE. Additionally some work is done by SQO-OSS on quality in KDE.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://people.fruitsalad.org/adridg/bobulate/ Adriaan de Groot]&lt;br /&gt;
* [http://hemswell.lincoln.ac.uk/~padams/index.php Paul Adams]&lt;br /&gt;
| futureWork=&lt;br /&gt;
It may be possible to obtain metrics such as bugs per kloc, defect injection rate etc.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Profiling and Optimizations&lt;br /&gt;
| currentState=&lt;br /&gt;
* [http://mail.kde.org/mailman/listinfo/kde-optimize kde-optimize] mailing list coordinates optimizations in KDE.&lt;br /&gt;
* Krazy also includes some optimization checks.&lt;br /&gt;
| futureWork=&lt;br /&gt;
Tutorials?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Accessibility and Usability&lt;br /&gt;
| currentState=&lt;br /&gt;
* http://usability.kde.org/&lt;br /&gt;
* http://openusability.org/projects.php&lt;br /&gt;
* Season of usability&lt;br /&gt;
| people=&lt;br /&gt;
* [http://weblog.obso1337.org/ Celeste Lyn Paul]&lt;br /&gt;
* [http://ellen.reitmayr.net/index.php/blog Ellen Reitmayr]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Research&lt;br /&gt;
| currentState=&lt;br /&gt;
* http://research.kde.org&lt;br /&gt;
| people=&lt;br /&gt;
* [http://people.fruitsalad.org/adridg/bobulate/ Adriaan de Groot]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Marketing and Expectations ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Requirements Gathering&lt;br /&gt;
| currentState=&lt;br /&gt;
* Requirements come from user feedback on http://bugs.kde.org and from commercial interests.&lt;br /&gt;
* Developers may do some research into requirements for applications based on User Research Profiles.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Promotion&lt;br /&gt;
| currentState=&lt;br /&gt;
* The [https://mail.kde.org/mailman/listinfo/kde-promo KDE marketing team] manage marketing and promotion from official kde sources.&lt;br /&gt;
* http://dot.kde.org is the community forum around promotional announcements.&lt;br /&gt;
* http://www.kde.org/announcements is the official source of promotional announcements regarding KDE.&lt;br /&gt;
* Design and maintenance of KDE websites is organised on the [https://mail.kde.org/mailman/listinfo/kde-www kde-www mailing list]&lt;br /&gt;
| people=&lt;br /&gt;
* [http://wadejolson.wordpress.com/ Wade Olsen]&lt;br /&gt;
* [http://troy-at-kde.livejournal.com/ Troy Unrau]&lt;br /&gt;
* [http://nowwhatthe.blogspot.com/ Jos Poortvliet]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Community management&lt;br /&gt;
| currentState=&lt;br /&gt;
A community management group is being worked on.&lt;br /&gt;
| futureWork=&lt;br /&gt;
* Moderation on some community portals.&lt;br /&gt;
* Mediation&lt;br /&gt;
* A code of conduct?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Release Scheduling&lt;br /&gt;
| currentState=&lt;br /&gt;
The [https://mail.kde.org/mailman/listinfo/kde-release-team release team mailing list] is used for release planning, and release plans maintained on techbase at [[Schedules]].&lt;br /&gt;
| people=&lt;br /&gt;
[https://mail.kde.org/mailman/listinfo/release-team The KDE release team]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Feature planning&lt;br /&gt;
| currentState=&lt;br /&gt;
techbase.kde.org is currently used for feature planning, specifically [[Schedules/KDE4/4.1_Feature_Plan]] etc.&lt;br /&gt;
| people=&lt;br /&gt;
[https://mail.kde.org/mailman/listinfo/release-team The KDE release team]&lt;br /&gt;
| altTools=&lt;br /&gt;
* Launchpad.net offers a blueprints system.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theming and Translations ==&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Artwork&lt;br /&gt;
| currentState=&lt;br /&gt;
The [http://mail.kde.org/mailman/listinfo/kde-artists kde-artists team] creates offical artwork for KDE. Additional contributed artwork is available on http://kde-look.org.&lt;br /&gt;
| people=&lt;br /&gt;
* [http://pinheiro-kde.blogspot.com/ Nuno Pinheiro]&lt;br /&gt;
| futureWork=&lt;br /&gt;
Tutorials on how to create artwork for kde?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SEFBox&lt;br /&gt;
| name=Translation&lt;br /&gt;
| currentState=&lt;br /&gt;
* http://i18n.kde.org/ is used for level of completion of translations in KDE.&lt;br /&gt;
* GNU gettext is used for translation in KDE.&lt;br /&gt;
* &amp;lt;tt&amp;gt;.po&amp;lt;/tt&amp;gt; files are edited directly in KDE svn to update translations.&lt;br /&gt;
* A kde4 based translation client (lokalize) is being developed in kdesdk/.&lt;br /&gt;
* Krazy includes sanity checks/plurals checking for translation.&lt;br /&gt;
| altTools=&lt;br /&gt;
launchpad.net features a web-based tool called rosetta, which allows for easier fly-by translations.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-07-02T13:36:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]; see also [[#Alternative_solution|Alternative solution]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
{{FeatureDone|Usability: activate previous instances of unique apps|When another instance of unique appliaction is started, activate previous instance. This is what users expect.&amp;lt;br/&amp;gt;Moreover, if standalone application is running, e.g. KMail, and user clicked on &amp;quot;e-mail&amp;quot; component of Kontact, window of the standalone application is activated.([http://websvn.kde.org/?view&amp;amp;#61;rev&amp;amp;revision&amp;amp;#61;827268 827268])|jstaniek}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/Building_DBus</id>
		<title>Getting Started/Build/Windows/Building DBus</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/Building_DBus"/>
				<updated>2008-07-02T09:25:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First, be sure you have installed [http://techbase.kde.org/Getting_Started/Build/KDE4/Windows/3rd-party_libraries win32libs].&lt;br /&gt;
&lt;br /&gt;
Instructions below apply to msvc and mingw.&lt;br /&gt;
&lt;br /&gt;
'''msvc and mingw:''' Either&lt;br /&gt;
*Download the latest [http://sourceforge.net/project/showfiles.php?group_id=171968 winDBus sources] (which are already patched) and extract them into place like &amp;lt;tt&amp;gt;C:\svn\windbus&amp;lt;/tt&amp;gt;, or&lt;br /&gt;
*Get the latest [http://sourceforge.net/svn/?group_id=171968 svn sources]; in this case use&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;svn co https://windbus.svn.sourceforge.net/svnroot/windbus/trunk windbus&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''msvc and mingw:''' Creating the build dir. Once you have the source code,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd c:\svn\windbus&lt;br /&gt;
patch -p0 &amp;lt; DBus-win32.patch&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir windbus-build&lt;br /&gt;
cd windbus-build&lt;br /&gt;
cmake -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\windbus\cmake\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use &amp;lt;tt&amp;gt;-G &amp;quot;MinGW Makefiles&amp;quot;&amp;lt;/tt&amp;gt; for the mingw compiler)&lt;br /&gt;
&lt;br /&gt;
'''msvc and mingw:''' for debug build, add -DCMAKE_BUILD_TYPE=Debug before &amp;quot;-G&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''msvc:''' &amp;lt;tt&amp;gt;dbus.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. You can switch between the Debug and Release configuration in the &lt;br /&gt;
&amp;lt;tt&amp;gt;Build -&amp;gt; Configuration Manager&amp;lt;/tt&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
'''msvc tip:''' to perform compilation and installation from the command line, type:&lt;br /&gt;
 devenv /build Debug /project INSTALL dbus.sln&lt;br /&gt;
 devenv /build Release /project INSTALL dbus.sln&lt;br /&gt;
&lt;br /&gt;
'''msvc:''' then use&amp;lt;pre&amp;gt;&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(in the build directory)&lt;br /&gt;
&lt;br /&gt;
'''mingw:''' then use&amp;lt;pre&amp;gt;&lt;br /&gt;
mingw32-make&lt;br /&gt;
mingw32-make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(in the build directory)&lt;br /&gt;
&lt;br /&gt;
Default target for the installation is &amp;lt;tt&amp;gt;%PROGRAMFILES%\dbus&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/Building_DBus</id>
		<title>Getting Started/Build/Windows/Building DBus</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/Building_DBus"/>
				<updated>2008-07-02T09:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First, be sure you have installed [http://techbase.kde.org/Getting_Started/Build/KDE4/Windows/3rd-party_libraries win32libs].&lt;br /&gt;
&lt;br /&gt;
Instructions below apply to msvc and mingw.&lt;br /&gt;
&lt;br /&gt;
'''msvc and mingw:''' Either&lt;br /&gt;
*Download the latest [http://sourceforge.net/project/showfiles.php?group_id=171968 winDBus sources] (which are already patched) and extract them into place like &amp;lt;tt&amp;gt;C:\svn\windbus&amp;lt;/tt&amp;gt;, or&lt;br /&gt;
*Get the latest [http://sourceforge.net/svn/?group_id=171968 svn sources]; in this case use&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;svn co https://windbus.svn.sourceforge.net/svnroot/windbus/trunk windbus&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''msvc and mingw:''' Creating the build dir. Once you have the source code,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd c:\svn\windbus&lt;br /&gt;
patch -p0 &amp;lt; DBus-win32.patch&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir windbus-build&lt;br /&gt;
cd windbus-build&lt;br /&gt;
cmake -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\windbus\cmake\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use &amp;lt;tt&amp;gt;-G &amp;quot;MinGW Makefiles&amp;quot;&amp;lt;/tt&amp;gt; for the mingw compiler)&lt;br /&gt;
&lt;br /&gt;
'''msvc and mingw:''' for debug builds, add -DCMAKE_BUILD_TYPE=Debug before &amp;quot;-G&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''msvc:''' &amp;lt;tt&amp;gt;dbus.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. You can switch between the Debug and Release configuration in the &lt;br /&gt;
&amp;lt;tt&amp;gt;Build -&amp;gt; Configuration Manager&amp;lt;/tt&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
'''msvc tip:''' to perform compilation and installation from the command line, type:&lt;br /&gt;
 devenv /build Debug /project INSTALL dbus.sln&lt;br /&gt;
 devenv /build Release /project INSTALL dbus.sln&lt;br /&gt;
&lt;br /&gt;
'''msvc:''' then use&amp;lt;pre&amp;gt;&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(in the build directory)&lt;br /&gt;
&lt;br /&gt;
'''mingw:''' then use&amp;lt;pre&amp;gt;&lt;br /&gt;
mingw32-make&lt;br /&gt;
mingw32-make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(in the build directory)&lt;br /&gt;
&lt;br /&gt;
Default target for the installation is &amp;lt;tt&amp;gt;%PROGRAMFILES%\dbus&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/Building_DBus</id>
		<title>Getting Started/Build/Windows/Building DBus</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/Building_DBus"/>
				<updated>2008-07-02T09:09:07Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First, be sure you have installed [http://techbase.kde.org/Getting_Started/Build/KDE4/Windows/3rd-party_libraries win32libs].&lt;br /&gt;
&lt;br /&gt;
Instructions below apply to msvc and mingw.&lt;br /&gt;
&lt;br /&gt;
'''msvc and mingw:''' Either&lt;br /&gt;
*Download the latest [http://sourceforge.net/project/showfiles.php?group_id=171968 winDBus sources] (which are already patched) and extract them into place like &amp;lt;tt&amp;gt;C:\svn\windbus&amp;lt;/tt&amp;gt;, or&lt;br /&gt;
*Get the latest [http://sourceforge.net/svn/?group_id=171968 svn sources]; in this case use&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;svn co https://windbus.svn.sourceforge.net/svnroot/windbus/trunk windbus&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''msvc and mingw:''' Creating the build dir. Once you have the source code,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd c:\svn\windbus&lt;br /&gt;
patch -p0 &amp;lt; DBus-win32.patch&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir windbus-build&lt;br /&gt;
cd windbus-build&lt;br /&gt;
cmake -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\windbus\cmake\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use &amp;lt;tt&amp;gt;-G &amp;quot;MinGW Makefiles&amp;quot;&amp;lt;/tt&amp;gt; for the mingw compiler)&lt;br /&gt;
&lt;br /&gt;
'''msvc:''' &amp;lt;tt&amp;gt;dbus.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. You can switch between the Debug and Release configuration in the &lt;br /&gt;
&amp;lt;tt&amp;gt;Build -&amp;gt; Configuration Manager&amp;lt;/tt&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
'''msvc tip:''' to perform compilation and installation from the command line, type:&lt;br /&gt;
 devenv /build Debug /project INSTALL dbus.sln&lt;br /&gt;
 devenv /build Release /project INSTALL dbus.sln&lt;br /&gt;
&lt;br /&gt;
'''msvc:''' then use&amp;lt;pre&amp;gt;&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(in the build directory)&lt;br /&gt;
&lt;br /&gt;
'''mingw:''' then use&amp;lt;pre&amp;gt;&lt;br /&gt;
mingw32-make&lt;br /&gt;
mingw32-make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(in the build directory)&lt;br /&gt;
&lt;br /&gt;
Default target for the installation is &amp;lt;tt&amp;gt;%PROGRAMFILES%\dbus&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Build/Windows/Building_DBus</id>
		<title>Getting Started/Build/Windows/Building DBus</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Build/Windows/Building_DBus"/>
				<updated>2008-07-02T09:07:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First, be sure you have installed [http://techbase.kde.org/Getting_Started/Build/KDE4/Windows/3rd-party_libraries win32libs].&lt;br /&gt;
&lt;br /&gt;
*Download the latest [http://sourceforge.net/project/showfiles.php?group_id=171968 winDBus sources] (which are already patched) and extract them into place like &amp;lt;tt&amp;gt;C:\svn\windbus&amp;lt;/tt&amp;gt;, or&lt;br /&gt;
*Get the latest [http://sourceforge.net/svn/?group_id=171968 svn sources]; in this case use&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;svn co https://windbus.svn.sourceforge.net/svnroot/windbus/trunk windbus&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have the source code,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd c:\svn\windbus&lt;br /&gt;
patch -p0 &amp;lt; DBus-win32.patch&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir windbus-build&lt;br /&gt;
cd windbus-build&lt;br /&gt;
cmake -G &amp;quot;Visual Studio 8 2005&amp;quot; ..\windbus\cmake\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(use &amp;lt;tt&amp;gt;-G &amp;quot;MinGW Makefiles&amp;quot;&amp;lt;/tt&amp;gt; for the mingw compiler)&lt;br /&gt;
&lt;br /&gt;
'''msvc:''' &amp;lt;tt&amp;gt;dbus.sln&amp;lt;/tt&amp;gt; solution file will be created. Build and '''install''' the Debug and Release builds with the IDE. You can switch between the Debug and Release configuration in the &lt;br /&gt;
&amp;lt;tt&amp;gt;Build -&amp;gt; Configuration Manager&amp;lt;/tt&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
'''msvc tip:''' to perform compilation and installation from the command line, type:&lt;br /&gt;
 devenv /build Debug /project INSTALL dbus.sln&lt;br /&gt;
 devenv /build Release /project INSTALL dbus.sln&lt;br /&gt;
&lt;br /&gt;
'''msvc:''' then use&amp;lt;pre&amp;gt;&lt;br /&gt;
nmake&lt;br /&gt;
nmake install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(in the build directory)&lt;br /&gt;
&lt;br /&gt;
'''mingw:''' then use&amp;lt;pre&amp;gt;&lt;br /&gt;
mingw32-make&lt;br /&gt;
mingw32-make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(in the build directory)&lt;br /&gt;
&lt;br /&gt;
Default target for the installation is &amp;lt;tt&amp;gt;%PROGRAMFILES%\dbus&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-07-01T13:27:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Checklist */  escape with &amp;amp;#61;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]; see also [[#Alternative_solution|Alternative solution]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
{{FeatureDone|Usability: activate previous instances of unique apps|When another instance of unique appliaction is started, activate previous instance. This is what users expect.&amp;lt;br/&amp;gt;Moreover, if standalone application is running, e.g. KMail, and user clicked on &amp;quot;e-mail&amp;quot; component of Kontact, window of the standalone application is activated.([http://websvn.kde.org/?view&amp;amp;#61;rev&amp;amp;revision&amp;amp;#61;826800 r826800])|jstaniek}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-07-01T13:25:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]; see also [[#Alternative_solution|Alternative solution]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
{{FeatureDone|Usability: activate previous instances of unique apps|When another instance of unique appliaction is started, activate previous instance. This is what users expect.&amp;lt;br/&amp;gt;Moreover, if standalone application is running, e.g. KMail, and user clicked on &amp;quot;e-mail&amp;quot; component of Kontact, window of the standalone application is activated.([http://websvn.kde.org/?view=rev&amp;amp;revision=826800 r826800])|jstaniek}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-07-01T13:22:52Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]; see also [[#Alternative_solution|Alternative solution]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
{{FeatureDone|Usability: activate previous instances of unique apps|When another instance of unique appliaction is started, activate previous instance. This is what users expect.&amp;lt;br/&amp;gt;Moreover, if standalone application is running, e.g. KMail, and user clicked on &amp;quot;e-mail&amp;quot; component of Kontact, window of the standalone application is activated.|jstaniek}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/File:Igta.png</id>
		<title>File:Igta.png</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/File:Igta.png"/>
				<updated>2008-06-27T22:30:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/KDE_on_Windows/Issues</id>
		<title>Projects/KDE on Windows/Issues</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/KDE_on_Windows/Issues"/>
				<updated>2008-06-26T15:35:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* Killing KDE Processes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[/emerge|''emerge'' tool]]&lt;br /&gt;
* [[/kdewin-installer|kdewin-installer]]&lt;br /&gt;
* [[/MSVC|Using MSVC compiler and editor]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Disabling automatic generation of Start Menu entries==&lt;br /&gt;
KDE on Windows provides a (kded) plugin for automatic generation of Start Menu entries for KDE applications. If for whatever reason you want to disable it:&lt;br /&gt;
#edit (or create if it does not exist) kde4/share/config/kwinstartmenurc file (not that it has no name extension)&lt;br /&gt;
#place the following two lines in it:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may need to stop (or kill) all the KDE processes in order to use the new setting. It is planned to add appropriate setting on the forthcoming KDE's &amp;quot;Integration&amp;quot; system settings page.&lt;br /&gt;
&lt;br /&gt;
==File Locking - WerFault.exe==&lt;br /&gt;
[http://www.whatsrunning.net/whatsrunning/QueryProcessID.aspx?Process=15663 WerFault.exe] is a process handling ''Windows Problem Reporting'' feature. Sometimes it may drive you crazy because it can lock your files, while you (or a KDE app) want to rename or remove. For me this was the case with files of KMail's MailDir storage.&lt;br /&gt;
&lt;br /&gt;
If you're developer, you'll most obviously encounter many crashes with your developed applications. On any crash, annoying popup appears and says &amp;quot;This program has stopped responding&amp;quot; they it says something about Windows will try to find a solution and fix it. Of course '''this is a joke''', so it is good to disable ''Windows Problem Reporting''. On Vista: open the Control Panel, open the Problem Reports &amp;amp; Solutions applet, wnder the Advanced option you can disable problem reporting. For XP or Windows 2003, read [http://www.windowsnetworking.com/articles_tutorials/Disable-Error-Reporting-Windows-XP-Server-2003.html here].&lt;br /&gt;
&lt;br /&gt;
==Killing KDE Processes==&lt;br /&gt;
While it is easy to close applications as these have windows and have close buttons, there are (quite frequent) cases when you have to kill invisible &amp;quot;system&amp;quot; KDE processes. The two most important reasons are:&lt;br /&gt;
*you want to (re)compile a library or application but you would not be able to install it because Windows locks write access to the binaries that are running&lt;br /&gt;
*you need to restart dbus-daemon process in order to disconnect connections made by KUniqueApplication's; this is because of Windows-specific problem with not terminating them after the application stops working and/or gets killed itself&lt;br /&gt;
&lt;br /&gt;
You can use &amp;lt;tt&amp;gt;taskkill&amp;lt;/tt&amp;gt; command, which has quite complicated arguments. So you can define a &amp;lt;tt&amp;gt;kdekill&amp;lt;/tt&amp;gt; command. Paste the following lines to a file like {KDEDIR}/bin/kdekill.bat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
taskkill /T /F /fi &amp;quot;imagename eq klauncher*&amp;quot;&lt;br /&gt;
taskkill /T /fi &amp;quot;imagename eq dbus-daemon*&amp;quot;&lt;br /&gt;
taskkill /T /fi &amp;quot;imagename eq kde*&amp;quot;&lt;br /&gt;
taskkill /T /fi &amp;quot;imagename eq kded*&amp;quot;&lt;br /&gt;
taskkill /T /fi &amp;quot;imagename eq kioslave*&amp;quot;&lt;br /&gt;
taskkill /T /fi &amp;quot;imagename eq knotify*&amp;quot;&lt;br /&gt;
taskkill /T /fi &amp;quot;imagename eq korgac*&amp;quot;&lt;br /&gt;
taskkill /fi &amp;quot;imagename eq kded*&amp;quot;&lt;br /&gt;
taskkill /T /F /fi &amp;quot;imagename eq kded*&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you can just type &amp;lt;tt&amp;gt;kdekill&amp;lt;/tt&amp;gt;, to get result like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUCCESS: Sent termination signal to process with PID 832, child of PID 2372.&lt;br /&gt;
SUCCESS: Sent termination signal to process with PID 2692, child of PID 2580.&lt;br /&gt;
SUCCESS: Sent termination signal to process with PID 2684, child of PID 480.&lt;br /&gt;
SUCCESS: Sent termination signal to process with PID 480, child of PID 2580.&lt;br /&gt;
SUCCESS: Sent termination signal to process with PID 2692, child of PID 2580.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feel free to extend it for your specific needs.&lt;br /&gt;
&lt;br /&gt;
Note 1: klauncher sometimes refuses to terminate...&lt;br /&gt;
&lt;br /&gt;
Note 2: we hope to address the above issues with KUniqueApplication and dbus-daemon in a cleaner and more automated way...&lt;br /&gt;
&lt;br /&gt;
==Ideas==&lt;br /&gt;
* Look at http://emergedesktop.org/ for integration ideas.&lt;br /&gt;
&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-06-24T17:49:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* The Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]; see also [[#Alternative_solution|Alternative solution]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-06-24T17:48:48Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* &amp;quot;Locked&amp;quot; dbus-daemon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Download SASL for mingw and msvc====&lt;br /&gt;
Download SASL library and plugins for mingw and msvc. Here's link, this time uploaded to the wiki (TODO move it to the kde windows server): http://kexi-project.org/download/cyrus-sasl2-2008-04.zip. The archive provides directory structure, so you'll know where to unpack these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hot fixes to apply===&lt;br /&gt;
Please apply these fixes in order to avoid crashes in related KDE componenets.&lt;br /&gt;
====Crashes in korgac====&lt;br /&gt;
Update: this step is not needed since r806657.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;strike&amp;gt;KOrganizer's reminder daemon (korgac) crashes on Windows because of recent commit. A quick fix is to go to kdelibs/ source directory and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;svn up -r 795533 kdeui/util/ksystemtrayicon.cpp&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile and install the kdelibs.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Crashes in KDED====&lt;br /&gt;
We sometimes need to disable creation and automatic maintenance of the KDE menu entry in the Start Menu. To do this, we can add these lines to the $KDEROOT/share/config/kwinstartmenurc file on deployment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Enabled=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: just download the file: [https://www.intevation.de/roundup/kolab/file799/kwinstartmenurc kwinstartmenurc] and save it to the $KDEROOT/share/config/ directory.&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Locked&amp;quot; dbus-daemon====&lt;br /&gt;
History:&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 18:12, 27 May 2008 (CEST): initial version for enterprise4 branch; emerge package: kdepim-branch&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:03, 28 May 2008 (CEST): update for David's commit r813498 &amp;quot;Ported Kontact::UniqueAppHandler to DBUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Introduction: upon application crash (for whatever reason), dbus-daemon (happens on Windows only) does not unregister unused service(s). Subsequent execution of the same application causes ''KUniqueApplication: Can't setup D-Bus service. Probably already running'' error and immediate exit with no visible feedback.&lt;br /&gt;
&lt;br /&gt;
Reported as http://intevation.de/roundup/kolab/issue2639&lt;br /&gt;
&lt;br /&gt;
Past workaround: manual killing dbus-daemon.&lt;br /&gt;
&lt;br /&gt;
Rationale for the new workaround: make KDEPIM more suitable for demonstrating, without executing cryptic commands.&lt;br /&gt;
&lt;br /&gt;
Workaround: If registering dbus service for KUniqueApplication (e.g. &amp;quot;org.kde.kmail&amp;quot;) failed, do not exit immediately but instead:&lt;br /&gt;
# look if there's a process with the same name (e.g. kmail) running, if so exit with no action&lt;br /&gt;
# if there's no process with the same name, kill dbus-daemon (first, using SIGTERM, then SIGKILL), then restart the application with exactly the same arguments and the same current working directory.&lt;br /&gt;
&lt;br /&gt;
Recipe: apply [http://www.intevation.de/roundup/kolab/file806/kuniqueapplication.patch kuniqueapplication.patch] in kdelibs and rebuild and install kdeui; this will make KUniqueApplication::start() return with false value instead of exiting().&lt;br /&gt;
=====Alternative solution=====&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 19:45, 24 June 2008 (CEST) '''patched windbus allowing to release unused service resources after client's crash''':&lt;br /&gt;
**in progress, testing&lt;br /&gt;
**changes commited to kdelibs-branch and kdepim-branch (reverts the ''&amp;quot;Locked&amp;quot; dbus-daemon'' workaround)&lt;br /&gt;
**windbus patch: to be published&lt;br /&gt;
&lt;br /&gt;
===Other TODOs===&lt;br /&gt;
*KMFolderTree::cleanupConfigFile() removes kmailrc sections for nonexisting folders but the changes are not writen back ([[User:Jstaniek|jstaniek]] 11:07, 14 May 2008 (CEST))&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* '''The branches/work/kdab-post-4.0 branch''' ([http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepimlibs], [http://websvn.kde.org/branches/work/kdab-post-4.0/kdepim/ kdepim] modules) '''have been closed and merged into [http://websvn.kde.org/trunk/KDE/ trunk]'''. &amp;lt;strike&amp;gt;KDE PIM for Windows development happens in trunk again now.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* KDE PIM for Windows development happens in branches/kdepim/enterprise4 now.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Projects/KDE_on_Windows|The KDE on Windows]] Project&lt;br /&gt;
* [[Projects/KDE on Windows/Missing features of kdelibs|Missing features of kdelibs on Windows]] - KDE PIM may depend on them&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*Find out how others have managed to port their software to Windows:&lt;br /&gt;
**[http://cs.senecac.on.ca/~david.humphrey/writing/firefox-win32-build.html Building Firefox on Windows using msvc]&lt;br /&gt;
**[http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows Building Cyrus SASL on Windows]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[Category:MS Windows]]&lt;/div&gt;</summary>
		<author><name>Jstaniek</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/MS_Windows</id>
		<title>Projects/PIM/MS Windows</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/MS_Windows"/>
				<updated>2008-06-24T17:48:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jstaniek: /* &amp;quot;Locked&amp;quot; dbus-daemon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers topics related to the MS Windows port of the KDE PIM suite.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is work in progress started by [[User:Jstaniek|jstaniek]].}}&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Build base KDE libraries for Windows with required dependencies, preferable using ''emerge'' tool (because it tracks dependencies for you):&lt;br /&gt;
#install ''emerge'' and its dependencies as described [[Getting_Started/Build/KDE4/Windows/emerge|here]]&lt;br /&gt;
#either [[#Build_SASL_by_hand|build SASL by hand]] or [[#Download_SASL_for_mingw_and_msvc|download precompiled version for mingw and msvc]], and install it (if you skip this step you will not have SSL/TLS support in your apps)&lt;br /&gt;
#unpack gpgme-1.1.4-3-lib.zip and gpgme-1.1.4-3-bin.zip from http://www.winkde.org/pub/kde/ports/win32/repository/win32libs/ to your KDEDIR&lt;br /&gt;
#from the cmd.exe command line, enter &amp;lt;pre&amp;gt;emerge kdepimlibs&amp;lt;/pre&amp;gt; - that will  also build ''qt'', ''kdesupport'' (part of it), ''soprano'', ''strigi'', ''kdelibs'', ''kdebase''&lt;br /&gt;
#enter &amp;lt;pre&amp;gt;emerge libassuan&amp;lt;/pre&amp;gt; - this is an optional dependency of ''kdepim''&lt;br /&gt;
#finally, enter &amp;lt;pre&amp;gt;emerge kdepim&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*Temporary fix for [http://bugs.kde.org/show_bug.cgi?id=160881 Bug 160881: PGP encryption of mails results in empty MIME-part] in kdepim can be enabled if you add -DKLEO_SYNCHRONOUS_API_HOTFIX:BOOL=ON to your cmake call.&lt;br /&gt;
&lt;br /&gt;
== Problem points ==&lt;br /&gt;
=== The Checklist ===&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Feature !! Description !! Contact&lt;br /&gt;
{{FeatureDone|[[#Maildir_implementation_in_KMail|Maildir implementation]]|make maildir standard work with Windows filesystems |jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Folder_Indices|Folder Indices]]|so called &amp;quot;mmap mode&amp;quot;|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#SASL support|SASL support]]|security|KDE PIM Team}}&lt;br /&gt;
{{FeatureInProgress|[[#Registry_settings_for_default_apps_and_services|Registry settings for default apps and services]]|Integration: Setting KMail as default e-mail client, KOrganizer as defaule windows calendaring app, etc. See [[#KDE-related_notes|the notes]].|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Drag.26drop_support|Drag&amp;amp;Drop support]]|Integration: D&amp;amp;D files onto the message composer|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#Copy.26paste_support|Copy&amp;amp;Paste support]]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[http://intevation.de/roundup/kolab/issue2646 Use the standard Windows filedialogs]|Integration|jstaniek}}&lt;br /&gt;
{{FeatureDone|[[#Crashes_in_KDED|Fixes for Start Menu entries]]|Integration: avoid crashes and conflicts of kwinstartmenu KDED plugin with Start Menu entries added by hand in 3rd-party installers|jstaniek}}&lt;br /&gt;
{{FeatureInProgress|[[#.22Locked.22_dbus-daemon|&amp;quot;Locked&amp;quot; dbus-daemon]]|Unique KDE applications lock DBUS daemon on crash|KDE PIM Team}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maildir implementation in KMail ===&lt;br /&gt;
The implementation based strictly on the original maildir specification in kmail does not work on Windows' file system, since it uses the &amp;quot;:&amp;quot; (forbidden on windows) character in file names. It also relies (as does maildir in general) on the atomicity of making a hardlink and then unlinking the original, to implement an atomic move. The implementation used by akonadi (kdepim/maildir) relies on QFile in that regard, but it's unclear if rename is atomic on all platforms.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:50, 7 January 2008 (CET): Hard/soft links could be handled on Windows by altering the source code so that the &amp;quot;link&amp;quot; file is a text file itself and contains the target path. If we need atomic renames, '''Windows apparently lacks them''', I have found a pre-Vista [http://blogs.msdn.com/adioltean/archive/2005/12/28/507866.aspx blog] which contains description on how to perform them in a messy but honest way (look at the very last &amp;quot;Write process (on Foo.txt)&amp;quot; version). There's also a way to recover from application/system crash during the pseudo-atomic operations (see the very last &amp;quot;Recovery from a crash during write&amp;quot; checklist).&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): We will most probably benefit from ''maildir'' suport on Windows as Thunderbird (ver. &amp;lt;3) apparently lacks support for this storage, despite [https://bugzilla.mozilla.org/show_bug.cgi?id=58308 many wishes] and [http://wiki.mozilla.org/Thunderbird/Feature_Brainstorming#Storage_folder plans].&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:42, 24 January 2008 (CET): regarding replacing &amp;quot;:&amp;quot; character on windows: &lt;br /&gt;
** We cannot use &amp;quot;:&amp;quot; in any way ([http://en.wikipedia.org/wiki/Maildir#Windows_software Wikipedia note]), so we have to rename it to something other:&lt;br /&gt;
*** The proposed replace character is &amp;quot;!&amp;quot;. Not &amp;quot;-&amp;quot; (see [https://bugzilla.mozilla.org/show_bug.cgi?id=58308#c77 this] for explanation). &lt;br /&gt;
*** We may want to add support for user-defined character, to allow reuse maildirs of apps like mutt (which uses &amp;quot;-&amp;quot;), but it should be clearly noted in the handbook that the setting is only for integration with existing maildirs.&lt;br /&gt;
*** '''The rename makes the implementation incompatible''' with the [http://cr.yp.to/proto/maildir.html specification] (which is informal anyway and says nothing about the replacement character).&lt;br /&gt;
** '''The ability of sharing a single maildir''' structure on dual boot machines (e.g., using the [http://www.fs-driver.org/ IFS Ext2 driver] or [http://ext2fsd.sourceforge.net/projects/projects.htm#ext2fsd Ext2fsd: way less crashy than IFS Ext2 (no blue screen of the death) and actively maintained]) is affected by the problem with &amp;quot;:&amp;quot; character.&lt;br /&gt;
*** '''Windows FS layer''' apparently returns &amp;quot;file not found&amp;quot; error for files having the &amp;quot;:&amp;quot;  character on a linux filesystem. So if there is a need for storing the maildir at linux side, &amp;quot;:&amp;quot; should be renamed even if Linux itself does work with &amp;quot;:&amp;quot;.&lt;br /&gt;
*** Conversely, '''if the maildir has to be stored at windows side''', &amp;quot;:&amp;quot; characters have to be renamed, do Linux build of KMail (and KDE-PIM in general) should support this rename too in order to access the storage.&lt;br /&gt;
&lt;br /&gt;
===Folder Indices===&lt;br /&gt;
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. [[Projects/PIM/MS Windows/SQLite Folder Indices|More info...]]&lt;br /&gt;
&lt;br /&gt;
===Integration into the Windows Explorer &amp;amp; Desktop===&lt;br /&gt;
{{Note|[[User:Jstaniek|jstaniek]] 22:01, 14 January 2008 (CET): [http://tortoisesvn.tigris.org/ TortoiseSVN] is GPLed SVN client which is nicely integrated with Windows Explorer. Perhaps we can use its source code as a reference...}}&lt;br /&gt;
&lt;br /&gt;
====Registry settings for default apps and services====&lt;br /&gt;
'''Introduction:''' We can detect whether KMail is the default e-mail client. If set as default, KMail should act as a default mailer, and thus be invoked automatically for actions like RMB &amp;quot;Send To -&amp;gt; E-mail Recipient&amp;quot;. This shall be also reused by others for KOrganizer and Konqueror. The solution is relatively simple modifications to the Windows Registry. See [http://members.toast.net/4pf/Protocol.html Mozilla's solution].&lt;br /&gt;
&lt;br /&gt;
First, we can use HKLM node for system-global settings or HKCU node for current-user-only settings. If the attempt to set the value in HKLM fails, usually because of unsufficient permissions, HKCU should be used. As expected, HKCU overrides HKLM settings. See [http://support.microsoft.com/kb/297878 KB297878]. Below we'll use HKCU.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet key is used to specify default web browser; could be set to Konqueror&lt;br /&gt;
*HKCU\Software\Clients\StartMenuInternet\app.exe\shell\open\command key is used for &amp;quot;Internet&amp;quot; start menu shortcut, can be set to Konqueror. Note from the KB - &amp;lt;tt&amp;gt;&amp;quot;The command might open the browser on the users home page, for example. However, it might launch some other introductory user interface that the ISV feels is appropriate.&amp;quot;&amp;lt;/tt&amp;gt; So this is not the same as 'default browser' setting.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Mail\Appname - registered email client, there can be more entries within the 'Mail' node. Adding KMail here makes it available for users to select as a default browser using 'Set Default Programs' system window.&lt;br /&gt;
*HKCU\Software\Clients\Mail - default email client,  'Windows Mail' by default; could be set to KMail.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Calendar\Appname - registered calendar application, there can be more entries within the 'Calendar' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Calendar - default calendar application, 'Windows Calendar' on Vista; could be set to KOrganizer.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\Contacts\Appname - registered contacts client, there can be more entries within the 'Contacts' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\Contacts - default contacts application, 'Address Book' by default; could be set to KAddressBook.&lt;br /&gt;
&lt;br /&gt;
*HKCU\Software\Clients\News\Appname - registered newsgroup client, there can be more entries within the 'News' node. See the note for HKCU\Software\Clients\Mail\Appname.&lt;br /&gt;
*HKCU\Software\Clients\News - default newsgroup application, 'Windows Mail' by default; could be set to KNode.&lt;br /&gt;
&lt;br /&gt;
From the KB: &amp;lt;tt&amp;gt;After updating the registry keys, the application broadcasts the WM_SETTINGCHANGE message with wParam = 0 and lParam pointing to the null-terminated string &amp;quot;Software\Clients\StartMenuInternet&amp;quot; to notify the operating system that the default client has changed.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Using MAPI=====&lt;br /&gt;
HKLM\Software\Clients\AppName\DllPath points to a dll implementing [http://en.wikipedia.org/wiki/MAPI MAPI] interface. Internet Explorer uses Windows Messaging by default to invoke a mailer on a mailto: link. Only if the MAPI install is misconfigured will it resort to directly accessing the mailto association key.[http://members.toast.net/4pf/Protocol.html] &lt;br /&gt;
Example implementation of MAPI services is Thundebird's mozMapi32.dll (the key is usualle equal to C:\Program Files\Mozilla Thunderbird\mozMapi32.dll).&lt;br /&gt;
&lt;br /&gt;
=====KDE-related notes=====&lt;br /&gt;
*KDElibs execute default web browser or email client for protocols like http(s): and &amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt; via {{Qt|QDesktopServices}}::openUrl(), which in turn uses ShellExecute(). openUrl() is widely used in Qt e.g. for hyperlinks in text boxes and label widgets.&lt;br /&gt;
*A general rule of KDE/win: not to duplicate registry settings in any rc file and use default applications if possible, to avoid changing behaviour expected by users.&lt;br /&gt;
*[[User:Jstaniek|jstaniek]] 12:06, 18 June 2008 (CEST): Before LinuxTag I've performed some tests of setting default clients, and looks like it's is not possible to set onlt writing registry entries. Some API calls may be needed, especially because locked at least one registry key is locked for writing during the session.&lt;br /&gt;
&lt;br /&gt;
====Drag&amp;amp;drop support====&lt;br /&gt;
Support drag&amp;amp;drop from/to composer and from received mails into the file system (Windows Explorer and the Desktop)&lt;br /&gt;
====Copy&amp;amp;paste support====&lt;br /&gt;
Support pasting files copied (in Windows Explorer or the Desktop) as attachments.&lt;br /&gt;
===Profile migration===&lt;br /&gt;
*[http://kb.mozillazine.org/Profile_folder Mozilla profile directories]&lt;br /&gt;
===SASL support===&lt;br /&gt;
{{Note|SASL should be available '''before''' building kdepimlibs. When you build kdepimlibs, it should display message like &amp;quot;SASL Found&amp;quot; during configure stage.}}&lt;br /&gt;
====Build SASL by hand====&lt;br /&gt;
[http://asg.web.cmu.edu/sasl/ Cyrus SASL] is used on Windows for SSL/TLS, so we use the same source code plus wrapper functions that are a part of the Cyrus distribution (the result is a native Windows library, do not confuse with Cygwin!). &lt;br /&gt;
&lt;br /&gt;
Two Mozilla's [http://wiki.mozilla.org/LDAP_C_SDK_SASL_Windows patches] have to be applied for msvc.&lt;br /&gt;
&lt;br /&gt;
Cyrus SASL functionality is based on plugins. For KDEpimlibs we have set the paths for plugins and configuration to KDEROOT/lib/sasl2/ and KDEROOT/share/config/sasl2/, respectively. The configuration capatibilities are apparently not used for now. ([[User:Jstaniek|jstaniek]] February 3 2008)&lt;br /&gt;
&lt;br /&gt;
The following parts of KDEpimlibs depend on sasl2: kldap, kioslave/{sieve|imap4|smtp|pop3}.&lt;br /&gt;
&lt;br /&gt;
'''Limitations:''' Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows. ([http://www.sendmail.org/~ca/email/cyrus2/windows.html more info])&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
*[http://negotiateauth.mozdev.org/ Negotiateauth] Mozilla plugin and [http://sourceforge.net/projects/modauthkerb/ Mod_auth_kerb] Apache module for Kerberos support.&lt;br /&gt;
*[http://mailman.mit.edu/pipermail/kerberos/2004-April/005152.html this] [http://mailman.mit.edu/pipermail/kerberos/2004-April/005155.html thread]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Inser