diff options
author | Koop Mast <kwm@FreeBSD.org> | 2015-12-12 18:51:42 +0000 |
---|---|---|
committer | Koop Mast <kwm@FreeBSD.org> | 2015-12-12 18:51:42 +0000 |
commit | 617e72cb0e2de4c57deb9cf70fda8e700782b64e (patch) | |
tree | 97c4bd4a7f1b9055f2ead7707820345917990b5e /graphics/freeglut | |
parent | b728ebe2d4a3703ff58242140020904394d4fa9a (diff) | |
download | ports-617e72cb0e2de4c57deb9cf70fda8e700782b64e.tar.gz ports-617e72cb0e2de4c57deb9cf70fda8e700782b64e.zip |
Notes
Diffstat (limited to 'graphics/freeglut')
-rw-r--r-- | graphics/freeglut/Makefile | 31 | ||||
-rw-r--r-- | graphics/freeglut/distinfo | 4 | ||||
-rw-r--r-- | graphics/freeglut/files/patch-CMakeLists.txt | 10 | ||||
-rw-r--r-- | graphics/freeglut/files/patch-src_fg__internal.h | 10 | ||||
-rw-r--r-- | graphics/freeglut/files/patch-src_fg__joystick.c | 304 | ||||
-rw-r--r-- | graphics/freeglut/files/patch-src_freeglut_joystick.c | 30 | ||||
-rw-r--r-- | graphics/freeglut/files/patch-src_x11_fg__internal__x11.h | 76 | ||||
-rw-r--r-- | graphics/freeglut/files/patch-src_x11_fg__joystick__x11.c | 204 | ||||
-rw-r--r-- | graphics/freeglut/pkg-message | 10 | ||||
-rw-r--r-- | graphics/freeglut/pkg-plist | 19 |
10 files changed, 632 insertions, 66 deletions
diff --git a/graphics/freeglut/Makefile b/graphics/freeglut/Makefile index e86a182e6a9f..1f6482bffc07 100644 --- a/graphics/freeglut/Makefile +++ b/graphics/freeglut/Makefile @@ -2,34 +2,29 @@ # $FreeBSD$ PORTNAME= freeglut -PORTVERSION= 2.8.1 -PORTREVISION= 4 +PORTVERSION= 3.0.0 CATEGORIES= graphics MASTER_SITES= SF MAINTAINER= x11@FreeBSD.org -COMMENT= Alternative to the OpenGL Utility Toolkit (GLUT) library +COMMENT= open source implementation of the GLUT library LICENSE= MIT LICENSE_FILE= ${WRKSRC}/COPYING -CONFLICTS= libglut-[0-9].* - -USES= libtool -GNU_CONFIGURE= yes +USES= cmake USE_LDCONFIG= yes -USE_XORG= ice xi xxf86vm xrandr -USE_GL= glu -CONFIGURE_ARGS= --disable-warnings +USE_XORG= ice x11 xi xrandr +USE_GL= gl glu CPPFLAGS+= -I${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib -lusbhid -lm -USE_LDCONFIG= yes -INSTALL_TARGET= install-strip +INSTALL_TARGET= install/strip 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 shapes +BINS= CallbackMaker Fractals Fractals_random Lorenz One Resizer \ + multi-touch shapes smooth_opengl3 spaceball subwin timer OPTIONS_DEFINE= DOCS EXAMPLES @@ -41,23 +36,19 @@ pre-configure: ${WRKSRC}/progs/demos/${fract} .endfor -post-build: - @${MV} ${WRKSRC}/progs/demos/CallbackMaker/.libs/CallbackMaker \ - ${WRKSRC}/progs/demos/CallbackMaker/.libs/callbackmaker - post-install: .if ${PORT_OPTIONS:MDOCS} @${MKDIR} ${STAGEDIR}${DOCSDIR} .for FILE in ${DOCS} - @${INSTALL_DATA} ${WRKSRC}/doc/${FILE} ${STAGEDIR}${DOCSDIR} + ${INSTALL_DATA} ${WRKSRC}/doc/${FILE} ${STAGEDIR}${DOCSDIR} .endfor @${ECHO_MSG} "===> Documentation installed in ${DOCSDIR}." .endif .if ${PORT_OPTIONS:MEXAMPLES} @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} - @${INSTALL_DATA} ${WRKSRC}/progs/demos/Fractals/fractals.dat ${STAGEDIR}${EXAMPLESDIR} + ${INSTALL_DATA} ${WRKSRC}/progs/demos/Fractals/fractals.dat ${STAGEDIR}${EXAMPLESDIR} .for prog in ${BINS} - @${INSTALL_PROGRAM} ${WRKSRC}/progs/demos/${prog}/.libs/${prog:tl} ${STAGEDIR}${EXAMPLESDIR} + ${INSTALL_PROGRAM} ${WRKSRC}/bin/${prog} ${STAGEDIR}${EXAMPLESDIR} .endfor @${ECHO_MSG} "===> Examples installed in ${EXAMPLESDIR}." .endif diff --git a/graphics/freeglut/distinfo b/graphics/freeglut/distinfo index a0bf5031d1c0..4397410fd619 100644 --- a/graphics/freeglut/distinfo +++ b/graphics/freeglut/distinfo @@ -1,2 +1,2 @@ -SHA256 (freeglut-2.8.1.tar.gz) = dde46626a62a1cd9cf48a11951cdd592e7067c345cffe193a149dfd47aef999a -SIZE (freeglut-2.8.1.tar.gz) = 1005343 +SHA256 (freeglut-3.0.0.tar.gz) = 2a43be8515b01ea82bcfa17d29ae0d40bd128342f0930cd1f375f1ff999f76a2 +SIZE (freeglut-3.0.0.tar.gz) = 419095 diff --git a/graphics/freeglut/files/patch-CMakeLists.txt b/graphics/freeglut/files/patch-CMakeLists.txt new file mode 100644 index 000000000000..cc41218f5bfc --- /dev/null +++ b/graphics/freeglut/files/patch-CMakeLists.txt @@ -0,0 +1,10 @@ +--- CMakeLists.txt.orig 2015-02-18 04:59:57 UTC ++++ CMakeLists.txt +@@ -522,6 +522,6 @@ IF(FREEGLUT_GLES) + SET(PC_FILENAME "freeglut-gles.pc") + ENDIF() + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/freeglut.pc.in ${CMAKE_BINARY_DIR}/freeglut.pc @ONLY) +-INSTALL(FILES ${CMAKE_BINARY_DIR}/freeglut.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/ RENAME ${PC_FILENAME}) ++INSTALL(FILES ${CMAKE_BINARY_DIR}/freeglut.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/libdata/pkgconfig/ RENAME ${PC_FILENAME}) + # TODO: change the library and .pc name when building for GLES, + # e.g. -lglut-GLES diff --git a/graphics/freeglut/files/patch-src_fg__internal.h b/graphics/freeglut/files/patch-src_fg__internal.h new file mode 100644 index 000000000000..ddfe3b90b866 --- /dev/null +++ b/graphics/freeglut/files/patch-src_fg__internal.h @@ -0,0 +1,10 @@ +--- 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_fg__joystick.c b/graphics/freeglut/files/patch-src_fg__joystick.c new file mode 100644 index 000000000000..3618d8db200d --- /dev/null +++ b/graphics/freeglut/files/patch-src_fg__joystick.c @@ -0,0 +1,304 @@ +--- src/fg_joystick.c.orig 2014-10-20 15:27:04 UTC ++++ src/fg_joystick.c +@@ -40,238 +40,6 @@ + #define JS_TRUE 1 + #define JS_FALSE 0 + +-/* BSD defines from "jsBSD.cxx" around lines 42-270 */ +- +-#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +- +-# ifdef HAVE_USB_JS +-# 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 +-# endif +-# include <legacy/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 +-# endif +- +-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 }; +-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" +- +-# 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. +- */ +-static char *fghJoystickWalkUSBdev(int f, char *dev, char *out, int outlen) +-{ +- 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; +-} +- +-static int fghJoystickFindUSBdev(char *name, char *out, int outlen) +-{ +- 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; +- } +- } +- } +- return 0; +-} +- +-static int fghJoystickInitializeHID(struct os_specific_s *os, +- int *num_axes, int *num_buttons) +-{ +- int size, is_joystick; +-# ifdef HAVE_USBHID_H +- 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 ) +- { +- 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; +- } +- +- size = hid_report_size( rd, hid_input, report_id ); +-# else +- size = hid_report_size( rd, 0, hid_input ); +-# endif +- 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 ); +-# else +- d = hid_start_parse( rd, 1 << hid_input ); +-# endif +- while( hid_get_item( d, &h ) ) +- { +- int usage, page, interesting_hid; +- +- 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 ) ); +- +- if( h.kind != hid_input ) +- continue; +- +- if( !is_joystick ) +- continue; +- +- interesting_hid = TRUE; +- if( page == HUP_GENERIC_DESKTOP ) +- { +- switch( usage ) +- { +- case HUG_X: +- case HUG_RX: +- case HUG_Y: +- case HUG_RY: +- case HUG_Z: +- case HUG_RZ: +- case HUG_SLIDER: +- if( *num_axes < _JS_MAX_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 ) +- { +- os->axes_usage[ *num_axes ] = usage; +- (*num_axes)++; +- 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 ); +- +- 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; +- } +- } +- hid_end_parse( d ); +- +- return os->hids != NULL; +-} +-# endif +-#endif + + /* + * Functions associated with the "jsJoystick" class in PLIB +@@ -306,26 +74,6 @@ extern void fgPlatformJoystickClose ( in + #define MAX_NUM_JOYSTICKS 2 + SFG_Joystick *fgJoystick [ MAX_NUM_JOYSTICKS ]; + +-/* +- * Read the raw joystick data +- */ +-static void fghJoystickRawRead( 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 ); +-} + + /* + * Correct the joystick axis data +@@ -384,7 +132,7 @@ static void fghJoystickRead( SFG_Joystic + axes[ i ] = 0.0f; + } + +- fghJoystickRawRead( joy, buttons, raw_axes ); ++ fgJoystickRawRead( joy, buttons, raw_axes ); + + if( axes ) + for( i=0; i<joy->num_axes; i++ ) +@@ -966,6 +714,26 @@ int fgJoystickDetect( void ) + } + + /* ++ * Read the raw joystick data ++ */ ++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 ); ++} ++/* + * Joystick information, setup and execution functions + */ + diff --git a/graphics/freeglut/files/patch-src_freeglut_joystick.c b/graphics/freeglut/files/patch-src_freeglut_joystick.c deleted file mode 100644 index 1301a96ed09e..000000000000 --- a/graphics/freeglut/files/patch-src_freeglut_joystick.c +++ /dev/null @@ -1,30 +0,0 @@ ---- src/freeglut_joystick.c.orig 2011-09-28 03:37:26.000000000 +0200 -+++ src/freeglut_joystick.c 2012-01-05 09:51:03.000000000 +0100 -@@ -152,7 +152,10 @@ - # include <libusbhid.h> - # endif - # endif --# include <legacy/dev/usb/usb.h> -+# include <dev/usb/usb.h> -+# if __FreeBSD_version >= 800061 -+# include <dev/usb/usb_ioctl.h> -+# endif - # include <dev/usb/usbhid.h> - - /* Compatibility with older usb.h revisions */ -@@ -199,6 +202,7 @@ - */ - static char *fghJoystickWalkUSBdev(int f, char *dev, char *out, int outlen) - { -+#if __FreeBSD_version < 800061 - struct usb_device_info di; - int i, a; - char *cp; -@@ -220,6 +224,7 @@ - return out; - } - } -+#endif - return NULL; - } - diff --git a/graphics/freeglut/files/patch-src_x11_fg__internal__x11.h b/graphics/freeglut/files/patch-src_x11_fg__internal__x11.h new file mode 100644 index 000000000000..41e551317b72 --- /dev/null +++ b/graphics/freeglut/files/patch-src_x11_fg__internal__x11.h @@ -0,0 +1,76 @@ +--- src/x11/fg_internal_x11.h.orig 2014-10-20 15:27:04 UTC ++++ src/x11/fg_internal_x11.h +@@ -136,8 +136,42 @@ 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> +@@ -189,6 +223,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 new file mode 100644 index 000000000000..e2cd05f3593e --- /dev/null +++ b/graphics/freeglut/files/patch-src_x11_fg__joystick__x11.c @@ -0,0 +1,204 @@ +--- src/x11/fg_joystick_x11.c.orig 2014-12-02 05:22:12 UTC ++++ src/x11/fg_joystick_x11.c +@@ -46,6 +46,183 @@ + #define MAX_NUM_JOYSTICKS 2 + extern SFG_Joystick *fgJoystick [ MAX_NUM_JOYSTICKS ]; + ++#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) ++# 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. ++ */ ++static char *fghJoystickWalkUSBdev(int f, char *dev, char *out, int outlen) ++{ ++#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; ++ } ++ } ++#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; ++ ++ 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; ++ } ++ } ++ } ++ return 0; ++} ++ ++static int fghJoystickInitializeHID(struct os_specific_s *os, ++ int *num_axes, int *num_buttons) ++{ ++ int size, is_joystick; ++# ifdef HAVE_USBHID_H ++ 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 ) ++ { ++ 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; ++ } ++ ++ size = hid_report_size( rd, hid_input, report_id ); ++# else ++ size = hid_report_size( rd, 0, hid_input ); ++# endif ++ 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 ); ++# else ++ d = hid_start_parse( rd, 1 << hid_input ); ++# endif ++ while( hid_get_item( d, &h ) ) ++ { ++ int usage, page, interesting_hid; ++ ++ 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 ) ); ++ ++ if( h.kind != hid_input ) ++ continue; ++ ++ if( !is_joystick ) ++ continue; ++ ++ interesting_hid = TRUE; ++ if( page == HUP_GENERIC_DESKTOP ) ++ { ++ switch( usage ) ++ { ++ case HUG_X: ++ case HUG_RX: ++ case HUG_Y: ++ case HUG_RY: ++ case HUG_Z: ++ case HUG_RZ: ++ case HUG_SLIDER: ++ if( *num_axes < _JS_MAX_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 ) ++ { ++ os->axes_usage[ *num_axes ] = usage; ++ (*num_axes)++; ++ 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 ); ++ ++ 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; ++ } ++ } ++ hid_end_parse( d ); ++ ++ return os->hids != NULL; ++} ++# endif /* HAVE_USB_JS */ ++#endif /* FreeBSD or NetBSD */ ++ + void fgPlatformJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes ) + { + int status; +@@ -259,7 +436,7 @@ void fgPlatformJoystickOpen( SFG_Joystic + 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; +@@ -379,7 +556,7 @@ void fgPlatformJoystickOpen( SFG_Joystic + + do + { +- fghJoystickRawRead( joy, NULL, joy->center ); ++ fgJoystickRawRead( joy, NULL, joy->center ); + counter++; + } while( !joy->error && + counter < 100 && diff --git a/graphics/freeglut/pkg-message b/graphics/freeglut/pkg-message index f41059efbc28..1e73804f97b9 100644 --- a/graphics/freeglut/pkg-message +++ b/graphics/freeglut/pkg-message @@ -1,9 +1,3 @@ -Since FreeBSD has new USB stack, freeglut normally doesn't build on FreeBSD 8 -(yet). To workaround this a small patch adds one include file and comments out -content of one function (only leaves return NULL). +Joystick support is untested and it is unknown if it works. -This might cause side effects. Joysticks do not work, and there might be ports -that do not compile or applications that crash because of this. - -Do not hesitate to contact x11@FreeBSD.org if there are any issues and side -effects because of this. +Do not hesitate to contact x11@FreeBSD.org if this causes issues. diff --git a/graphics/freeglut/pkg-plist b/graphics/freeglut/pkg-plist index 03513423b42a..9d4865b46687 100644 --- a/graphics/freeglut/pkg-plist +++ b/graphics/freeglut/pkg-plist @@ -5,14 +5,21 @@ include/GL/glut.h lib/libglut.a lib/libglut.so lib/libglut.so.3 -lib/libglut.so.3.9.0 -%%PORTEXAMPLES%%%%EXAMPLESDIR%%/callbackmaker -%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fractals -%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fractals_random +lib/libglut.so.3.10.0 +libdata/pkgconfig/freeglut.pc +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/CallbackMaker +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/Fractals +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/Fractals_random %%PORTEXAMPLES%%%%EXAMPLESDIR%%/fractals.dat -%%PORTEXAMPLES%%%%EXAMPLESDIR%%/lorenz -%%PORTEXAMPLES%%%%EXAMPLESDIR%%/one +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/Lorenz +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/One +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/Resizer +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/multi-touch +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/smooth_opengl3 +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/spaceball +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/subwin %%PORTEXAMPLES%%%%EXAMPLESDIR%%/shapes +%%PORTEXAMPLES%%%%EXAMPLESDIR%%/timer %%PORTDOCS%%%%DOCSDIR%%/download.html %%PORTDOCS%%%%DOCSDIR%%/freeglut.html %%PORTDOCS%%%%DOCSDIR%%/freeglut_logo.png |