Fork me on GitHub

GTK+ packaging

Gentoo Mono Handbook
 
Which documentation do we have?
http://www.mono-project.com/docs/gui/gtksharp/
http://www.mono-project.com/docs/gui/gtksharp/tutorials/

Gtk# is a Graphical User Interface Toolkit for mono and .Net.

What is "Toolkit" and how it relates to other parts of graphical stacks ?
How many stacks do we have? X, Wayland, Mir ?

binds gtk+ toolkit and assorted GNOME libraries.
which libraries does toolkit include?
which other libraries are wrapped?

Does it allow work with OpenGL?

What is Stetic and how to install it in gentoo?

Gtk# 3.0 will be built against the .net 2.0 profile, but it will be possible to install 2.12 and 3.0 in parallel for compatibility. (q) http://www.mono-project.com/docs/gui/gtksharp/plan/
there is no more 2.0 profile (because MS opensourced 4.0, 4.5, 4.6), so we need a more modern plan

https://github.com/gentoo/dotnet/issues/131 - no docs about how Gtk+ and Gtk# are packaged for portage

The current state of affairs is, that the stable branch and the testing branch of gx86 take different approaches:

As currently implemented, these approaches are not only incompatible, but difficult to support simultaneously in ebuilds that DEPEND on them. To preserve the two-prong status quo sustainably, the dotnet team would probably need to create virtuals to prevent a profusion of DEPENDenceies like:

( || ( <=dev-dotnet/gtk-sharp-2.12.13[foolib] dev-dotnet/foo-sharp))

from appearing all over the place which, although probably legal in EAPI5+, will anyhow bring portage's dep-solver to it's knees, in practice, causing all kinds of spooky disasters whenever any structural change occurs and general slowness any time --complete-graph evaluation occurs.

I think the questions that need answering are:


Why do developers think that approaches are incompatible?

How exactly "modular design" is implemented?
How exactly "monolitic design" is implemented?

How the Gtk+ project is structured in it's source repository?

Which pieces of C# code the Gtk# project includes and why?

How Gtk+ is packaged in stable and testing branches?

The text of "modular" ebuild:
https://github.com/gentoo/gentoo/blob/3734280aee79307945994b3396c1b7f073ae1a85/dev-dotnet/gtk-sharp/gtk-sharp-2.12.10.ebuild (main tree)
KEYWORDS="amd64 ppc x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~x86-solaris"
The text of eclass for supporting "modules":
https://github.com/gentoo/gentoo/blob/86cec2922af8e267dbcccde278327e6ad40b6c3e/eclass/gtk-sharp-module.eclass (main tree)
https://github.com/gentoo/dotnet/blob/4f761293e163822fc10d0fe1aa6555cafd4ceec3/eclass/gtk-sharp-module.eclass (dotnet overlay)

The texts of "monolitic" ebuilds:
https://github.com/gentoo/gentoo/blob/3734280aee79307945994b3396c1b7f073ae1a85/dev-dotnet/gtk-sharp/gtk-sharp-2.12.21.ebuild (main tree)
https://github.com/gentoo/dotnet/blob/4f761293e163822fc10d0fe1aa6555cafd4ceec3/dev-dotnet/gtk-sharp/gtk-sharp-2.99.3.ebuild (dotnet overlay)
KEYWORDS="~amd64 ~x86 ~ppc"
this is testing branch, because it is marked as testing with tilda sign for all architectures:

https://dev.gentoo.org/~zmedico/portage/doc/man/emerge.1.html
KEYWORDS
The KEYWORDS variable in an ebuild file is also used for masking a package still in testing. There are architecture-specific keywords for each package that let portage know which systems are compatible with the package. Packages which compile on an architecture, but have not been proven to be "stable", are masked with a tilde (~) in front of the architecture name. emerge examines the ACCEPT_KEYWORDS environment variable to allow or disallow the emerging of a package masked by KEYWORDS. To inform emerge that it should build these 'testing' versions of packages, you should update your /etc/portage/package.accept_keywords file to list the packages you want the 'testing' version. See portage(5) for more information.

--complete-graph evaluation

https://dev.gentoo.org/~zmedico/portage/doc/man/emerge.1.html
--complete-graph [ y | n ]
This causes emerge to consider the deep dependencies of all packages from the world set. With this option enabled, emerge will bail out if it determines that the given operation will break any dependencies of the packages that have been added to the graph. Like the --deep option, the --complete-graph option will significantly increase the time taken for dependency calculations. Note that, unlike the --deep option, the --complete-graph option does not cause any more packages to be updated than would have otherwise been updated with the option disabled. Using --with-bdeps=y together with --complete-graph makes the graph as complete as possible.
--complete-graph-if-new-use < y | n >
Trigger the --complete-graph behavior if USE or IUSE will change for an installed package. This option is enabled by default.
--complete-graph-if-new-ver < y | n >
Trigger the --complete-graph behavior if an installed package version will change (upgrade or downgrade). This option is enabled by default.
--with-bdeps < y | n >
In dependency calculations, pull in build time dependencies that are not strictly required. This defaults to 'n' for installation actions, meaning they will not be installed, and 'y' for the --depclean action, meaning they will not be removed.
--with-test-deps [ y | n ]
For packages matched by arguments, this option will pull in dependencies that are conditional on the "test" USE flag, even if "test" is not enabled in FEATURES for the matched packages. (see make.conf(5) for more information about FEATURES settings).
These settings can be added to EMERGE_DEFAULT_OPTS (see make.conf(5)) and later overridden via the command line.

I don't understood the words above why "modular" design is worse for package manager. There should be a more detailed explaination with description of detailed operations and their count/amount.

what is gx86?

what is gx86 (without multilib as in https://wiki.gentoo.org/wiki/Gx86-multilib? )
By the way, the multilib page is also doesn't explain everything clearly

for now i assume that it is shortname for "gtk-x86"

Stetic

http://www.monodevelop.com/documentation/stetic-gui-designer/
http://www.mono-project.com/archived/stetic/
it's distributed as part of monodevelop (i think so looking at screenshots). That is why there is no ebuilds found on gpo.zugaina.org