Bug 1028665

Summary: Unstable, unreleased glfw is packaged instead of a stable release
Product: [Fedora] Fedora Reporter: D. Stimits <stimits>
Component: glfwAssignee: MERCIER Jonathan <bioinfornatics>
Status: CLOSED DUPLICATE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 19CC: bioinfornatics, mpreisle, stimits
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: 966983 Environment:
Last Closed: 2014-03-10 21:22:25 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description D. Stimits 2013-11-09 08:49:50 UTC
+++ This bug was initially created as a clone of Bug #966983 +++

glfw has had no stable upstream release of the 3.x branch, yet glfw 3.0 unstable from git is packaged in Fedora 18. What is the rationale for that? Why are we packaging unstable git release when glfw 2.7.x works just fine?

There are API changes between the 2 major releases, so on top of everything, this questionable decision breaks stable released code of other projects depending on glfw.

If there really is solid rationale for bringing glfw 3 into Fedora, I suggest packaging it separately as glfw3. It is very likely that people will depend on glfw2 for quite a long time.

Installed Packages
Name        : glfw
Arch        : x86_64
Version     : 3.0
Release     : 0.7.20120812gita9ed5b1.fc18
Size        : 122 k
Repo        : installed
From repo   : fedora
Summary     : A cross-platform multimedia library
URL         : http://www.glfw.org/index.html
License     : zlib
Description : GLFW is a free, Open Source, multi-platform library for OpenGL
            : application development that provides a powerful API for handling
            : operating system specific tasks such as opening an OpenGL window,
            : reading keyboard, mouse, joystick and time input, creating
            : threads, and more.

Available Packages
Name        : glfw
Arch        : i686
Version     : 3.0
Release     : 0.7.20120812gita9ed5b1.fc18
Size        : 50 k
Repo        : fedora/18/x86_64
Summary     : A cross-platform multimedia library
URL         : http://www.glfw.org/index.html
License     : zlib
Description : GLFW is a free, Open Source, multi-platform library for OpenGL
            : application development that provides a powerful API for handling
            : operating system specific tasks such as opening an OpenGL window,
            : reading keyboard, mouse, joystick and time input, creating
            : threads, and more.

--- Additional comment from MERCIER Jonathan on 2013-06-26 17:12:12 EDT ---

I agree glfw3 api change often. I provide glfw3 mainly because derelict need it. We could think a way to provide glfw 2.7 and 3

--- Additional comment from D. Stimits on 2013-11-06 16:51:57 EST ---

Please note that I am looking at Fedora 19, actual rpm:
glfw-3.0-0.18.20130517git673d5b5.fc19.x86_64.

It looks like the existing fedora version glfw3 package differs from the actual version 3 glfw (via glfw.org). Compilation errors imply that the existing header file also differs from the dynamic library,
/usr/lib64/libglfw.so.3.0

Specifically, header from the RPM version 3 provides
/usr/include/GL/glfw3.h,
...and within this, provides the following declaration:
typedef void (* GLFWkeyfun)(GLFWwindow*,int,int);

If the actual glfw3 source is downloaded from glfw.org for version 3.0.3:
http://www.glfw.org/download.html
http://sourceforge.net/projects/glfw/files/glfw/3.0.3/glfw-3.0.3.zip/download

...the glfw.org header glfw-3.0.3/include/GLFW/glfw3.h instead uses this declaration:
typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int);

This latter definition is supported as correct via the glfw.org documentation under the version 3 API:
http://www.glfw.org/docs/latest/group__input.html#ga592dd1919f8a1dc7576b13cdd8b7b695

Note that official source for version 2.7.9 (prior API) has the exact definition of GLFWkeyfun used in the fedora rpm for version 3...part of the glfw3 package in the fedora rpm incorrectly mixes version 2 API.

Compiler errors lead me to believe that fedora dynamic library /usr/lib64/libglfw.so.3.0, provided by glfw-3.0-0.18.20130517git673d5b5.fc19.x86_64, fails to match the /usr/include/GL/glfw3.h header (provided by the same RPM). Odds are high that the installed library follows version 3 API, causing mismatched declaration/implementation compile failure (I have not verified this difference for the actual libglfw.so.3.0, symbols are stripped).

This software is important, and is replacing GLUT in many OpenGL applications. For myself, I am developing on both nVidia x86 and nVidia Tegra embedded, and the SDK has moved away from GLUT and specifically replaced it with glfw. nVidia comments here:
https://developer.nvidia.com/content/introducing-new-opengl-sdk-samples

Comment 1 D. Stimits 2013-11-10 15:32:06 UTC
Looks like this is fixed in Fedora 20. Fedora 19 would benefit from a back port.

Additional supporting information:

Fedora 19 SRPM:
  glfw-3.0-0.18.20130517git673d5b5.fc19.src.rpm

Fedora 19 git refers to glfw:
  http://www.mail-archive.com/package-announce@lists.fedoraproject.org/msg74548.html

Fedora 19 git repository:
  http://pkgs.fedoraproject.org/cgit/

glfw.org source:
  glfw-3.0.3.zip

INSTALLED:
  rpm -qva | egrep '(20130517git673d5b5)'
    glfw-debuginfo-3.0-0.18.20130517git673d5b5.fc19.x86_64
    glfw-devel-3.0-0.18.20130517git673d5b5.fc19.x86_64
    glfw-3.0-0.18.20130517git673d5b5.fc19.x86_64

Fedora 19 git provides:
  rpmbuild/SOURCES/glfw-20130517git673d5b5.tar.xz
  rpmbuild/SPECS/glfw.spec

THIS UNCOMPRESSES rpmbuild/SOURCES/glfw-20130517git673d5b5.tar.xz AS:
  glfw-20130517git673d5b5.tar

CURRENT Fedora 19 COMPILER:
  gcc version 4.8.2 20131017 (Red Hat 4.8.2-1) (GCC)

GLFW.ORG API DOCUMENTATION:
  http://www.glfw.org/docs/latest/group__input.html

  GLFWkeyfun OFFICIAL DOCUMENTATION:
  http://www.glfw.org/docs/latest/group__input.html#ga592dd1919f8a1dc7576b13cdd8b7b695

  GLFWmousebuttonfun OFFICIAL DOCUMENTATION:
  http://www.glfw.org/docs/latest/group__input.html#ga1e008c7a8751cea648c8f42cc91104cf

API DEVIATIONS:
  GLFWkeyfun OFFICIAL DECLARATION:  typedef void(* GLFWkeyfun)(GLFWwindow *, int, int, int, int)
  GLFWkeyfun FEDORA 19 DECLARATION: typedef void (* GLFWkeyfun)(GLFWwindow*,int,int)

  GLFWmousebuttonfun OFFICIAL DECLARATION:  typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int)
  GLFWmousebuttonfun FEDORA 19 DECLARATION: typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int)

Fedora 19 BUG REPORT:
  https://bugzilla.redhat.com/show_bug.cgi?id=1028665

Fedora 20 Devel SRPM Link:
  http://mirrors.cat.pdx.edu/fedora/linux/development/20/source/SRPMS/g/glfw-3.0-0.27.20130807git735bc2d.fc20.src.rpm

Fedora 20 Devel Provides Header:
  rpmbuild/SOURCES/glfw-20130807git735bc2d/include/GLFW/glfw3.h

Fedora 20 Devel Header Correctly Declares:
  typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int)
  typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int)

Comment 2 MERCIER Jonathan 2014-03-10 21:22:25 UTC

*** This bug has been marked as a duplicate of bug 966983 ***