Xfce Wiki

Sub domains
 

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
xfce:building [2014/03/14 10:45]
nick [Debug Levels]
xfce:building [2019/09/08 01:27]
kevinbowen
Line 1: Line 1:
-====== Building Xfce ======+====== Building Xfce from source ​======
  
 To compile a complete Xfce desktop from source requires some information about the dependency chain and the various configure options available in each module. This page will describe this in detail, so you can compile your own Xfce desktop; both system wide as well as in your $HOME directory. To compile a complete Xfce desktop from source requires some information about the dependency chain and the various configure options available in each module. This page will describe this in detail, so you can compile your own Xfce desktop; both system wide as well as in your $HOME directory.
  
-====== Version ======+===== Choosing your Xfce version ​=====
  
 First you will need to decide on which version of Xfce that you want to compile. Xfce version numbers are constructed like this: 1.2.3 => major.minor.micro. If the minor version is an even number, this means that it is a stable release. An odd numbered minor version indicate a development,​ or testing snapshots. The micro number increases with each release. Also, it is recommended to keep the major.minor version the same for the core components (some packages don't follow those numbers) or there will most likely be dependency version problems during compilation. First you will need to decide on which version of Xfce that you want to compile. Xfce version numbers are constructed like this: 1.2.3 => major.minor.micro. If the minor version is an even number, this means that it is a stable release. An odd numbered minor version indicate a development,​ or testing snapshots. The micro number increases with each release. Also, it is recommended to keep the major.minor version the same for the core components (some packages don't follow those numbers) or there will most likely be dependency version problems during compilation.
