Hi,

I recently had a problem installing the rgl package on OS X and put together
a simple patch. The patched package is available here:

http://jinome.stanford.edu/files/rgl_0.66-patched_for_gcc4.tar.gz

It can be installed with "R CMD INSTALL rgl_0.66-patched_for_gcc4.tar.gz" as
normal at the command line.

Also -- as of right now rgl is not in the repository of version 2.3 packages
(or at least did not come up when I ran new.packages() at the R prompt). I'm
not sure if this build error was the problem, but if so this
version now works perfectly. For those who are interested, I have included
details on what exactly went wrong and the fix:

1) What went wrong -- here is the output of the initial build attempt. The
install fails because of an invalid integer conversion, which I eventually
figured out was
due to gcc-4 flagging it as an error, whereas gcc-3 and earlier would have
called it a warning.

[root:/root/downloads/rgl_patch]$R CMD INSTALL rgl_0.66.tar.gz
* Installing *source* package 'rgl' ...
checking for libpng-config... yes
configure: using libpng-config
configure: using libpng dynamic linkage
configure: creating ./config.status
config.status: creating src/Makevars
** libs
** arch - i386
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c BBoxDeco.cpp -o BBoxDeco.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Background.cpp -o Background.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Color.cpp -o Color.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Disposable.cpp -o Disposable.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c FaceSet.cpp -o FaceSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Light.cpp -o Light.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c LineSet.cpp -o LineSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c LineStripSet.cpp -o LineStripSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Material.cpp -o Material.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c PointSet.cpp -o PointSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c PrimitiveSet.cpp -o PrimitiveSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c QuadSet.cpp -o QuadSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c RenderContext.cpp -o RenderContext.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Shape.cpp -o Shape.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c SphereMesh.cpp -o SphereMesh.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c SphereSet.cpp -o SphereSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c SpriteSet.cpp -o SpriteSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c String.cpp -o String.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Surface.cpp -o Surface.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c TextSet.cpp -o TextSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Texture.cpp -o Texture.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c TriangleSet.cpp -o TriangleSet.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c Viewpoint.cpp -o Viewpoint.o
g++-4.0 -arch i386 -I/Library/Frameworks/R.framework/Resources/include
-I/Library/Frameworks/R.framework/Resources/include/i386 -DRGL_USE_CARBON
-I/System/Library/Frameworks/AGL.framework/Headers -DHAVE_PNG_H
-I/opt/local/include/libpng12 -msse3   -fPIC -fno-common  -g -O2
-march=pentium-m -mtune=prescott -c api.cpp -o api.o
api.cpp: In function 'void rgl_user2window(int*, int*, double*, double*,
double*, double*, int*)':
api.cpp:608: error: invalid conversion from 'int*' to 'const GLint*'
api.cpp:608: error:   initializing argument 6 of 'GLint gluProject(GLdouble,
GLdouble, GLdouble, const GLdouble*, const GLdouble*, const GLint*,
GLdouble*, GLdouble*, GLdouble*)'
api.cpp: In function 'void rgl_window2user(int*, int*, double*, double*,
double*, double*, int*)':
api.cpp:633: error: invalid conversion from 'int*' to 'const GLint*'
api.cpp:633: error:   initializing argument 6 of 'GLint
gluUnProject(GLdouble, GLdouble, GLdouble, const GLdouble*, const GLdouble*,
const GLint*, GLdouble*, GLdouble*, GLdouble*)'
make: *** [api.o] Error 1
chmod: cannot access
`/Library/Frameworks/R.framework/Versions/2.3/Resources/library/rgl/libs/i386/*':
No such file or directory
ERROR: compilation failed for package 'rgl'
** Removing
'/Library/Frameworks/R.framework/Versions/2.3/Resources/library/rgl'

---------------------

2) The fix is below. It seems that gcc-4.0 does not want to convert an int*
directly to a const GLint*, maybe because it might be possible to
fool around with the underlying variable. To deal with this, I defined a
GLint named viewgl and set it equal to the dereferenced value
of the int* view. I then passed in the address of viewgl to the gluProject
routine. This eliminated the error messages and allowed compilation.


-----RELEVANT SECTION OF rgl/src/api.cpp BEFORE ---

void rgl_user2window(int* successptr, int* idata, double* point, double*
pixel, double* model, double* proj, int* view)
{
  int success = RGL_FAIL;
  GLdouble* vertex = pixel;
  int columns = idata[0];

  Device* device = deviceManager->getAnyDevice();

  if ( device ) {
        for (int i=0; i<columns; i++) {
                gluProject(point[0],point[1],point[2],model,proj,view,
                vertex,vertex+1,vertex+2);
                vertex[0] /= view[2];
                vertex[1] /= view[3];
                point += 3;
                vertex += 3;
        }
        success = RGL_SUCCESS;
  }

  *successptr = success;
}

void rgl_window2user(int* successptr, int* idata, double* point, double*
pixel, double* model, double* proj, int* view)
{
  int success = RGL_FAIL;
  GLdouble* vertex = point;
  int columns = idata[0];

  Device* device = deviceManager->getAnyDevice();

  if ( device ) {
        for (int i=0; i<columns; i++) {
                pixel[0] *= view[2];
                pixel[1] *= view[3];
                gluUnProject(pixel[0],pixel[1],pixel[2],model,proj,view,
                vertex,vertex+1,vertex+2);
                pixel += 3;
                vertex += 3;
        }
        success = RGL_SUCCESS;
  }

  *successptr = success;
}



----RELEVANT SECTION OF rgl/src/api.cpp AFTER ----

void rgl_user2window(int* successptr, int* idata, double* point, double*
pixel, double* model, double* proj, int* view)
{
  int success = RGL_FAIL;
  GLdouble* vertex = pixel;
  int columns = idata[0];

  //To fix gcc-4.0 error about "invalid conversion of int* to const GLint*,
initialize
  //a GLint variable viewgl and set it to the dereferenced value of view.
This is now safe.
  GLint viewgl = *view;

  Device* device = deviceManager->getAnyDevice();

  if ( device ) {
        for (int i=0; i<columns; i++) {
                gluProject(point[0],point[1],point[2],model,proj,&viewgl,
//pass address of viewgl
                vertex,vertex+1,vertex+2);
                vertex[0] /= view[2];
                vertex[1] /= view[3];
                point += 3;
                vertex += 3;
        }
        success = RGL_SUCCESS;
  }

  *successptr = success;
}

void rgl_window2user(int* successptr, int* idata, double* point, double*
pixel, double* model, double* proj, int* view)
{
  int success = RGL_FAIL;
  GLdouble* vertex = point;
  int columns = idata[0];

  //To fix gcc-4.0 error about "invalid conversion of int* to const GLint*,
initialize
  //a GLint variable viewgl and set it to the dereferenced value of view.
This is now safe.
  GLint viewgl = *view;

  Device* device = deviceManager->getAnyDevice();

  if ( device ) {
        for (int i=0; i<columns; i++) {
                pixel[0] *= view[2];
                pixel[1] *= view[3];
                gluUnProject(pixel[0],pixel[1],pixel[2],model,proj,&viewgl,
//pass address of viewgl
                vertex,vertex+1,vertex+2);
                pixel += 3;
                vertex += 3;
        }
        success = RGL_SUCCESS;
  }

  *successptr = success;
}

	[[alternative HTML version deleted]]

