I have already followed this guide to disable middle mouse button paste on my Ubuntu 12.04.

Works like a charm.

Now I am trying to achieve the same on my Linux Mint 17. When I try to

sudo apt-get build-dep libgtk2.0-0

it gives me the following output:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Picking 'gtk+2.0' as source package instead of 'libgtk2.0-0'
E: Unable to find a source package for gtk+2.0

For me it looks like apt-get is somehow "resolving" 'libgtk2.0-0' to 'gtk+2.0', but then does not find any package named like that.

EDIT: although I am now able to compile the program (see my answer), I still do not know what Picking 'gtk+2.0' as source package instead of 'libgtk2.0-0' is supposed to mean. Any insight on this would be appreciated, thanks!

  • Have you enabled the relevant deb-src repository in your /etc/apt/sources.list? – steeldriver Sep 30 '14 at 12:14
up vote 13 down vote accepted

As others have already noted, make sure that for every deb … entry in /etc/apt/sources.list and /etc/apt/sources.list.d/*, you have a matching deb-src … entry. The rest of the line must be identical. The deb entry is for binary packages (i.e. ready to install), the deb-src is for source packages (i.e. ready to compile). The reason why the two kinds of sources are separated is that they are managed very differently: binary packages have a dependency tracking mechanism and a currently-installed list, whereas source packages are only tracked so that they can be downloaded conveniently. Note that when discussing package repositories, the word source means two unrelated things: a source as in a location to download packages from, and a source package as opposed to a binary package.

libgtk2.0-0 is the name of a binary package. It is built from a source package called gtk+2.0. The reason source and binary package names don't always match is that building a source package can produce multiple binary packages; for example, gtk+2.0 is the source for 14 packages as it is split into two libraries (libgtk2.0, libgail), corresponding packages to build programs using these libraries (…-dev), documentation for developers (…-doc), companion programs (libgtk2.0-bin`), etc.

You can see the name of the source package corresponding to a binary package by checking the Source: … line in the output of dpkg -s BINARY_PACKAGE_NAME (if the package is installed) or apt-cache show BINARY_PACKAGE_NAME. You can list the binary packages produced by a source package with aptitude search '?source-package(^SOURCE_PACKAGE_NAME$).

The command apt-get source downloads a source package. If you give it an argument which isn't a known source package, it looks it up in the database of installable binary packages and tries to download the corresponding source package. The command apt-get build-dep follows the same approach to deduce the name of a source package, then queries the source package database to obtain a list of binary packages (the list in the Build-Dep: field), and installs those binary packages.

The Software Sources GUI has a checkbox “enable repositories with source code” for official repositories, make sure that it's ticked. If you add third-party repositories manually, make sure that you add both deb-src and deb lines.

Thanks to @steeldriver, I figured out what to do.

Just had to add the following ling to my /etc/apt/sources.list:

deb-src ftp://ftp.de.debian.org/debian/ stable main contrib

deb-src repositories contain sources packages (as opposed to binary, ready-to-install packages) needed for compiling.

Edit: After Adding this, you must execute sudo apt-get update

For the lazy:

sudo sed -Ei 's/^# deb-src/deb-src/' /etc/apt/sources.list

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.