From bf2cd13450bcef0550faae5dc9bcdebe860d9216 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 10 Oct 2015 11:18:35 +1000 Subject: [PATCH 1/5] Travis and Makefile refinements - less logging, cmake build coverage in Travis --- .travis.yml | 5 +-- Makefile | 92 +++++++++++++++++++++++++++-------------------------- 2 files changed, 50 insertions(+), 47 deletions(-) diff --git a/.travis.yml b/.travis.yml index e2a6a35..2eabd21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,13 @@ language: cpp #sudo: false install: -- sudo apt-get install git dos2unix +- sudo apt-get install git cmake dos2unix libosmesa-dev script: - make -C auto clobber - make extensions -- make - make dist-src +- make clean; SYSTEM=linux make +- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' . ; make; popd addons: artifacts: bucket: glew diff --git a/Makefile b/Makefile index 792e779..8bdb0e1 100644 --- a/Makefile +++ b/Makefile @@ -64,12 +64,14 @@ DIST_DIR := $(shell mktemp -d /tmp/glew.XXXXXX)/$(DIST_NAME) # To disable symlinks: # - use LN= on gmake command-line -AR ?= ar -ARFLAGS ?= cr -INSTALL ?= install -STRIP ?= strip -RM ?= rm -f -LN ?= ln -sf +AR ?= ar +ARFLAGS ?= cr +INSTALL ?= install +STRIP ?= strip +RM ?= rm -f +LN ?= ln -sf +UNIX2DOS ?= unix2dos -q +DOS2UNIX ?= dos2unix -q ifneq (,$(filter debug,$(MAKECMDGOALS))) OPT = -g @@ -349,12 +351,12 @@ dist-win32: $(RM) -f $(DIST_DIR)/bin/*/*/*.pdb $(DIST_DIR)/bin/*/*/*.exp $(RM) -f $(DIST_DIR)/bin/*/*/glewinfo-*.exe $(DIST_DIR)/bin/*/*/visualinfo-*.exe $(RM) -f $(DIST_DIR)/lib/*/*/*.pdb $(DIST_DIR)/lib/*/*/*.exp - unix2dos $(DIST_DIR)/include/GL/*.h - unix2dos $(DIST_DIR)/doc/*.txt - unix2dos $(DIST_DIR)/doc/*.html - unix2dos $(DIST_DIR)/*.txt + $(UNIX2DOS) $(DIST_DIR)/include/GL/*.h + $(UNIX2DOS) $(DIST_DIR)/doc/*.txt + $(UNIX2DOS) $(DIST_DIR)/doc/*.html + $(UNIX2DOS) $(DIST_DIR)/*.txt rm -f $(DIST_WIN32) - cd $(DIST_DIR)/.. && zip -rv9 $(DIST_WIN32) $(DIST_NAME) + cd $(DIST_DIR)/.. && zip -rq9 $(DIST_WIN32) $(DIST_NAME) $(RM) -r $(DIST_DIR) dist-src: @@ -377,42 +379,42 @@ dist-src: find $(DIST_DIR) -name CVS -o -name .cvsignore | xargs $(RM) -r find $(DIST_DIR) -name .svn | xargs $(RM) -r find $(DIST_DIR) -name "*.patch" | xargs $(RM) -r - dos2unix $(DIST_DIR)/Makefile - dos2unix $(DIST_DIR)/auto/Makefile - dos2unix $(DIST_DIR)/config/* - unix2dos $(DIST_DIR)/auto/core/* - unix2dos $(DIST_DIR)/auto/extensions/* - find $(DIST_DIR) -name '*.h' | xargs unix2dos - find $(DIST_DIR) -name '*.c' | xargs unix2dos - find $(DIST_DIR) -name '*.txt' | xargs unix2dos - find $(DIST_DIR) -name '*.html' | xargs unix2dos - find $(DIST_DIR) -name '*.css' | xargs unix2dos - find $(DIST_DIR) -name '*.sh' | xargs unix2dos - find $(DIST_DIR) -name '*.pl' | xargs unix2dos - find $(DIST_DIR) -name 'Makefile' | xargs unix2dos - find $(DIST_DIR) -name '*.in' | xargs unix2dos - find $(DIST_DIR) -name '*.pm' | xargs unix2dos - find $(DIST_DIR) -name '*.rc' | xargs unix2dos + $(DOS2UNIX) $(DIST_DIR)/Makefile + $(DOS2UNIX) $(DIST_DIR)/auto/Makefile + $(DOS2UNIX) $(DIST_DIR)/config/* + $(UNIX2DOS) $(DIST_DIR)/auto/core/* + $(UNIX2DOS) $(DIST_DIR)/auto/extensions/* + find $(DIST_DIR) -name '*.h' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.c' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.txt' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.html' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.css' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.sh' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.pl' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name 'Makefile' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.in' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.pm' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.rc' | xargs $(UNIX2DOS) rm -f $(DIST_SRC_ZIP) - cd $(DIST_DIR)/.. && zip -rv9 $(DIST_SRC_ZIP) $(DIST_NAME) - dos2unix $(DIST_DIR)/Makefile - dos2unix $(DIST_DIR)/auto/Makefile - dos2unix $(DIST_DIR)/config/* - dos2unix $(DIST_DIR)/auto/core/* - dos2unix $(DIST_DIR)/auto/extensions/* - find $(DIST_DIR) -name '*.h' | xargs dos2unix - find $(DIST_DIR) -name '*.c' | xargs dos2unix - find $(DIST_DIR) -name '*.txt' | xargs dos2unix - find $(DIST_DIR) -name '*.html' | xargs dos2unix - find $(DIST_DIR) -name '*.css' | xargs dos2unix - find $(DIST_DIR) -name '*.sh' | xargs dos2unix - find $(DIST_DIR) -name '*.pl' | xargs dos2unix - find $(DIST_DIR) -name 'Makefile' | xargs dos2unix - find $(DIST_DIR) -name '*.in' | xargs dos2unix - find $(DIST_DIR) -name '*.pm' | xargs dos2unix - find $(DIST_DIR) -name '*.rc' | xargs dos2unix + cd $(DIST_DIR)/.. && zip -rq9 $(DIST_SRC_ZIP) $(DIST_NAME) + $(DOS2UNIX) $(DIST_DIR)/Makefile + $(DOS2UNIX) $(DIST_DIR)/auto/Makefile + $(DOS2UNIX) $(DIST_DIR)/config/* + $(DOS2UNIX) $(DIST_DIR)/auto/core/* + $(DOS2UNIX) $(DIST_DIR)/auto/extensions/* + find $(DIST_DIR) -name '*.h' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.c' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.txt' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.html' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.css' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.sh' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.pl' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name 'Makefile' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.in' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.pm' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.rc' | xargs $(DOS2UNIX) rm -f $(DIST_SRC_TGZ) - cd $(DIST_DIR)/.. && env GZIP=-9 tar cvzf $(DIST_SRC_TGZ) $(DIST_NAME) + cd $(DIST_DIR)/.. && env GZIP=-9 tar czf $(DIST_SRC_TGZ) $(DIST_NAME) $(RM) -r $(DIST_DIR) extensions: From 4718d42dde94d73bed25b2bf76eb41650c3028f9 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 10 Oct 2015 11:22:12 +1000 Subject: [PATCH 2/5] Regal-mode support for cmake build --- build/cmake/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 1563f9f..68b0039 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -13,6 +13,7 @@ endif() set(CMAKE_DEBUG_POSTFIX d) option (BUILD_UTILS "utilities" ON) +option (GLEW_REGAL "Regal mode" FALSE) set (GLEW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..) @@ -41,6 +42,20 @@ set (GLEW_LIBRARIES ${OPENGL_LIBRARIES}) add_definitions (-DGLEW_NO_GLU) +#### Regal mode #### + +if (GLEW_REGAL) + if (WIN32) + set (REGAL_LIB_NAME regal32) + else () + set (REGAL_LIB_NAME Regal) + endif () + add_definitions (-DGLEW_REGAL) + set (GLEW_LIBRARIES ${REGAL_LIB_NAME}) +endif () + +#### GLEW #### + include_directories (${GLEW_DIR}/include) add_library (glew SHARED ${GLEW_DIR}/src/glew.c) From 11e24d4a9b2df563683396a137425ce23bcccee4 Mon Sep 17 00:00:00 2001 From: Julian Squires Date: Tue, 24 Jun 2014 11:03:28 -0400 Subject: [PATCH 3/5] Hack in crude OSMesa support Mostly this is quick, "do nothing" ifdefs when built with SYSTEM=linux-osmesa, to support the off-screen rendering mode of Mesa in headless tests. Support in glewinfo and visualinfo is enough to get them compile, but insufficient for them to run successfully. --- auto/Makefile | 3 ++- auto/src/glew_head.c | 9 +++++++-- auto/src/glew_init_tail.c | 2 ++ auto/src/glew_str_wgl.c | 3 ++- auto/src/glewinfo_head.c | 11 ++++++++--- auto/src/glewinfo_tail.c | 32 ++++++++++++++++++++++++++------ auto/src/glewinfo_wgl.c | 3 ++- config/Makefile.linux-osmesa | 36 ++++++++++++++++++++++++++++++++++++ src/visualinfo.c | 33 +++++++++++++++++++++++++++++---- 9 files changed, 114 insertions(+), 18 deletions(-) create mode 100644 config/Makefile.linux-osmesa diff --git a/auto/Makefile b/auto/Makefile index 91b68ed..af66a8e 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -204,7 +204,8 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@ $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}\n" >> $@ - echo -e "\n#if defined(_WIN32)" >> $@ + echo -e "\n#if defined(GLEW_OSMESA)" >> $@ + echo -e "\n#elif defined(_WIN32)" >> $@ echo -e "\n#if !defined(GLEW_MX)" >> $@ $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index e945bcd..fd9c0d3 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -1,6 +1,9 @@ #include -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +# define GLAPI extern +# include +#elif defined(_WIN32) # include #elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) # include @@ -137,7 +140,9 @@ void* NSGLGetProcAddress (const GLubyte *name) /* * Define glewGetProcAddress. */ -#if defined(GLEW_REGAL) +#if defined(GLEW_OSMESA) +# define glewGetProcAddress(name) OSMesaGetProcAddress((const char *)name) +#elif defined(GLEW_REGAL) # define glewGetProcAddress(name) regalGetProcAddress((const GLchar *) name) #elif defined(_WIN32) # define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) diff --git a/auto/src/glew_init_tail.c b/auto/src/glew_init_tail.c index cc3a34f..0ef2ad8 100644 --- a/auto/src/glew_init_tail.c +++ b/auto/src/glew_init_tail.c @@ -39,6 +39,8 @@ GLenum GLEWAPIENTRY glewInit (void) GLenum r; r = glewContextInit(); if ( r != 0 ) return r; +#if defined(GLEW_OSMESA) + return r; #if defined(_WIN32) return wglewInit(); #elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ diff --git a/auto/src/glew_str_wgl.c b/auto/src/glew_str_wgl.c index 5463ef7..4fd37fd 100644 --- a/auto/src/glew_str_wgl.c +++ b/auto/src/glew_str_wgl.c @@ -4,7 +4,8 @@ return ret; } -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) #if defined(GLEW_MX) GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name) diff --git a/auto/src/glewinfo_head.c b/auto/src/glewinfo_head.c index 37ff44d..96108e8 100644 --- a/auto/src/glewinfo_head.c +++ b/auto/src/glewinfo_head.c @@ -2,7 +2,10 @@ #include #include #include -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#define GLAPI extern +#include +#elif defined(_WIN32) #include #elif !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) #include @@ -21,7 +24,8 @@ static FILE* f; #ifdef GLEW_MX GLEWContext _glewctx; #define glewGetContext() (&_glewctx) -#ifdef _WIN32 +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) WGLEWContext _wglewctx; #define wglewGetContext() (&_wglewctx) #elif !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) @@ -34,7 +38,8 @@ GLXEWContext _glxewctx; struct createParams { -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) int pixelformat; #elif !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) const char* display; diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index a5e9232..56814e8 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -9,7 +9,8 @@ int main (int argc, char** argv) GLuint err; struct createParams params = { -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) -1, /* pixelformat */ #elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) "", /* display */ @@ -24,7 +25,8 @@ int main (int argc, char** argv) if (glewParseArgs(argc-1, argv+1, ¶ms)) { fprintf(stderr, "Usage: glewinfo " -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) "[-pf ] " #elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) "[-display ] " @@ -46,7 +48,8 @@ int main (int argc, char** argv) glewExperimental = GL_TRUE; #ifdef GLEW_MX err = glewContextInit(glewGetContext()); -#ifdef _WIN32 +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) err = err || wglewContextInit(wglewGetContext()); #elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) err = err || glxewContextInit(glxewGetContext()); @@ -76,7 +79,8 @@ int main (int argc, char** argv) fprintf(f, " GLEW Extension Info\n"); fprintf(f, "---------------------------\n\n"); fprintf(f, "GLEW version %s\n", glewGetString(GLEW_VERSION)); -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) fprintf(f, "Reporting capabilities of pixelformat %d\n", params.pixelformat); #elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", @@ -86,7 +90,8 @@ int main (int argc, char** argv) glGetString(GL_RENDERER), glGetString(GL_VENDOR)); fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); glewInfo(); -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) wglewInfo(); #else glxewInfo(); @@ -150,7 +155,22 @@ GLboolean glewParseArgs (int argc, char** argv, struct createParams *params) /* ------------------------------------------------------------------------ */ -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +OSMesaContext ctx; + +GLboolean glewCreateContext () +{ + ctx = OSMesaCreateContext(OSMESA_RGBA, NULL); + if (NULL == ctx) return GL_TRUE; + return GL_FALSE; +} + +void glewDestroyContext () +{ + if (NULL != ctx) OSMesaDestroyContext(ctx); +} + +#elif defined(_WIN32) HWND wnd = NULL; HDC dc = NULL; diff --git a/auto/src/glewinfo_wgl.c b/auto/src/glewinfo_wgl.c index 61f101a..b2c2242 100644 --- a/auto/src/glewinfo_wgl.c +++ b/auto/src/glewinfo_wgl.c @@ -2,7 +2,8 @@ /* ------------------------------------------------------------------------ */ -#ifdef _WIN32 +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) static void wglewInfo () { diff --git a/config/Makefile.linux-osmesa b/config/Makefile.linux-osmesa new file mode 100644 index 0000000..c8d1e95 --- /dev/null +++ b/config/Makefile.linux-osmesa @@ -0,0 +1,36 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = cc +M_ARCH ?= $(shell uname -m) +ARCH64 = false +ifeq (x86_64,${M_ARCH}) + ARCH64 = true +endif +ifeq (ppc64,${M_ARCH}) + ARCH64 = true +endif +ifeq (${ARCH64},true) + LDFLAGS.EXTRA = -L/usr/lib64 + LIBDIR = $(GLEW_DEST)/lib64 +else + LDFLAGS.EXTRA = -L/usr/lib + LIBDIR = $(GLEW_DEST)/lib +endif +LDFLAGS.GL = -lOSMesa +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +NAME = GLEW +WARN = -Wall -W +POPT = -O2 +CFLAGS.EXTRA += -fPIC -DGLEW_OSMESA +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) +LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) +LIB.DEVLNK.MX = lib$(NAME)mx.so +LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) +LIB.STATIC.MX = lib$(NAME)mx.a +LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/src/visualinfo.c b/src/visualinfo.c index fd27c7b..eb89fd9 100644 --- a/src/visualinfo.c +++ b/src/visualinfo.c @@ -34,7 +34,10 @@ #include #include #include -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#define GLAPI extern +#include +#elif defined(_WIN32) #include #elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) #include @@ -57,7 +60,9 @@ GLXEWContext _glxewctx; typedef struct GLContextStruct { -#ifdef _WIN32 +#if defined(GLEW_OSMESA) + OSMesaContext ctx; +#elif defined(_WIN32) HWND wnd; HDC dc; HGLRC rc; @@ -180,7 +185,8 @@ main (int argc, char** argv) /* ---------------------------------------------------------------------- */ /* extensions string */ -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) /* WGL extensions */ if (WGLEW_ARB_extensions_string || WGLEW_EXT_extensions_string) { @@ -1003,7 +1009,26 @@ VisualInfo (GLContext* ctx) /* ------------------------------------------------------------------------ */ -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +void InitContext (GLContext* ctx) +{ + ctx->ctx = NULL; +} + +GLboolean CreateContext (GLContext* ctx) +{ + if (NULL == ctx) return GL_TRUE; + ctx->ctx = OSMesaCreateContext(OSMESA_RGBA, NULL); + if (NULL == ctx->ctx) return GL_TRUE; + return GL_FALSE; +} + +void DestroyContext (GLContext* ctx) +{ + if (NULL == ctx) return; + if (NULL != ctx->ctx) OSMesaDestroyContext(ctx->ctx); +} +#elif defined(_WIN32) void InitContext (GLContext* ctx) { From fd49b2baff6c47e4c0893d7a729b95cb603b7af1 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 8 Oct 2015 22:03:16 +1000 Subject: [PATCH 4/5] Touch-ups for GLEW_OSMESA build support --- .travis.yml | 2 ++ auto/Makefile | 5 ++--- auto/src/glew_head.c | 6 +++--- auto/src/glew_init_tail.c | 6 +++--- auto/src/glew_str_glx.c | 2 +- auto/src/glew_str_wgl.c | 3 +-- auto/src/glewinfo_glx.c | 2 +- auto/src/glewinfo_head.c | 5 ++--- auto/src/glewinfo_tail.c | 5 +++-- auto/src/glewinfo_wgl.c | 3 +-- build/cmake/CMakeLists.txt | 13 ++++++++++++ config/Makefile.linux-osmesa | 38 +++--------------------------------- src/visualinfo.c | 9 ++++++++- 13 files changed, 43 insertions(+), 56 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2eabd21..5f3029f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,9 @@ script: - make extensions - make dist-src - make clean; SYSTEM=linux make +- make clean; SYSTEM=linux-osmesa make - pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' . ; make; popd +- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' -DGLEW_OSMESA=1 .; make; popd addons: artifacts: bucket: glew diff --git a/auto/Makefile b/auto/Makefile index af66a8e..953660e 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -204,8 +204,7 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@ $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}\n" >> $@ - echo -e "\n#if defined(GLEW_OSMESA)" >> $@ - echo -e "\n#elif defined(_WIN32)" >> $@ + echo -e "\n#if defined(_WIN32) && ! defined(GLEW_OSMESA)" >> $@ echo -e "\n#if !defined(GLEW_MX)" >> $@ $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ @@ -214,7 +213,7 @@ $(S.DEST)/glew.c: $(EXT)/.dummy cat $(SRC)/glew_init_wgl.c >> $@ $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}" >> $@; - echo -e "\n#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ + echo -e "\n#elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ echo -e "\n#if !defined(GLEW_MX)" >> $@; diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index fd9c0d3..1b4ed77 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -140,10 +140,10 @@ void* NSGLGetProcAddress (const GLubyte *name) /* * Define glewGetProcAddress. */ -#if defined(GLEW_OSMESA) +#if defined(GLEW_REGAL) +# define glewGetProcAddress(name) regalGetProcAddress((const GLchar *)name) +#elif defined(GLEW_OSMESA) # define glewGetProcAddress(name) OSMesaGetProcAddress((const char *)name) -#elif defined(GLEW_REGAL) -# define glewGetProcAddress(name) regalGetProcAddress((const GLchar *) name) #elif defined(_WIN32) # define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) #elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) diff --git a/auto/src/glew_init_tail.c b/auto/src/glew_init_tail.c index 0ef2ad8..ba68ccf 100644 --- a/auto/src/glew_init_tail.c +++ b/auto/src/glew_init_tail.c @@ -39,11 +39,11 @@ GLenum GLEWAPIENTRY glewInit (void) GLenum r; r = glewContextInit(); if ( r != 0 ) return r; -#if defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__) return r; -#if defined(_WIN32) +#elif defined(_WIN32) return wglewInit(); -#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */ return glxewInit(); #else return r; diff --git a/auto/src/glew_str_glx.c b/auto/src/glew_str_glx.c index e841475..785c23a 100644 --- a/auto/src/glew_str_glx.c +++ b/auto/src/glew_str_glx.c @@ -4,7 +4,7 @@ return ret; } -#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +#elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) #if defined(GLEW_MX) GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name) diff --git a/auto/src/glew_str_wgl.c b/auto/src/glew_str_wgl.c index 4fd37fd..01055a4 100644 --- a/auto/src/glew_str_wgl.c +++ b/auto/src/glew_str_wgl.c @@ -4,8 +4,7 @@ return ret; } -#if defined(GLEW_OSMESA) -#elif defined(_WIN32) +#if defined(_WIN32) && !defined(GLEW_OSMESA) #if defined(GLEW_MX) GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name) diff --git a/auto/src/glewinfo_glx.c b/auto/src/glewinfo_glx.c index 287d7e1..ead3051 100644 --- a/auto/src/glewinfo_glx.c +++ b/auto/src/glewinfo_glx.c @@ -1,6 +1,6 @@ } -#else /* _UNIX */ +#elif !defined(GLEW_OSMESA) /* _UNIX */ static void glxewInfo () { diff --git a/auto/src/glewinfo_head.c b/auto/src/glewinfo_head.c index 96108e8..fd4bead 100644 --- a/auto/src/glewinfo_head.c +++ b/auto/src/glewinfo_head.c @@ -24,11 +24,10 @@ static FILE* f; #ifdef GLEW_MX GLEWContext _glewctx; #define glewGetContext() (&_glewctx) -#if defined(GLEW_OSMESA) -#elif defined(_WIN32) +#if defined(_WIN32) WGLEWContext _wglewctx; #define wglewGetContext() (&_wglewctx) -#elif !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) +#elif !defined(GLEW_OSMESA) && !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) GLXEWContext _glxewctx; #define glxewGetContext() (&_glxewctx) #endif diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index 56814e8..1774de7 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -129,7 +129,8 @@ GLboolean glewParseArgs (int argc, char** argv, struct createParams *params) else return GL_TRUE; ++p; } -#if defined(_WIN32) +#if defined(GLEW_OSMESA) +#elif defined(_WIN32) else if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) { if (++p >= argc) return GL_TRUE; @@ -158,7 +159,7 @@ GLboolean glewParseArgs (int argc, char** argv, struct createParams *params) #if defined(GLEW_OSMESA) OSMesaContext ctx; -GLboolean glewCreateContext () +GLboolean glewCreateContext (struct createParams *params) { ctx = OSMesaCreateContext(OSMESA_RGBA, NULL); if (NULL == ctx) return GL_TRUE; diff --git a/auto/src/glewinfo_wgl.c b/auto/src/glewinfo_wgl.c index b2c2242..c80264e 100644 --- a/auto/src/glewinfo_wgl.c +++ b/auto/src/glewinfo_wgl.c @@ -2,8 +2,7 @@ /* ------------------------------------------------------------------------ */ -#if defined(GLEW_OSMESA) -#elif defined(_WIN32) +#if defined(_WIN32) && !defined(GLEW_OSMESA) static void wglewInfo () { diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 68b0039..c8d4dd2 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -14,6 +14,7 @@ set(CMAKE_DEBUG_POSTFIX d) option (BUILD_UTILS "utilities" ON) option (GLEW_REGAL "Regal mode" FALSE) +option (GLEW_OSMESA "OSMesa mode" FALSE) set (GLEW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..) @@ -54,6 +55,18 @@ if (GLEW_REGAL) set (GLEW_LIBRARIES ${REGAL_LIB_NAME}) endif () +#### OSMesa mode #### + +if (GLEW_OSMESA) + if (WIN32) + set (OSMESA_LIB_NAME osmesa) + else () + set (OSMESA_LIB_NAME OSMesa) + endif () + add_definitions (-DGLEW_OSMESA) + set (GLEW_LIBRARIES ${OSMESA_LIB_NAME} ${OPENGL_LIBRARIES}) +endif () + #### GLEW #### include_directories (${GLEW_DIR}/include) diff --git a/config/Makefile.linux-osmesa b/config/Makefile.linux-osmesa index c8d1e95..c957872 100644 --- a/config/Makefile.linux-osmesa +++ b/config/Makefile.linux-osmesa @@ -1,36 +1,4 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -M_ARCH ?= $(shell uname -m) -ARCH64 = false -ifeq (x86_64,${M_ARCH}) - ARCH64 = true -endif -ifeq (ppc64,${M_ARCH}) - ARCH64 = true -endif -ifeq (${ARCH64},true) - LDFLAGS.EXTRA = -L/usr/lib64 - LIBDIR = $(GLEW_DEST)/lib64 -else - LDFLAGS.EXTRA = -L/usr/lib - LIBDIR = $(GLEW_DEST)/lib -endif +include config/Makefile.linux + LDFLAGS.GL = -lOSMesa -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -DGLEW_OSMESA -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) +CFLAGS.EXTRA += -DGLEW_OSMESA diff --git a/src/visualinfo.c b/src/visualinfo.c index eb89fd9..2cd000a 100644 --- a/src/visualinfo.c +++ b/src/visualinfo.c @@ -264,7 +264,14 @@ void PrintExtensions (const char* s) /* ---------------------------------------------------------------------- */ -#if defined(_WIN32) +#if defined(GLEW_OSMESA) + +void +VisualInfo (GLContext* ctx) +{ +} + +#elif defined(_WIN32) void VisualInfoARB (GLContext* ctx) From c5c60068f7df1704820b450b37fc378062e12533 Mon Sep 17 00:00:00 2001 From: Gyusun Yeom Date: Tue, 6 Oct 2015 14:14:06 +0900 Subject: [PATCH 5/5] Add ".rc" files to each libraries and executables for Windows build --- build/cmake/CMakeLists.txt | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index c8d4dd2..1f458a7 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -71,16 +71,22 @@ endif () include_directories (${GLEW_DIR}/include) -add_library (glew SHARED ${GLEW_DIR}/src/glew.c) +set (GLEW_SRC_FILES ${GLEW_DIR}/src/glew.c) + +if (WIN32) + list (APPEND GLEW_SRC_FILES ${GLEW_DIR}/build/glew.rc) +endif () + +add_library (glew SHARED ${GLEW_SRC_FILES}) set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}") -add_library (glew_s STATIC ${GLEW_DIR}/src/glew.c) +add_library (glew_s STATIC ${GLEW_SRC_FILES}) set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib) target_link_libraries (glew ${GLEW_LIBRARIES}) target_link_libraries (glew_s ${GLEW_LIBRARIES}) -add_library(glewmx SHARED ${GLEW_DIR}/src/glew.c ) +add_library(glewmx SHARED ${GLEW_SRC_FILES}) set_target_properties (glewmx PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD;GLEW_MX" OUTPUT_NAME "${GLEW_LIB_NAME}mx" PREFIX "${DLL_PREFIX}") -add_library(glewmx_s STATIC ${GLEW_DIR}/src/glew.c ) +add_library(glewmx_s STATIC ${GLEW_SRC_FILES}) set_target_properties (glewmx_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC;GLEW_MX" OUTPUT_NAME "${GLEW_LIB_NAME}mx" PREFIX lib) target_link_libraries (glewmx ${GLEW_LIBRARIES}) target_link_libraries (glewmx_s ${GLEW_LIBRARIES}) @@ -114,10 +120,18 @@ install ( TARGETS ${targets_to_install} ) if (BUILD_UTILS) - add_executable (glewinfo ${GLEW_DIR}/src/glewinfo.c) + set (GLEWINFO_SRC_FILES ${GLEW_DIR}/src/glewinfo.c) + if (WIN32) + list (APPEND GLEWINFO_SRC_FILES ${GLEW_DIR}/build/glewinfo.rc) + endif () + add_executable (glewinfo ${GLEWINFO_SRC_FILES}) target_link_libraries (glewinfo glew) - add_executable (visualinfo ${GLEW_DIR}/src/visualinfo.c) + set (VISUALINFO_SRC_FILES ${GLEW_DIR}/src/visualinfo.c) + if (WIN32) + list (APPEND VISUALINFO_SRC_FILES ${GLEW_DIR}/build/visualinfo.rc) + endif () + add_executable (visualinfo ${VISUALINFO_SRC_FILES}) target_link_libraries (visualinfo glew) install ( TARGETS glewinfo visualinfo