Difference between revisions of "Package:Eselect (OpenGL)"

Line 49: Line 49:
 
** libGLESv1
 
** libGLESv1
 
** libGLESv2
 
** libGLESv2
 
 
* ''C Headers'':
 
* ''C Headers'':
 
** <tt>/usr/include/GL/*</tt>
 
** <tt>/usr/include/GL/*</tt>
 
** <tt>/usr/include/EGL/*</tt>
 
** <tt>/usr/include/EGL/*</tt>
 
** <tt>/usr/include/KHR/*</tt>
 
** <tt>/usr/include/KHR/*</tt>
 +
* <tt>libglx.so
  
Ebuilds that provide an active OpenGL implementation install their libraries and headers in:
+
Ebuilds that provide an active OpenGL implementation install their libraries, headers, etc. in:
  
* /usr/lib/opengl/(implementation-name)/lib
+
* <tt>/usr/lib/opengl/(implementation-name)/lib</tt>
* /usr/lib/opengl/(implementation-name)/include
+
* <tt>/usr/lib/opengl/(implementation-name)/include</tt>
 +
* <tt>/usr/lib/opengl/(implementation-name)/extensions/libglx.so</tt>
  
 
On multilib systems, 32-bit libraries are installed to <tt>/usr/lib32/opengl/(implementation name)/lib</tt> and 64-bit libraries are installed to <tt>/usr/lib64/opengl/(implementation name)/lib</tt>.
 
On multilib systems, 32-bit libraries are installed to <tt>/usr/lib32/opengl/(implementation name)/lib</tt> and 64-bit libraries are installed to <tt>/usr/lib64/opengl/(implementation name)/lib</tt>.

Revision as of 19:30, 28 June 2014

app-admin/eselect-opengl


Source Repository:Gentoo Portage Tree

Summary: A Gentoo/Funtoo utility that allows the active OpenGL implementation on a system to be switched between a variety of installed options.


Eselect (OpenGL)

Introduction

Eselect (OpenGL) (also called eselect-opengl) is a module for 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 env,d file at /etc/env.d/03opengl which contains OpenGL settings. A sample env.d file for a multilib system with xorg-x11 OpenGL implementation may look like this:

/etc/env.d/03opengl: An example env.d file for eselect-opengl
# 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 Eselect module approximately 10K in size, installed at /usr/share/eselect/modules/opengl.eselect. One interfaces with this module via the main eselect command:

# eselect opengl help
Manage the OpenGL implementation used by your system
Usage: eselect opengl <action> <options>

Standard actions:
  help                      Display help text
  usage                     Display usage information
  version                   Display version information

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.

What is Switched

Eselect-opengl handles switching of the active:

  • Libraries (32-bit and 64-bit):
    • libGL
    • libEGL
    • libGLESv1
    • libGLESv2
  • C Headers:
    • /usr/include/GL/*
    • /usr/include/EGL/*
    • /usr/include/KHR/*
  • libglx.so

Ebuilds that provide an active OpenGL implementation install their libraries, headers, etc. in:

  • <tt>/usr/lib/opengl/(implementation-name)/lib
  • /usr/lib/opengl/(implementation-name)/include
  • /usr/lib/opengl/(implementation-name)/extensions/libglx.so

On multilib systems, 32-bit libraries are installed to /usr/lib32/opengl/(implementation name)/lib and 64-bit libraries are installed to /usr/lib64/opengl/(implementation name)/lib.

Eselect-opengl looks in these directories for active OpenGL implementations.

Criticisms

Violation of Build Consistency

As documented in 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 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:

  1. There should be a consistent and repeatable build/linking process for all OpenGL applications.
  2. 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.