git: 70bc78cfbd12 - main - graphics/freeglut: Update to 3.8.0

From: Gleb Popov <arrowd_at_FreeBSD.org>
Date: Tue, 08 Sep 2026 18:34:04 UTC
The branch main has been updated by arrowd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=70bc78cfbd12aabb9163d8743ac579477cd9205e

commit 70bc78cfbd12aabb9163d8743ac579477cd9205e
Author:     Gleb Popov <arrowd@FreeBSD.org>
AuthorDate: 2026-09-08 17:12:28 +0000
Commit:     Gleb Popov <arrowd@FreeBSD.org>
CommitDate: 2026-09-08 18:32:02 +0000

    graphics/freeglut: Update to 3.8.0
---
 graphics/freeglut/Makefile                         |   8 +-
 graphics/freeglut/distinfo                         |   6 +-
 graphics/freeglut/files/patch-b9998bb.c            |  50 ---
 graphics/freeglut/files/patch-src_fg__internal.h   |  10 -
 .../files/patch-src_x11_fg__internal__x11.h        |  85 -----
 .../files/patch-src_x11_fg__joystick__x11.c        | 403 ---------------------
 graphics/freeglut/pkg-plist                        |  99 ++++-
 7 files changed, 95 insertions(+), 566 deletions(-)

diff --git a/graphics/freeglut/Makefile b/graphics/freeglut/Makefile
index 6cec3a606cfa..87d080629d47 100644
--- a/graphics/freeglut/Makefile
+++ b/graphics/freeglut/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	freeglut
-PORTVERSION=	3.2.1
+PORTVERSION=	3.8.0
 CATEGORIES=	graphics
 MASTER_SITES=	SF
 
@@ -16,10 +16,8 @@ USE_XORG=	ice x11 xi xrandr xxf86vm
 USE_GL=		gl glu
 LDFLAGS+=	-lusbhid -lm
 
-DOCS=	download.html freeglut.html freeglut_logo.png		\
-	freeglut_user_interface.html index.html ogl_sm.png	\
-	progress.html structure.html
-BINS=	CallbackMaker Fractals Fractals_random Lorenz One Resizer \
+DOCS=	api.md
+BINS=	CallbackMaker Fractals Fractals_random Lorenz One \
 	multi-touch shapes smooth_opengl3 spaceball subwin timer
 
 OPTIONS_DEFINE=	DOCS EXAMPLES
