|
|
Line 1: |
Line 1: |
| {{Ebuild | | {{Repository |
| |Summary=A Gentoo/Funtoo utility that allows the active OpenGL implementation on a system to be switched between a variety of installed options. | | |Repository ID=bliss-overlay |
| |CatPkg=app-admin/eselect-opengl | | |Repository Type=Development Tree |
| |Maintainer= | | |Maintainer=Fearedbliss, |
| | |Organization= |
| | |Homepage=https://github.com/fearedbliss/bliss-overlay.git |
| | |Source URI=https://github.com/fearedbliss/bliss-overlay.git |
| }} | | }} |
| == Introduction ==
| |
|
| |
|
| Eselect (OpenGL) (also called <tt>eselect-opengl</tt>) is a module for [[Package:Eselect|Eselect]] that allows the OpenGL implementation on a Funtoo Linux or Gentoo Linux system to be switched between a variety of installed OpenGL implementations. It functions by creating an <tt>env.d</tt> file at <tt>/etc/env.d/03opengl</tt> which contains OpenGL settings, as well as managing symbolic links to OpenGL libraries and headers.
| | {{RepositoryFooter}} |
| | |
| === Sample env.d File ===
| |
| | |
| A sample <tt>env.d</tt> file for a multilib system with xorg-x11 OpenGL implementation may look like this:
| |
| | |
| {{file|name=/etc/env.d/03opengl|desc=An example env.d file for eselect-opengl|body= | |
| # Configuration file for eselect
| |
| # This file has been automatically generated.
| |
| LDPATH="/usr/lib32/opengl/xorg-x11/lib:/usr/lib64/opengl/xorg-x11/lib"
| |
| OPENGL_PROFILE="xorg-x11"
| |
| }}
| |
| | |
| == Implementation ==
| |
| | |
| Eselect-opengl is implemented as a single bash-based [[Package:Eselect|Eselect]] module approximately 10K in size, installed at <tt>/usr/share/eselect/modules/opengl.eselect</tt>. One interfaces with this module via the main <tt>eselect</tt> command:
| |
| | |
| <console>
| |
| # ##i##eselect opengl help
| |
| Manage the OpenGL implementation used by your system
| |
| Usage: eselect opengl <action> <options>
| |
| | |
| ##g##Standard actions:
| |
| help Display help text
| |
| usage Display usage information
| |
| version Display version information
| |
| | |
| ##g##Extra actions:
| |
| list List the available OpenGL implementations.
| |
| set <target> Select the OpenGL implementation.
| |
| <target> The profile to activate
| |
| --use-old If an implementation is already set, use that one instead
| |
| --prefix=<val> Set the source prefix (default: /usr)
| |
| --dst-prefix=<val> Set the destination prefix (default: /usr)
| |
| --ignore-missing Ignore missing files when setting a new implementation
| |
| show Print the current OpenGL implementation.
| |
| </console>
| |
| | |
| == What is Switched ==
| |
| | |
| Using <tt>eselect opengl set</tt> causes the following symbolic links to be updated to point to the files corresponding to the OpenGL implementation that you chose:
| |
| | |
| * ''Libraries'' (32-bit and 64-bit):
| |
| ** <tt>/usr/lib(64)/libGL.so.*</tt>
| |
| ** <tt>/usr/lib(64)/libEGL.so.*</tt>
| |
| ** <tt>/usr/lib/(32|64|)/libGLESv1.so.*</tt>
| |
| ** <tt>/usr/lib/(32|64|)/libGLESv2.so.*</tt>
| |
| * ''C Headers'':
| |
| ** <tt>/usr/include/GL/*</tt>
| |
| ** <tt>/usr/include/EGL/*</tt>
| |
| ** <tt>/usr/include/KHR/*</tt>
| |
| * <tt>/usr/lib(64|)/xorg/modules/extensions/libglx.so</tt>
| |
| | |
| The symbolic links point to an installed OpenGL implementation, stored inside <tt>/usr/lib(32|64|)/opengl/(implementation-name)</tt>. These files are structured as follows:
| |
| | |
| * <tt>/usr/lib/opengl/(implementation-name)/lib</tt>
| |
| * <tt>/usr/lib/opengl/(implementation-name)/include/(GL|EGL|KHR)</tt>
| |
| * <tt>/usr/lib/opengl/(implementation-name)/extensions/libglx.so</tt>
| |
| | |
| On multilib systems, ebuilds that provide an OpenGL implementation install 32-bit libraries in <tt>/usr/lib32/opengl/(implementation name)/lib</tt> and 64-bit libraries in <tt>/usr/lib64/opengl/(implementation name)/lib</tt>.
| |
| | |
| == Criticisms ==
| |
| | |
| === Violation of Build Consistency ===
| |
| | |
| As documented in {{Bug|FL-1309}}, sometimes packages fail to merge when the "wrong" eselect opengl implementation is selected. This violates Portage's ability to consistently build a package from source, assuming all its dependencies are satisfied. This could be classified as a design bug -- eselect-opengl is functioning as intended, but its underlying theory of operation is not correct.
| |
| | |
| ===== Possible Solutions =====
| |
| | |
| A possible solution to this problem, discussed in {{Bug|FL-1309}}, is to redesign eselect-opengl to only select the ''runtime'' OpenGL implementation, but to have all ebuilds build against the official xorg-x11 OpenGL implementation.
| |
| | |
| The rationale for this design change is that:
| |
| # There should be a consistent and repeatable build/linking process for all OpenGL applications.
| |
| # AMD and NVIDIA implementations of OpenGL are designed to be more of a "drop-in" runtime replacement for xorg-x11, rather than a standalone replacement for xorg-x11, and thus appear to exhibit more build-time bugs.
| |
| | |
| | |
| | |
| | |
| {{EbuildFooter}}
| |