Line 9: Line 9:
 The latest releases available can be found on the [[http://​xfce.org/​download|download]] page. You can also build from the source repositories if you have enough experience. Additional information about this is provided below. The latest releases available can be found on the [[http://​xfce.org/​download|download]] page. You can also build from the source repositories if you have enough experience. Additional information about this is provided below.
  
-====== Source ======+===== Obtaining the Xfce source code =====
  
 Once you have decided which version that you want to compile, there are a couple of ways to download the source code. You can either choose to build official released packages, or clone the source repositories. Choosing the released packages is the recommended option. The source repositories could possibly be broken and are not generally suitable for production environments. However, they always contains the latest features, bug fixes and translations. Once you have decided which version that you want to compile, there are a couple of ways to download the source code. You can either choose to build official released packages, or clone the source repositories. Choosing the released packages is the recommended option. The source repositories could possibly be broken and are not generally suitable for production environments. However, they always contains the latest features, bug fixes and translations.
Line 15: Line 15:
 If your are not sure what to choose, it is easiest to begin with the latest stable fat-tarball of a collection release. If your are not sure what to choose, it is easiest to begin with the latest stable fat-tarball of a collection release.
  
-===== Released packages ​=====+==== Released packages ====
  
 Xfce packages have two types of releases. Click the links, below, to open the the download locations. Xfce packages have two types of releases. Click the links, below, to open the the download locations.
Line 22: Line 22:
   * [[http://​archive.xfce.org/​src/​xfce/​|Individual releases]]\\ Each package in Xfce is allowed to make development and stable releases at any time, see the [[http://​xfce.org/​about/​releasemodel|release model]] documentation for more information. ​   * [[http://​archive.xfce.org/​src/​xfce/​|Individual releases]]\\ Each package in Xfce is allowed to make development and stable releases at any time, see the [[http://​xfce.org/​about/​releasemodel|release model]] documentation for more information. ​
  
-===== From the code repository ​=====+==== From the code repository ====
  
-For the latest code, you need to make local copies of the [[http://​git.xfce.org/​|GIT repositories]]. This is the place where developers submit their code. If you decide to use GIT, try to use the same branch for all the packages to avoid dependency version problems.+For the latest code, you need to make local copies of the [[https://​git.xfce.org/​|GIT repositories]]. This is the place where developers submit their code. If you decide to use GIT, try to use the same branch for all the packages to avoid dependency version problems.
  
-You first need to make clones of each GIT repository, like the command below, where ''​$category''​ is for example ''​xfce''​ and ''​$module''​ ''​xfce4-panel''​. If you click on a module in the [[http://​git.xfce.org/​xfce|online repository]] list, the clone uri is shown at the bottom of the page.+You first need to make clones of each GIT repository, like the command below, where ''​$category''​ is for example ''​xfce''​ and ''​$module''​ ''​xfce4-panel''​. If you click on a module in the [[https://​git.xfce.org/​xfce|online repository]] list, the clone uri is shown at the bottom of the page.
  
-  git clone git://​git.xfce.org/​$category/​$module+  git clone https://​git.xfce.org/​$category/​$module
  
-After the repository is cloned, you will need to choose which branch you want to compile. By default, the ''​master''​ branch is selected, but there are also branches for stable releases like ''​xfce-4.10''​. The stable branches contain the latest bug fixes without any major new features, the master branch is the development version for the next release of Xfce. Both should not be used in a production environment.+After the repository is cloned, you will need to choose which branch you want to compile. By default, the ''​master''​ branch is selected, but there are also branches for stable releases like ''​xfce-4.12''​. The stable branches contain the latest bug fixes without any major new features, the master branch is the development version for the next release of Xfce. Both should not be used in a production environment.
  
-To switch to another branch (''​git branch -a''​ lists all available branches) run the following command inside the cloned directory to switch to, for example, the ''​xfce-4.10''​ branch:+To switch to another branch (''​git branch -a''​ lists all available branches) run the following command inside the cloned directory to switch to, for example, the ''​xfce-4.12''​ branch:
  
-  git checkout --track origin/​xfce-4.10+  git checkout --track origin/​xfce-4.12
  
 After this, you can update your local copy of the repository with git pull and switch to another branch with ''​git checkout $branchname''​. Read the [[http://​git-scm.com/​documentation|GIT manuals]] for more information about using GIT. After this, you can update your local copy of the repository with git pull and switch to another branch with ''​git checkout $branchname''​. Read the [[http://​git-scm.com/​documentation|GIT manuals]] for more information about using GIT.
-====== Dependencies ​======+===== Dependencies =====
  
-===== Build requirements ​=====+==== Build requirements ====
  
 Before you can start compiling, you need a couple of packages that are required to compile Xfce. Use your distributions package manager to install those packages. Additional packages are required too for some modules, but we'll get to that later. Before you can start compiling, you need a couple of packages that are required to compile Xfce. Use your distributions package manager to install those packages. Additional packages are required too for some modules, but we'll get to that later.
Line 45: Line 45:
   * [[http://​en.wikipedia.org/​wiki/​GNU_toolchain|A working GNU toolchain]]   * [[http://​en.wikipedia.org/​wiki/​GNU_toolchain|A working GNU toolchain]]
   * Gtk+ and Glib headers, in some distributions called the -devel packages ​   * Gtk+ and Glib headers, in some distributions called the -devel packages ​
 +    * Xfce 4.14 requires Gtk+ 3.22 and Glib 2.42
 +    * Xfce 4.12 requires Gtk+ 2.24 and Glib 
 +    * pkgconfig
 +    * Coffee or tea
 +
 +
 +For history, here are the versions needed for older xfce releases, which are not supported anymore
     * Xfce 4.10 requires Gtk+ 2.20 and Glib 2.24     * Xfce 4.10 requires Gtk+ 2.20 and Glib 2.24
     * Xfce 4.8 requires Gtk+ 2.14 and Glib 2.20     * Xfce 4.8 requires Gtk+ 2.14 and Glib 2.20
     * Xfce 4.6 requires Gtk+ 2.10 and Glib 2.12     * Xfce 4.6 requires Gtk+ 2.10 and Glib 2.12
-  * pkgconfig 
-  * Coffee 
  
-===== Xfce's dependency chain =====+ 
 +==== Xfce's dependency chain ====
  
 The Xfce packages need to be built in a specific order. If you don't follow this, compile options might not be available or the configure stage will abort because of missing dependencies. The Xfce packages need to be built in a specific order. If you don't follow this, compile options might not be available or the configure stage will abort because of missing dependencies.
Line 58: Line 64:
   * libxfce4util   * libxfce4util
   * xfconf   * xfconf
-  * libxfce4ui, garcon, <​del>​libxfcegui4</​del>​ ((deprecated since 4.8 but still required for some plugins)) +  * libxfce4ui 
-  * exo +  * garcon, ​exo
-  * xfce4-panel+
   * thunar   * thunar
-  * xfce4-settings,​ xfce4-session,​ xfdesktop, xfwm4, <​del>​xfce-utils</​del>​ ((this package conflicts with xfce4-session,​ xfce4-appfinder and libxfce4ui since Xfce 4.10 and is not required anymore)), xfce4-appfinder,​ ...+  * xfce4-panel, ​xfce4-settings,​ xfce4-session,​ xfdesktop, xfwm4, xfce4-appfinder, ​tumbler...
  
-===== Package specific dependencies ​=====+==== Package specific dependencies ====
  
 Some core packages in Xfce have additional or optional dependencies,​ all are listed in the table below for the latest stable version. We only show the top-dependency (so xfce4-panel also requires gtk+, but libxfce4ui already depends on that). Some core packages in Xfce have additional or optional dependencies,​ all are listed in the table below for the latest stable version. We only show the top-dependency (so xfce4-panel also requires gtk+, but libxfce4ui already depends on that).
Line 72: Line 77:
 | ^ Dependency(-ies) ^ Optional Dependency(-ies) ^ | ^ Dependency(-ies) ^ Optional Dependency(-ies) ^
 ^ xfce4-dev-tools | autoconf, automake, intltool, pkgconfig | | ^ xfce4-dev-tools | autoconf, automake, intltool, pkgconfig | |
-^ libxfce4util | glib ((new in 4.10, was gobject in previous releaes)) ​| | +^ libxfce4util | glib2 | | 
-^ xfconf | libxfce4util, ​dbus-glib ​| |+^ xfconf | libxfce4util, ​gdbus | |
 ^ libxfce4ui | libxfce4util,​ gtk+, xfconf | libstartup-notification,​ libgladeui | ^ libxfce4ui | libxfce4util,​ gtk+, xfconf | libstartup-notification,​ libgladeui |
-^ garcon | gio, libxfce4util ​((new dependency since 0.1.9)) ​+^ garcon | gio, libxfce4util | | 
-^ libxfcegui4 ((deprecated,​ not required for the Xfce core packages since 4.8)) | libxfce4util,​ gtk+, libglade | libstartup-notification,​ libgladeui, xfconf ​+^ exo | libxfce4util,​ gtk+, perl-uri, libxfce4ui | |
-^ exo | libxfce4util,​ gtk+, perl-uri, libxfce4ui ​((new dependency since 4.10)) ​| |+
 ^ xfce4-panel | libxfce4ui, exo, garcon, libwnck | libstartup-notification | ^ xfce4-panel | libxfce4ui, exo, garcon, libwnck | libstartup-notification |
-^ thunar | libxfce4ui, exo, libpng, gtk+, glib | libexif, ​dbus-glib, gconf, libnotify, libstartup-notification,​ freetype, libjpeg, libxfce4panel,​ xfconf | +^ thunar | libxfce4ui, exo, libpng, gtk+, glib | libexif, ​gdbus, libnotify, libstartup-notification,​ freetype, libjpeg, libxfce4panel,​ xfconf | 
-^ xfce4-settings | libxfce4ui, exo, xfconf, ​dbus-glib, libXi, libXrandr | libXcursor, libnotify | +^ xfce4-settings | libxfce4ui, exo, xfconf, ​gdbus, libXi, libXrandr | libXcursor, libnotify | 
-^ xfce4-session | libxfce4ui, perl-xml-parser,​ libwnck, ​dbus-glib ​gnome-keyring,​ gconf ((not a dependecy since Xfce 4.10)) ​+^ xfce4-session | libxfce4ui, perl-xml-parser,​ libwnck, ​gdbus | | 
-^ xfwm4 | libxfce4util,​ libxfce4ui, libxfconf, ​dbus-glib, libwnck | libstartup-notification | +^ xfwm4 | libxfce4util,​ libxfce4ui, libxfconf, ​gdbus, libwnck | libstartup-notification | 
-^ xfdesktop | libxfce4ui, xfconf, libwnck, exo ((was optional in 4.8)) | thunarx, garcon, libnotify | +^ xfdesktop | libxfce4ui, xfconf, libwnck, exo garcon ​| thunarx, garcon, libnotify | 
-^ xfce4-appfinder | libxfce4ui, garcon, gio ((new dependency since 4.10)) | | +^ xfce4-appfinder | libxfce4ui, garcon, gio | | 
-^ <​del>​xfce-utils</​del>​ ((deprecated fince Xfce 4.10, file conflicts with other packages)) | libxfce4ui | dbus-glib | +^ tumbler | dbus-glib, gio, gmodule, gdk-pixbuf | freetype-config (fonts), jpeg (jpeg thumbnails from exif), libffmpegthumbnailer (video), gstreamer-1.(video), poppler-glib (pdf), libgsf (odf), libopenraw-gnome (various raw images) |
-^ gtk-xfce-engine-2 | gtk+ | | +
-^ tumbler | dbus-glib, gio, gmodule, gdk-pixbuf | freetype-config (fonts), jpeg (jpeg thumbnails from exif), libffmpegthumbnailer (video), gstreamer-0.10 (video), poppler-glib (pdf), libgsf (odf), libopenraw-gnome (various raw images) |+
  
-====== Building ​======+===== Building ​the packages ​=====
  
-===== Installation location and variables ​=====+==== Installation location and variables ====
  
 Now it is finally time to start compiling the Xfce desktop. Last remaining thing is to choose an installation location. Possible examples are ''/​usr'',​ ''/​usr/​local''​ and ''/​opt/​xfce4''​ for a system-wide installation or ''​$HOME/​local''​ if you want to install in your home directory (whatever you choose, never put spaces in the name). We will refer to this location as ${PREFIX} in the code examples below! Now it is finally time to start compiling the Xfce desktop. Last remaining thing is to choose an installation location. Possible examples are ''/​usr'',​ ''/​usr/​local''​ and ''/​opt/​xfce4''​ for a system-wide installation or ''​$HOME/​local''​ if you want to install in your home directory (whatever you choose, never put spaces in the name). We will refer to this location as ${PREFIX} in the code examples below!
Line 106: Line 108:
  
   export CFLAGS=""​   export CFLAGS=""​
-===== Compiling and installing ​=====+   
 +==== Compiling and installing ====
  
 Next step is compiling the various packages following the dependency chain above. If you have downloaded the tarballs, you will need to unpack them before going on. Inside each package directory you should run the following command: Next step is compiling the various packages following the dependency chain above. If you have downloaded the tarballs, you will need to unpack them before going on. Inside each package directory you should run the following command:
Line 126: Line 129:
   sudo make install   sudo make install
  
-==== Debug Levels ​====+==== Understanding ​Debug levels ​====
  
 Most Xfce modules use the m4 macro //​XDT_FEATURE_DEBUG//​ to manage the debug compiler levels. If so there are a number of options possible for ''​%%--enable-debug=%%''​ Most Xfce modules use the m4 macro //​XDT_FEATURE_DEBUG//​ to manage the debug compiler levels. If so there are a number of options possible for ''​%%--enable-debug=%%''​
Line 139: Line 142:
 ! Same as the level above, including ''​-Werror''​ so the compilers aborts during compiler errors. The compiler will also generate binaries with debug information suitable for [[:​contribute:​bugs:​|backtraces]] and memory checks. This is the recommended level for developers or users who want to report bugs. ! Same as the level above, including ''​-Werror''​ so the compilers aborts during compiler errors. The compiler will also generate binaries with debug information suitable for [[:​contribute:​bugs:​|backtraces]] and memory checks. This is the recommended level for developers or users who want to report bugs.
  
-====== Help ======+===== Help =====
  
 Hopefully everything went fine after reading this guide. If you still have problems or questions you can ask on the [[http://​xfce.org/​community#​mail|Xfce users mailing list]], the [[http://​forum.xfce.org|forum]] or ask distribution related questions on their forums and mailing lists. Hopefully everything went fine after reading this guide. If you still have problems or questions you can ask on the [[http://​xfce.org/​community#​mail|Xfce users mailing list]], the [[http://​forum.xfce.org|forum]] or ask distribution related questions on their forums and mailing lists.