diff --git a/graphics/freeglut/distinfo b/graphics/freeglut/distinfo
index 3e2f66098b02..d38cd42ef71f 100644
--- a/graphics/freeglut/distinfo
+++ b/graphics/freeglut/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1616308723
-SHA256 (freeglut-3.2.1.tar.gz) = d4000e02102acaf259998c870e25214739d1f16f67f99cb35e4f46841399da68
-SIZE (freeglut-3.2.1.tar.gz) = 440228
+TIMESTAMP = 1788885995
+SHA256 (freeglut-3.8.0.tar.gz) = 674dcaff25010e09e450aec458b8870d9e98c46f99538db457ab659b321d9989
+SIZE (freeglut-3.8.0.tar.gz) = 538754
diff --git a/graphics/freeglut/files/patch-b9998bb.c b/graphics/freeglut/files/patch-b9998bb.c
deleted file mode 100644
index 7846bf2cc1df..000000000000
--- a/graphics/freeglut/files/patch-b9998bb.c
+++ /dev/null
@@ -1,50 +0,0 @@
-diff --git a/freeglut/freeglut/src/fg_gl2.c b/freeglut/freeglut/src/fg_gl2.c
-index 38b0acbb..54b4285b 100644
---- src/fg_gl2.c
-+++ src/fg_gl2.c
-@@ -27,6 +27,20 @@
- #include "fg_internal.h"
- #include "fg_gl2.h"
- 
-+#ifndef GL_ES_VERSION_2_0
-+/* GLES2 has the corresponding entry points built-in, and these fgh-prefixed
-+ * names are defined in fg_gl2.h header to reference them, for any other case,
-+ * define them as function pointers here.
-+ */
-+FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
-+FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
-+FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
-+FGH_PFNGLBUFFERDATAPROC fghBufferData;
-+FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
-+FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
-+FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
-+#endif
-+
- void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib) {
-   if (fgStructure.CurrentWindow != NULL)
-     fgStructure.CurrentWindow->Window.attribute_v_coord = attrib;
-diff --git a/freeglut/freeglut/src/fg_gl2.h b/freeglut/freeglut/src/fg_gl2.h
-index ab8ba5c7..fb3d4676 100644
---- src/fg_gl2.h
-+++ src/fg_gl2.h
-@@ -67,13 +67,13 @@ typedef void (APIENTRY *FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
- typedef void (APIENTRY *FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint);
- typedef void (APIENTRY *FGH_PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
- 
--FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
--FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
--FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
--FGH_PFNGLBUFFERDATAPROC fghBufferData;
--FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
--FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
--FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
-+extern FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
-+extern FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
-+extern FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
-+extern FGH_PFNGLBUFFERDATAPROC fghBufferData;
-+extern FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
-+extern FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
-+extern FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
- 
- #    endif
- 
diff --git a/graphics/freeglut/files/patch-src_fg__internal.h b/graphics/freeglut/files/patch-src_fg__internal.h
deleted file mode 100644
index ddfe3b90b866..000000000000
--- a/graphics/freeglut/files/patch-src_fg__internal.h
+++ /dev/null
@@ -1,10 +0,0 @@
---- src/fg_internal.h.orig	2014-12-22 16:27:02 UTC
-+++ src/fg_internal.h
-@@ -967,6 +967,7 @@ int         fgJoystickDetect( void );
- void        fgInitialiseJoysticks( void );
- void        fgJoystickClose( void );
- void        fgJoystickPollWindow( SFG_Window* window );
-+void        fgJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes );
- 
- /* InputDevice Initialisation and Closure */
- int         fgInputDeviceDetect( void );
diff --git a/graphics/freeglut/files/patch-src_x11_fg__internal__x11.h b/graphics/freeglut/files/patch-src_x11_fg__internal__x11.h
deleted file mode 100644
index bae5f3272bf9..000000000000
--- a/graphics/freeglut/files/patch-src_x11_fg__internal__x11.h
+++ /dev/null
@@ -1,85 +0,0 @@
---- src/x11/fg_internal_x11.h.orig	2014-10-20 15:27:04 UTC
-+++ src/x11/fg_internal_x11.h
-@@ -136,11 +136,50 @@ struct tagSFG_PlatformWindowState
- #include <string.h>
- 
- #    if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
-+
-+static int hatmap_x[9] = { 0, 0, 1, 1, 1, 0, -1, -1, -1 };
-+static int hatmap_y[9] = { 0, 1, 1, 0, -1, -1, -1, 0, 1 };
-+
-+/* Idents lower than USB_IDENT_OFFSET are for analog joysticks. */
-+#    define USB_IDENT_OFFSET    2
-+
-+#    define USBDEV "/dev/usb"
-+#    define UHIDDEV "/dev/uhid"
-+#    define AJSDEV "/dev/joy"
-+
- /* XXX The below hack is done until freeglut's autoconf is updated. */
- #        define HAVE_USB_JS    1
-+#        if defined(__NetBSD__)
-+/* XXX The below hack is done until freeglut's autoconf is updated. */
-+#            define HAVE_USBHID_H 1
-+#            ifdef HAVE_USBHID_H
-+#                include <usbhid.h>
-+#            else
-+#                include <usb.h>
-+#            endif
-+#        elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-+#            ifdef HAVE_USBHID_H
-+#                include <usbhid.h>
-+#            else
-+#                include <libusbhid.h>
-+#            endif
-+#            include <dev/usb/usb_ioctl.h>
-+#        endif
-+#        include <dev/usb/usb.h>
-+#        include <dev/usb/usbhid.h>
- 
-+/* Compatibility with older usb.h revisions */
-+#        if !defined(USB_MAX_DEVNAMES) && defined(MAXDEVNAMES)
-+#            define USB_MAX_DEVNAMES MAXDEVNAMES
-+#        endif
-+
- #        if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
--#            include <sys/joystick.h>
-+struct joystick {
-+	int x;
-+	int y;
-+	int b1;
-+	int b2;
-+};
- #        else
- /*
-  * XXX NetBSD/amd64 systems may find that they have to steal the
-@@ -189,6 +228,30 @@ struct tagSFG_PlatformWindowState
-  */
- #    define _JS_MAX_AXES 16
- typedef struct tagSFG_PlatformJoystick SFG_PlatformJoystick;
-+
-+#    if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
-+struct os_specific_s {
-+  char             fname [128 ];
-+  int              fd;
-+  int              is_analog;
-+  /* The following structure members are specific to analog joysticks */
-+  struct joystick  ajs;
-+#      ifdef HAVE_USB_JS
-+  /* The following structure members are specific to USB joysticks */
-+  struct hid_item *hids;
-+  int              hid_dlen;
-+  int              hid_offset;
-+  char            *hid_data_buf;
-+  int              axes_usage [ _JS_MAX_AXES ];
-+#      endif
-+  /* We keep button and axes state ourselves, as they might not be updated
-+   * on every read of a USB device
-+   */
-+  int              cache_buttons;
-+  float            cache_axes [ _JS_MAX_AXES ];
-+};
-+#    endif
-+
- struct tagSFG_PlatformJoystick
- {
- #   if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
diff --git a/graphics/freeglut/files/patch-src_x11_fg__joystick__x11.c b/graphics/freeglut/files/patch-src_x11_fg__joystick__x11.c
deleted file mode 100644
index 4479c1675715..000000000000
--- a/graphics/freeglut/files/patch-src_x11_fg__joystick__x11.c
+++ /dev/null
@@ -1,403 +0,0 @@
---- src/x11/fg_joystick_x11.c.orig	2021-03-21 08:11:11 UTC
-+++ src/x11/fg_joystick_x11.c
-@@ -41,196 +41,135 @@
- 
- #include <fcntl.h>
- 
-+/*this should be defined in a header file */
-+#define MAX_NUM_JOYSTICKS  2
- 
--/* BSD defines from "jsBSD.cxx" around lines 42-270 */
--
- #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
--
--#    ifdef HAVE_USB_JS
--#        if defined(__NetBSD__)
--#            ifdef HAVE_USBHID_H
--#                include <usbhid.h>
--#            else
--#                include <usb.h>
--#            endif
--#            include <dev/usb/usb.h>
--#        elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
--#            ifdef HAVE_USBHID_H
--#                include <usbhid.h>
--#            else
--#                include <libusbhid.h>
--#            endif
--#            include <legacy/dev/usb/usb.h>
--#        endif
--#        include <dev/usb/usbhid.h>
--
--/* Compatibility with older usb.h revisions */
--#        if !defined(USB_MAX_DEVNAMES) && defined(MAXDEVNAMES)
--#            define USB_MAX_DEVNAMES MAXDEVNAMES
--#        endif
--#    endif
--
--struct os_specific_s {
--  char             fname [128 ];
--  int              fd;
--  int              is_analog;
--  /* The following structure members are specific to analog joysticks */
--  struct joystick  ajs;
--#    ifdef HAVE_USB_JS
--  /* The following structure members are specific to USB joysticks */
--  struct hid_item *hids;
--  int              hid_dlen;
--  int              hid_offset;
--  char            *hid_data_buf;
--  int              axes_usage [ _JS_MAX_AXES ];
--#    endif
--  /* We keep button and axes state ourselves, as they might not be updated
--   * on every read of a USB device
--   */
--  int              cache_buttons;
--  float            cache_axes [ _JS_MAX_AXES ];
--};
--
--/* Idents lower than USB_IDENT_OFFSET are for analog joysticks. */
--#    define USB_IDENT_OFFSET    2
--
--#    define USBDEV "/dev/usb"
--#    define UHIDDEV "/dev/uhid"
--#    define AJSDEV "/dev/joy"
--
--
--#endif
--
--#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
--
--#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
--static int hatmap_x[9] = {0, 0, 1, 1, 1, 0, -1, -1, -1};
--static int hatmap_y[9] = {0, 1, 1, 0, -1, -1, -1, 0, 1};
--
--#    ifdef HAVE_USB_JS
-+#  ifdef HAVE_USB_JS
- /*
--* fghJoystickFindUSBdev (and its helper, fghJoystickWalkUSBdev) try to locate
--* the full name of a USB device. If /dev/usbN isn't readable, we punt and
--* return the uhidN device name. We warn the user of this situation once.
--*/
-+ * fghJoystickFindUSBdev (and its helper, fghJoystickWalkUSBdev) try to locate
-+ * the full name of a USB device. If /dev/usbN isn't readable, we punt and
-+ * return the uhidN device name. We warn the user of this situation once.
-+ */
- static char *fghJoystickWalkUSBdev(int f, char *dev, char *out, int outlen)
- {
--    struct usb_device_info di;
--    int i, a;
--    char *cp;
-+#if __FreeBSD_version < 800061
-+  struct usb_device_info di;
-+  int i, a;
-+  char *cp;
- 
--    for (a = 1; a < USB_MAX_DEVICES; a++) {
--        di.udi_addr = a;
--        if (ioctl(f, USB_DEVICEINFO, &di) != 0)
--            return NULL;
--        for (i = 0; i < USB_MAX_DEVNAMES; i++)
--            if (di.udi_devnames[i][0] &&
--                strcmp(di.udi_devnames[i], dev) == 0) {
--                cp = calloc(1, strlen(di.udi_vendor) + strlen(di.udi_product) + 2);
--                strcpy(cp, di.udi_vendor);
--                strcat(cp, " ");
--                strcat(cp, di.udi_product);
--                strncpy(out, cp, outlen - 1);
--                out[outlen - 1] = 0;
--                free(cp);
--                return out;
--            }
--    }
--    return NULL;
-+  for (a = 1; a < USB_MAX_DEVICES; a++) {
-+    di.udi_addr = a;
-+    if (ioctl(f, USB_DEVICEINFO, &di) != 0)
-+      return NULL;
-+    for (i = 0; i < USB_MAX_DEVNAMES; i++)
-+      if (di.udi_devnames[i][0] &&
-+          strcmp(di.udi_devnames[i], dev) == 0) {
-+        cp =  calloc( 1, strlen(di.udi_vendor) + strlen(di.udi_product) + 2);
-+        strcpy(cp, di.udi_vendor);
-+        strcat(cp, " ");
-+        strcat(cp, di.udi_product);
-+        strncpy(out, cp, outlen - 1);
-+        out[outlen - 1] = 0;
-+        free( cp );
-+        return out;
-+      }
-+  }
-+#endif
-+  return NULL;
- }
- 
- static int fghJoystickFindUSBdev(char *name, char *out, int outlen)
- {
--    int i, f;
--    char buf[50];
--    char *cp;
--    static int protection_warned = 0;
-+  int i, f;
-+  char buf[50];
-+  char *cp;
-+  static int protection_warned = 0;
- 
--    for (i = 0; i < 16; i++) {
--        snprintf(buf, sizeof(buf), "%s%d", USBDEV, i);
--        f = open(buf, O_RDONLY);
--        if (f >= 0) {
--            cp = fghJoystickWalkUSBdev(f, name, out, outlen);
--            close(f);
--            if (cp)
--                return 1;
--        }
--        else if (errno == EACCES) {
--            if (!protection_warned) {
--                fgWarning("Can't open %s for read!", buf);
--                protection_warned = 1;
--            }
--        }
-+  for (i = 0; i < 16; i++) {
-+    snprintf(buf, sizeof(buf), "%s%d", USBDEV, i);
-+    f = open(buf, O_RDONLY);
-+    if (f >= 0) {
-+      cp = fghJoystickWalkUSBdev(f, name, out, outlen);
-+      close(f);
-+      if (cp)
-+        return 1;
-     }
--    return 0;
-+    else if (errno == EACCES) {
-+      if (!protection_warned) {
-+        fgWarning ( "Can't open %s for read!", buf );
-+        protection_warned = 1;
-+      }
-+    }
-+  }
-+  return 0;
- }
--#endif
- 
- static int fghJoystickInitializeHID(struct os_specific_s *os,
--                                    int *num_axes, int *num_buttons)
-+       int *num_axes, int *num_buttons)
- {
-     int size, is_joystick;
- #   ifdef HAVE_USBHID_H
--    int report_id = 0;
-+        int report_id = 0;
- #   endif
-     struct hid_data *d;
-     struct hid_item h;
-     report_desc_t rd;
- 
--    if ((rd = hid_get_report_desc(os->fd)) == 0)
-+    if ( ( rd = hid_get_report_desc( os->fd ) ) == 0 )
-     {
--        fgWarning("error: %s: %s", os->fname, strerror(errno));
-+        fgWarning ( "error: %s: %s", os->fname, strerror( errno ) );
-         return FALSE;
-     }
- 
-     os->hids = NULL;
- 
- #   ifdef HAVE_USBHID_H
--    if (ioctl(os->fd, USB_GET_REPORT_ID, &report_id) < 0)
--    {
--        /*** XXX {report_id} may not be the right variable? ***/
--        fgWarning("error: %s%d: %s", UHIDDEV, report_id, strerror(errno));
--        return FALSE;
--    }
-+        if( ioctl( os->fd, USB_GET_REPORT_ID, &report_id ) < 0)
-+        {
-+            /*** XXX {report_id} may not be the right variable? ***/
-+            fgWarning ( "error: %s%d: %s", UHIDDEV, report_id, strerror( errno ) );
-+            return FALSE;
-+        }
- 
--    size = hid_report_size(rd, hid_input, report_id);
-+        size = hid_report_size( rd, hid_input, report_id );
- #   else
--    size = hid_report_size(rd, 0, hid_input);
-+        size = hid_report_size( rd, 0, hid_input );
- #   endif
--    os->hid_data_buf = calloc(1, size);
-+    os->hid_data_buf = calloc( 1, size );
-     os->hid_dlen = size;
- 
-     is_joystick = 0;
- #   ifdef HAVE_USBHID_H
--    d = hid_start_parse(rd, 1 << hid_input, report_id);
-+        d = hid_start_parse( rd, 1 << hid_input, report_id );
- #   else
--    d = hid_start_parse(rd, 1 << hid_input);
-+        d = hid_start_parse( rd, 1 << hid_input );
- #   endif
--    while (hid_get_item(d, &h))
--    {
--        int usage, page, interesting_hid;
-+        while( hid_get_item( d, &h ) )
-+        {
-+            int usage, page, interesting_hid;
- 
--        page = HID_PAGE(h.usage);
--        usage = HID_USAGE(h.usage);
-+            page = HID_PAGE( h.usage );
-+            usage = HID_USAGE( h.usage );
- 
--        /* This test is somewhat too simplistic, but this is how MicroSoft
--        * does, so I guess it works for all joysticks/game pads. */
--        is_joystick = is_joystick ||
--            (h.kind == hid_collection &&
--             page == HUP_GENERIC_DESKTOP &&
--             (usage == HUG_JOYSTICK || usage == HUG_GAME_PAD));
-+            /* This test is somewhat too simplistic, but this is how MicroSoft
-+             * does, so I guess it works for all joysticks/game pads. */
-+            is_joystick = is_joystick ||
-+                ( h.kind == hid_collection &&
-+                  page == HUP_GENERIC_DESKTOP &&
-+                  ( usage == HUG_JOYSTICK || usage == HUG_GAME_PAD ) );
- 
--        if (h.kind != hid_input)
--            continue;
-+            if( h.kind != hid_input )
-+                continue;
- 
--        if (!is_joystick)
--            continue;
-+            if( !is_joystick )
-+                continue;
- 
--        interesting_hid = TRUE;
--        if (page == HUP_GENERIC_DESKTOP)
--        {
--            switch (usage)
-+            interesting_hid = TRUE;
-+            if( page == HUP_GENERIC_DESKTOP )
-             {
-+                switch( usage )
-+                {
-                 case HUG_X:
-                 case HUG_RX:
-                 case HUG_Y:
-@@ -238,53 +177,51 @@ static int fghJoystickInitializeHID(struct os_specific
-                 case HUG_Z:
-                 case HUG_RZ:
-                 case HUG_SLIDER:
--                    if (*num_axes < _JS_MAX_AXES)
-+                    if( *num_axes < _JS_MAX_AXES )
-                     {
--                        os->axes_usage[*num_axes] = usage;
--                        (*num_axes)++;
-+                        os->axes_usage[ *num_axes ] = usage;
-+                        ( *num_axes )++;
-                     }
-                     break;
-                 case HUG_HAT_SWITCH:
-                     /* Allocate two axes for a hat */
--                    if (*num_axes + 1 < _JS_MAX_AXES)
-+                    if( *num_axes + 1 < _JS_MAX_AXES )
-                     {
--                        os->axes_usage[*num_axes] = usage;
-+                        os->axes_usage[ *num_axes ] = usage;
-                         (*num_axes)++;
--                        os->axes_usage[*num_axes] = usage;
-+                        os->axes_usage[ *num_axes ] = usage;
-                         (*num_axes)++;
-                     }
-                     break;
-                 default:
-                     interesting_hid = FALSE;
-                     break;
-+                }
-             }
--        }
--        else if (page == HUP_BUTTON)
--        {
--            interesting_hid = (usage > 0) &&
--                (usage <= _JS_MAX_BUTTONS);
-+            else if( page == HUP_BUTTON )
-+            {
-+                interesting_hid = ( usage > 0 ) &&
-+                    ( usage <= _JS_MAX_BUTTONS );
- 
--            if (interesting_hid && usage - 1 > *num_buttons)
--                *num_buttons = usage - 1;
--        }
-+                if( interesting_hid && usage - 1 > *num_buttons )
-+                    *num_buttons = usage - 1;
-+            }
- 
--        if (interesting_hid)
--        {
--            h.next = os->hids;
--            os->hids = calloc(1, sizeof(struct hid_item));
--            *os->hids = h;
-+            if( interesting_hid )
-+            {
-+                h.next = os->hids;
-+                os->hids = calloc( 1, sizeof ( struct hid_item ) );
-+                *os->hids = h;
-+            }
-         }
--    }
--    hid_end_parse(d);
-+        hid_end_parse( d );
- 
--    return os->hids != NULL;
-+        return os->hids != NULL;
- }
--#    endif
--#endif
-+#  endif /* HAVE_USB_JS */
-+#endif /* FreeBSD or NetBSD */
- 
- 
--/*this should be defined in a header file */
--#define MAX_NUM_JOYSTICKS  2
- extern SFG_Joystick *fgJoystick [ MAX_NUM_JOYSTICKS ];
- 
- void fgPlatformJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes )
-@@ -500,7 +437,7 @@ void fgPlatformJoystickOpen( SFG_Joystick* joy )
-         joy->num_axes    =  2;
-         joy->num_buttons = 32;
- 
--        fghJoystickRawRead( joy, buttons, axes );
-+        fgJoystickRawRead( joy, buttons, axes );
-         joy->error = axes[ 0 ] < -1000000000.0f;
-         if( joy->error )
-             return;
-@@ -620,7 +557,7 @@ void fgPlatformJoystickOpen( SFG_Joystick* joy )
- 
-     do
-     {
--        fghJoystickRawRead( joy, NULL, joy->center );
-+        fgJoystickRawRead( joy, NULL, joy->center );
-         counter++;
-     } while( !joy->error &&
-              counter < 100 &&
-@@ -647,6 +584,23 @@ void fgPlatformJoystickOpen( SFG_Joystick* joy )
- #endif
- }
- 
-+void fgJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes )
-+{
-+    int i;
-+
-+    /* Defaults */
-+    if( buttons )
-+        *buttons = 0;
-+
-+    if( axes )
-+        for( i = 0; i < joy->num_axes; i++ )
-+            axes[ i ] = 1500.0f;
-+
-+    if( joy->error )
-+        return;
-+
-+	fgPlatformJoystickRawRead ( joy, buttons, axes );
-+}
- 
- void fgPlatformJoystickInit( SFG_Joystick *fgJoystick[], int ident )
- {
diff --git a/graphics/freeglut/pkg-plist b/graphics/freeglut/pkg-plist
index 0ff52f8015d2..45e728cf4627 100644
--- a/graphics/freeglut/pkg-plist
+++ b/graphics/freeglut/pkg-plist
@@ -10,14 +10,14 @@ lib/cmake/FreeGLUT/FreeGLUTTargets.cmake
 lib/libglut.a
 lib/libglut.so
 lib/libglut.so.3
-lib/libglut.so.3.11.0
+lib/libglut.so.3.13.0
 libdata/pkgconfig/glut.pc
+%%PORTDOCS%%%%DOCSDIR%%/api.md
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/CallbackMaker
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/Fractals
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/Fractals_random
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/Lorenz
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/One
-%%PORTEXAMPLES%%%%EXAMPLESDIR%%/Resizer
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/fractals.dat
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/multi-touch
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/shapes
@@ -25,11 +25,90 @@ libdata/pkgconfig/glut.pc
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/spaceball
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/subwin
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/timer
-%%PORTDOCS%%%%DOCSDIR%%/download.html
-%%PORTDOCS%%%%DOCSDIR%%/freeglut.html
-%%PORTDOCS%%%%DOCSDIR%%/freeglut_logo.png
-%%PORTDOCS%%%%DOCSDIR%%/freeglut_user_interface.html
-%%PORTDOCS%%%%DOCSDIR%%/index.html
-%%PORTDOCS%%%%DOCSDIR%%/ogl_sm.png
-%%PORTDOCS%%%%DOCSDIR%%/progress.html
-%%PORTDOCS%%%%DOCSDIR%%/structure.html
+share/man/man3/glut.3.gz
+share/man/man3/glutAddMenuEntry.3.gz
+share/man/man3/glutAddSubMenu.3.gz
+share/man/man3/glutAttachMenu.3.gz
+share/man/man3/glutBitmapCharacter.3.gz
+share/man/man3/glutBitmapWidth.3.gz
+share/man/man3/glutButtonBoxFunc.3.gz
+share/man/man3/glutChangeToMenuEntry.3.gz
+share/man/man3/glutChangeToSubMenu.3.gz
+share/man/man3/glutCopyColormap.3.gz
+share/man/man3/glutCreateMenu.3.gz
+share/man/man3/glutCreateSubWindow.3.gz
+share/man/man3/glutCreateWindow.3.gz
+share/man/man3/glutDestroyMenu.3.gz
+share/man/man3/glutDestroyWindow.3.gz
+share/man/man3/glutDeviceGet.3.gz
+share/man/man3/glutDialsFunc.3.gz
+share/man/man3/glutDisplayFunc.3.gz
+share/man/man3/glutEnterGameMode.3.gz
+share/man/man3/glutEntryFunc.3.gz
+share/man/man3/glutEstablishOverlay.3.gz
+share/man/man3/glutExtensionSupported.3.gz
+share/man/man3/glutForceJoystickFunc.3.gz
+share/man/man3/glutFullScreen.3.gz
+share/man/man3/glutGameModeGet.3.gz
+share/man/man3/glutGameModeString.3.gz
+share/man/man3/glutGet.3.gz
+share/man/man3/glutGetColor.3.gz
+share/man/man3/glutGetModifiers.3.gz
+share/man/man3/glutIdleFunc.3.gz
+share/man/man3/glutIgnoreKeyRepeat.3.gz
+share/man/man3/glutInit.3.gz
+share/man/man3/glutInitDisplayMode.3.gz
+share/man/man3/glutInitDisplayString.3.gz
+share/man/man3/glutInitWindowPosition.3.gz
+share/man/man3/glutJoystickFunc.3.gz
+share/man/man3/glutKeyboardFunc.3.gz
+share/man/man3/glutKeyboardUpFunc.3.gz
+share/man/man3/glutLayerGet.3.gz
+share/man/man3/glutMainLoop.3.gz
+share/man/man3/glutMenuStatusFunc.3.gz
+share/man/man3/glutMotionFunc.3.gz
+share/man/man3/glutMouseFunc.3.gz
+share/man/man3/glutOverlayDisplayFunc.3.gz
+share/man/man3/glutPopWindow.3.gz
+share/man/man3/glutPositionWindow.3.gz
+share/man/man3/glutPostOverlayRedisplay.3.gz
+share/man/man3/glutPostRedisplay.3.gz
+share/man/man3/glutRemoveMenuItem.3.gz
+share/man/man3/glutRemoveOverlay.3.gz
+share/man/man3/glutReportErrors.3.gz
+share/man/man3/glutReshapeFunc.3.gz
+share/man/man3/glutReshapeWindow.3.gz
+share/man/man3/glutSetColor.3.gz
+share/man/man3/glutSetCursor.3.gz
+share/man/man3/glutSetKeyRepeat.3.gz
+share/man/man3/glutSetMenu.3.gz
+share/man/man3/glutSetWindow.3.gz
+share/man/man3/glutSetWindowTitle.3.gz
+share/man/man3/glutShowOverlay.3.gz
+share/man/man3/glutShowWindow.3.gz
+share/man/man3/glutSolidCone.3.gz
+share/man/man3/glutSolidCube.3.gz
+share/man/man3/glutSolidDodecahedron.3.gz
+share/man/man3/glutSolidIcosahedron.3.gz
+share/man/man3/glutSolidOctahedron.3.gz
+share/man/man3/glutSolidSphere.3.gz
+share/man/man3/glutSolidTeapot.3.gz
+share/man/man3/glutSolidTetrahedron.3.gz
+share/man/man3/glutSolidTorus.3.gz
+share/man/man3/glutSpaceballButtonFunc.3.gz
+share/man/man3/glutSpaceballMotionFunc.3.gz
+share/man/man3/glutSpaceballRotateFunc.3.gz
+share/man/man3/glutSpecialFunc.3.gz
+share/man/man3/glutSpecialUpFunc.3.gz
+share/man/man3/glutStrokeCharacter.3.gz
+share/man/man3/glutStrokeWidth.3.gz
+share/man/man3/glutSwapBuffers.3.gz
+share/man/man3/glutSwapInterval.3.gz
+share/man/man3/glutTabletButtonFunc.3.gz
+share/man/man3/glutTabletMotionFunc.3.gz
+share/man/man3/glutTimerFunc.3.gz
+share/man/man3/glutUseLayer.3.gz
+share/man/man3/glutVideoResizeGet.3.gz
+share/man/man3/glutVisibilityFunc.3.gz
+share/man/man3/glutWarpPointer.3.gz
+share/man/man3/glutWindowStatusFunc.3.gz