diff options
Diffstat (limited to 'games-action/openclonk/files')
4 files changed, 1177 insertions, 0 deletions
diff --git a/games-action/openclonk/files/openclonk-6.1-dedicated.patch b/games-action/openclonk/files/openclonk-6.1-dedicated.patch new file mode 100644 index 000000000000..588e14ae422a --- /dev/null +++ b/games-action/openclonk/files/openclonk-6.1-dedicated.patch @@ -0,0 +1,1073 @@ +From 652c7e43e23652fb8bf05b4b57e6db36b0eb765c Mon Sep 17 00:00:00 2001 +From: Nicolas Hake <isilkor@openclonk.org> +Date: Wed, 17 Jun 2015 21:30:56 +0200 +Subject: [PATCH] Fix headless build + +Several rendering changes have resulted in a non-rendering build that +failed to build from source. Dummy out all of these functions to make it +work again. + +Cherry-picked. +Author: Nicolas Hake <isilkor@openclonk.org> +Date: Wed Jun 17 21:30:56 2015 +0200 +Conflicts: + src/lib/StdMesh.h +--- + src/graphics/C4DrawT.cpp | 2 +- + src/graphics/C4DrawT.h | 6 +++++- + src/graphics/C4GraphicsResource.cpp | 2 ++ + src/graphics/C4Shader.cpp | 21 +++++++++++++++++-- + src/graphics/C4Shader.h | 37 +++++++++++++++++++++++++++++---- + src/landscape/fow/C4FoW.cpp | 14 +++++++++++++ + src/landscape/fow/C4FoW.h | 2 ++ + src/landscape/fow/C4FoWAmbient.cpp | 13 ++++++++++-- + src/landscape/fow/C4FoWAmbient.h | 2 ++ + src/landscape/fow/C4FoWBeam.cpp | 6 +++++- + src/landscape/fow/C4FoWBeam.h | 5 ++++- + src/landscape/fow/C4FoWDrawStrategy.cpp | 4 ++++ + src/landscape/fow/C4FoWDrawStrategy.h | 4 ++++ + src/landscape/fow/C4FoWLight.cpp | 5 +++++ + src/landscape/fow/C4FoWLight.h | 6 +++++- + src/landscape/fow/C4FoWLightSection.cpp | 5 +++++ + src/landscape/fow/C4FoWLightSection.h | 6 +++++- + src/landscape/fow/C4FoWRegion.cpp | 12 +++++++++-- + src/landscape/fow/C4FoWRegion.h | 5 ++++- + src/lib/StdMesh.cpp | 35 +++++++++++++++++++++++++++++-- + src/lib/StdMesh.h | 6 +++++- + src/lib/StdMeshMaterial.cpp | 19 ++++++++++++++++- + src/object/C4Def.cpp | 2 ++ + 23 files changed, 198 insertions(+), 21 deletions(-) + +diff --git a/src/graphics/C4DrawT.cpp b/src/graphics/C4DrawT.cpp +index 694dd98..69b93e4 100644 +--- a/src/graphics/C4DrawT.cpp ++++ b/src/graphics/C4DrawT.cpp +@@ -22,7 +22,7 @@ CStdNoGfx::CStdNoGfx() + Default(); + } + +-bool CStdNoGfx::CreatePrimarySurfaces(bool Fullscreen, unsigned int iXRes, unsigned int iYRes, int iColorDepth, unsigned int iMonitor) ++bool CStdNoGfx::CreatePrimarySurfaces(unsigned int iXRes, unsigned int iYRes, int iColorDepth, unsigned int iMonitor) + { + Log("Graphics disabled."); + // Save back color depth +diff --git a/src/graphics/C4DrawT.h b/src/graphics/C4DrawT.h +index b7b7e97..519ba95 100644 +--- a/src/graphics/C4DrawT.h ++++ b/src/graphics/C4DrawT.h +@@ -41,8 +41,12 @@ public: + virtual bool InvalidateDeviceObjects() { return true; } + virtual bool DeleteDeviceObjects() { return true; } + virtual bool DeviceReady() { return true; } +- virtual bool CreatePrimarySurfaces(bool, unsigned int, unsigned int, int, unsigned int); ++ virtual bool CreatePrimarySurfaces(unsigned int, unsigned int, int, unsigned int); + virtual bool SetOutputAdapter(unsigned int) { return true; } ++ ++ virtual void PerformMultiPix(C4Surface *, const C4BltVertex *, unsigned int) {} ++ virtual void PerformMultiLines(C4Surface *, const C4BltVertex *, unsigned int, float) {} ++ virtual void PerformMultiTris(C4Surface *, const C4BltVertex *, unsigned int, const C4BltTransform *, C4TexRef *, C4TexRef *, C4TexRef *, DWORD) {} + }; + + #endif +diff --git a/src/graphics/C4GraphicsResource.cpp b/src/graphics/C4GraphicsResource.cpp +index 774fd39..f55b22f 100644 +--- a/src/graphics/C4GraphicsResource.cpp ++++ b/src/graphics/C4GraphicsResource.cpp +@@ -186,6 +186,7 @@ bool C4GraphicsResource::Init() + return false; + } + ++#ifndef USE_CONSOLE + // Pre-load all shader files + Files.PreCacheEntries(C4CFN_ShaderFiles); + if (!pGL->InitShaders(&Files)) +@@ -193,6 +194,7 @@ bool C4GraphicsResource::Init() + LogFatal(LoadResStr("IDS_ERR_GFX_INITSHADERS")); + return false; + } ++#endif + + Game.SetInitProgress(11.0f); + ProgressStart = 12.0f; ProgressIncrement = 0.35f; // TODO: This should be changed so that it stops at 25%, no matter how many graphics we load. +diff --git a/src/graphics/C4Shader.cpp b/src/graphics/C4Shader.cpp +index 32de995..bec53b5 100644 +--- a/src/graphics/C4Shader.cpp ++++ b/src/graphics/C4Shader.cpp +@@ -39,8 +39,10 @@ C4ShaderPosName C4SH_PosNames[] = { + + C4Shader::C4Shader() + : iTexCoords(0) ++#ifndef USE_CONSOLE + , hVert(0), hFrag(0), hProg(0) + , pUniforms(NULL) ++#endif + { + + } +@@ -260,6 +262,7 @@ void C4Shader::AddVertexDefaults() + AddVertexSlice(C4Shader_Vertex_PositionPos, "gl_Position = ftransform();\n"); + } + ++#ifndef USE_CONSOLE + GLenum C4Shader::AddTexCoord(const char *szName) + { + // Make sure we have enough space +@@ -275,6 +278,7 @@ GLenum C4Shader::AddTexCoord(const char *szName) + + return GL_TEXTURE0 + iTexCoords++; + } ++#endif + + void C4Shader::ClearSlices() + { +@@ -285,6 +289,7 @@ void C4Shader::ClearSlices() + + void C4Shader::Clear() + { ++#ifndef USE_CONSOLE + if (!hProg) return; + // Need to be detached, then deleted + glDetachObjectARB(hProg, hFrag); +@@ -296,11 +301,12 @@ void C4Shader::Clear() + // Clear uniform data + delete[] pUniforms; pUniforms = NULL; + iUniformCount = 0; ++#endif + } + + bool C4Shader::Init(const char *szWhat, const char **szUniforms) + { +- ++#ifndef USE_CONSOLE + // No support? + if(!GLEW_ARB_fragment_program) + { +@@ -310,6 +316,7 @@ bool C4Shader::Init(const char *szWhat, const char **szUniforms) + + // Clear old shader first + if (hProg) Clear(); ++#endif + + // Dump + if (C4Shader::IsLogging()) +@@ -320,6 +327,7 @@ bool C4Shader::Init(const char *szWhat, const char **szUniforms) + ShaderLog(Build(FragmentSlices, true).getData()); + } + ++#ifndef USE_CONSOLE + // Attempt to create shaders + StdStrBuf VertexShader = Build(VertexSlices), + FragmentShader = Build(FragmentSlices); +@@ -363,6 +371,7 @@ bool C4Shader::Init(const char *szWhat, const char **szUniforms) + // because the respective uniforms got optimized out! + for (int i = 0; i < iUniformCount; i++) + pUniforms[i] = glGetUniformLocationARB(hProg, szUniforms[i]); ++#endif + + return true; + } +@@ -420,9 +429,13 @@ StdStrBuf C4Shader::Build(const ShaderSliceList &Slices, bool fDebug) + // At the start of the shader set the #version and number of + // available uniforms + StdStrBuf Buf; ++#ifndef USE_CONSOLE + GLint iMaxFrags = 0, iMaxVerts = 0; + glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &iMaxFrags); + glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &iMaxVerts); ++#else ++ int iMaxFrags = INT_MAX, iMaxVerts = INT_MAX; ++#endif + Buf.Format("#version %d\n" + "#define MAX_FRAGMENT_UNIFORM_COMPONENTS %d\n" + "#define MAX_VERTEX_UNIFORM_COMPONENTS %d\n", +@@ -468,6 +481,7 @@ StdStrBuf C4Shader::Build(const ShaderSliceList &Slices, bool fDebug) + return Buf; + } + ++#ifndef USE_CONSOLE + GLhandleARB C4Shader::Create(GLenum iShaderType, const char *szWhat, const char *szShader) + { + // Create shader +@@ -515,9 +529,11 @@ int C4Shader::GetObjectStatus(GLhandleARB hObj, GLenum type) + glGetObjectParameterivARB(hObj, type, &iStatus); + return iStatus; + } ++#endif + + bool C4Shader::IsLogging() { return !!Application.isEditor; } + ++#ifndef USE_CONSOLE + GLint C4ShaderCall::AllocTexUnit(int iUniform, GLenum iType) + { + // Want to bind uniform automatically? If not, the caller will take +@@ -550,7 +566,6 @@ void C4ShaderCall::Start() + // Activate shader + glUseProgramObjectARB(pShader->hProg); + fStarted = true; +- + } + + void C4ShaderCall::Finish() +@@ -569,3 +584,5 @@ void C4ShaderCall::Finish() + iUnits = 0; + fStarted = false; + } ++ ++#endif +diff --git a/src/graphics/C4Shader.h b/src/graphics/C4Shader.h +index 53e38cc..c988d90 100644 +--- a/src/graphics/C4Shader.h ++++ b/src/graphics/C4Shader.h +@@ -68,11 +68,13 @@ private: + // Used texture coordinates + int iTexCoords; + ++#ifndef USE_CONSOLE + // shaders + GLhandleARB hVert, hFrag, hProg; + // shader variables + int iUniformCount; + GLint *pUniforms; ++#endif + + public: + enum VertexAttribIndex +@@ -93,15 +95,35 @@ public: + VAI_BoneIndicesMax = VAI_BoneIndices + VAI_BoneWeightsMax - VAI_BoneWeights + }; + +- bool Initialised() const { return hVert != 0; } ++ bool Initialised() const ++ { ++#ifndef USE_CONSOLE ++ return hVert != 0; ++#else ++ return true; ++#endif ++ } + + // Uniform getters +- GLint GetUniform(int iUniform) const { ++#ifndef USE_CONSOLE ++ GLint GetUniform(int iUniform) const ++ { + return iUniform >= 0 && iUniform < iUniformCount ? pUniforms[iUniform] : -1; + } +- bool HaveUniform(int iUniform) const { ++ bool HaveUniform(int iUniform) const ++ { + return GetUniform(iUniform) != GLint(-1); + } ++#else ++ int GetUniform(int iUniform) const ++ { ++ return -1; ++ } ++ bool HaveUniform(int iUniform) const ++ { ++ return false; ++ } ++#endif + + // Shader is composed from various slices + void AddVertexSlice(int iPos, const char *szText); +@@ -113,10 +135,12 @@ public: + // Add default vertex code (2D - no transformation) + void AddVertexDefaults(); + ++#ifndef USE_CONSOLE + // Allocate a texture coordinate, returning its ID to be used with glMultiTexCoord. + // The texture coordinate will be visible to both shaders under the given name. + // Note that in contrast to uniforms, these will not disappear if not used! + GLenum AddTexCoord(const char *szName); ++#endif + + // Assemble and link the shader. Should be called again after new slices are added. + bool Init(const char *szWhat, const char **szUniforms); +@@ -131,18 +155,22 @@ private: + int ParsePosition(const char *szWhat, const char **ppPos); + + StdStrBuf Build(const ShaderSliceList &Slices, bool fDebug = false); ++ ++#ifndef USE_CONSOLE + GLhandleARB Create(GLenum iShaderType, const char *szWhat, const char *szShader); + void DumpInfoLog(const char *szWhat, GLhandleARB hShader); + int GetObjectStatus(GLhandleARB hObj, GLenum type); ++#endif + + public: + static bool IsLogging(); + }; + ++#ifndef USE_CONSOLE + class C4ShaderCall + { + public: +- C4ShaderCall(const C4Shader *pShader) ++ C4ShaderCall(const C4Shader *pShader) + : fStarted(false), pShader(pShader), iUnits(0) + { } + ~C4ShaderCall() { Finish(); } +@@ -210,5 +238,6 @@ public: + void Start(); + void Finish(); + }; ++#endif + + #endif // INC_C4Shader +diff --git a/src/landscape/fow/C4FoW.cpp b/src/landscape/fow/C4FoW.cpp +index 1dcddb6..be9019b 100644 +--- a/src/landscape/fow/C4FoW.cpp ++++ b/src/landscape/fow/C4FoW.cpp +@@ -26,6 +26,7 @@ C4FoW::C4FoW() + + C4Shader *C4FoW::GetFramebufShader() + { ++#ifndef USE_CONSOLE + // Not created yet? + if (!FramebufShader.Initialised()) + { +@@ -46,10 +47,14 @@ C4Shader *C4FoW::GetFramebufShader() + + } + return &FramebufShader; ++#else ++ return NULL; ++#endif + } + + void C4FoW::Add(C4Object *pObj) + { ++#ifndef USE_CONSOLE + // No view range? Probably want to remove instead + if(!pObj->lightRange && !pObj->lightFadeoutRange) + { +@@ -77,10 +82,12 @@ void C4FoW::Add(C4Object *pObj) + pLight->pNext = pLights; + pLights = pLight; + } ++#endif + } + + void C4FoW::Remove(C4Object *pObj) + { ++#ifndef USE_CONSOLE + // Look for matching light + C4FoWLight *pPrev = NULL, *pLight; + for (pLight = pLights; pLight; pPrev = pLight, pLight = pLight->getNext()) +@@ -92,24 +99,31 @@ void C4FoW::Remove(C4Object *pObj) + // Remove + (pPrev ? pPrev->pNext : pLights) = pLight->getNext(); + delete pLight; ++#endif + } + + void C4FoW::Invalidate(C4Rect r) + { ++#ifndef USE_CONSOLE + for (C4FoWLight *pLight = pLights; pLight; pLight = pLight->getNext()) + pLight->Invalidate(r); ++#endif + } + + void C4FoW::Update(C4Rect r, C4Player *pPlr) + { ++#ifndef USE_CONSOLE + for (C4FoWLight *pLight = pLights; pLight; pLight = pLight->getNext()) + if (pLight->IsVisibleForPlayer(pPlr)) + pLight->Update(r); ++#endif + } + + void C4FoW::Render(C4FoWRegion *pRegion, const C4TargetFacet *pOnScreen, C4Player *pPlr) + { ++#ifndef USE_CONSOLE + for (C4FoWLight *pLight = pLights; pLight; pLight = pLight->getNext()) + if (pLight->IsVisibleForPlayer(pPlr)) + pLight->Render(pRegion, pOnScreen); ++#endif + } +diff --git a/src/landscape/fow/C4FoW.h b/src/landscape/fow/C4FoW.h +index 4006f6e..59f110b 100644 +--- a/src/landscape/fow/C4FoW.h ++++ b/src/landscape/fow/C4FoW.h +@@ -99,8 +99,10 @@ public: + void Render(class C4FoWRegion *pRegion, const C4TargetFacet *pOnScreen, C4Player *pPlr); + + private: ++#ifndef USE_CONSOLE + // Shader for updating the frame buffer + C4Shader FramebufShader; ++#endif + }; + + #endif // C4FOW_H +diff --git a/src/landscape/fow/C4FoWAmbient.cpp b/src/landscape/fow/C4FoWAmbient.cpp +index 6e0ec09..e257570 100644 +--- a/src/landscape/fow/C4FoWAmbient.cpp ++++ b/src/landscape/fow/C4FoWAmbient.cpp +@@ -84,7 +84,10 @@ struct LightMapZoom { + } // anonymous namespace + + C4FoWAmbient::C4FoWAmbient() : +- Tex(0), Resolution(0.), Radius(0.), FullCoverage(0.), ++#ifndef USE_CONSOLE ++ Tex(0), ++#endif ++ Resolution(0.), Radius(0.), FullCoverage(0.), + SizeX(0), LandscapeX(0), SizeY(0), LandscapeY(0), + Brightness(1.) + { +@@ -97,8 +100,10 @@ C4FoWAmbient::~C4FoWAmbient() + + void C4FoWAmbient::Clear() + { ++#ifndef USE_CONSOLE + if(Tex != 0) glDeleteTextures(1, &Tex); + Tex = 0; ++#endif + Resolution = Radius = FullCoverage = 0.; + SizeX = SizeY = 0; + LandscapeX = LandscapeY = 0; +@@ -112,7 +117,7 @@ void C4FoWAmbient::CreateFromLandscape(const C4Landscape& landscape, double reso + assert(full_coverage > 0 && full_coverage <= 1.); + + // Clear old map +- if(Tex != 0) Clear(); ++ Clear(); + + Resolution = resolution; + Radius = radius; +@@ -124,6 +129,7 @@ void C4FoWAmbient::CreateFromLandscape(const C4Landscape& landscape, double reso + SizeX = Min<unsigned int>(static_cast<unsigned int>(ceil(LandscapeX / resolution)), pDraw->MaxTexSize); + SizeY = Min<unsigned int>(static_cast<unsigned int>(ceil(LandscapeY / resolution)), pDraw->MaxTexSize); + ++#ifndef USE_CONSOLE + glGenTextures(1, &Tex); + glBindTexture(GL_TEXTURE_2D, Tex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); +@@ -136,10 +142,12 @@ void C4FoWAmbient::CreateFromLandscape(const C4Landscape& landscape, double reso + UpdateFromLandscape(landscape, C4Rect(0, 0, landscape.Width, landscape.Height)); + uint32_t dt = C4TimeMilliseconds::Now() - begin; + LogF("Created %ux%u ambient map in %g secs", SizeX, SizeY, dt / 1000.); ++#endif + } + + void C4FoWAmbient::UpdateFromLandscape(const C4Landscape& landscape, const C4Rect& update) + { ++#ifndef USE_CONSOLE + // Nothing to do? + if(update.Wdt == 0 || update.Hgt == 0) return; + +@@ -191,6 +199,7 @@ void C4FoWAmbient::UpdateFromLandscape(const C4Landscape& landscape, const C4Rec + glBindTexture(GL_TEXTURE_2D, Tex); + glTexSubImage2D(GL_TEXTURE_2D, 0, left, top, (right - left), (bottom - top), GL_RED, GL_FLOAT, ambient); + delete[] ambient; ++#endif + } + + void C4FoWAmbient::GetFragTransform(const FLOAT_RECT& vpRect, const C4Rect& clipRect, const C4Rect& outRect, float ambientTransform[6]) const +diff --git a/src/landscape/fow/C4FoWAmbient.h b/src/landscape/fow/C4FoWAmbient.h +index ded91b9..d8ce833 100644 +--- a/src/landscape/fow/C4FoWAmbient.h ++++ b/src/landscape/fow/C4FoWAmbient.h +@@ -28,7 +28,9 @@ public: + C4FoWAmbient(); + ~C4FoWAmbient(); + ++#ifndef USE_CONSOLE + GLuint Tex; ++#endif + + private: + // Parameters +diff --git a/src/landscape/fow/C4FoWBeam.cpp b/src/landscape/fow/C4FoWBeam.cpp +index a5736a0..e515d0c 100644 +--- a/src/landscape/fow/C4FoWBeam.cpp ++++ b/src/landscape/fow/C4FoWBeam.cpp +@@ -14,6 +14,8 @@ + */ + + #include "C4Include.h" ++ ++#ifndef USE_CONSOLE + #include "C4FoWBeam.h" + + // Maximum error allowed while merging beams. +@@ -48,7 +50,7 @@ bool C4FoWBeam::MergeRight(int32_t x, int32_t y) + + // Calculate error. Note that simply summing up errors is not correct, + // strictly speaking (as new and old error surfaces might overlap). Still, +- // this is quite elaborate already, no need to make it even more ++ // this is quite elaborate already, no need to make it even more + int32_t iErr = getDoubleTriangleSurface( + getLeftEndX(), iLeftEndY, + getRightEndX(), iRightEndY, +@@ -193,3 +195,5 @@ void C4FoWBeam::CompileFunc(StdCompiler *pComp) + pComp->Value(mkNamingAdapt(iError, "iError")); + pComp->Value(mkNamingAdapt(fDirty, "fDirty")); + } ++ ++#endif +diff --git a/src/landscape/fow/C4FoWBeam.h b/src/landscape/fow/C4FoWBeam.h +index 7297fa9..531e7a4 100644 +--- a/src/landscape/fow/C4FoWBeam.h ++++ b/src/landscape/fow/C4FoWBeam.h +@@ -16,6 +16,7 @@ + #ifndef C4FOWBEAM_H + #define C4FOWBEAM_H + ++#ifndef USE_CONSOLE + #include "StdBuf.h" + + /** This class represents one beam. A beam is a triangle spanned by two rays: one going from the origin to the +@@ -133,4 +134,6 @@ public: + + }; + +-#endif // C4FOWBEAM +\ No newline at end of file ++#endif ++ ++#endif // C4FOWBEAM +diff --git a/src/landscape/fow/C4FoWDrawStrategy.cpp b/src/landscape/fow/C4FoWDrawStrategy.cpp +index fc1fbd4..cc55c09 100644 +--- a/src/landscape/fow/C4FoWDrawStrategy.cpp ++++ b/src/landscape/fow/C4FoWDrawStrategy.cpp +@@ -14,6 +14,9 @@ + */ + + #include "C4Include.h" ++ ++#ifndef USE_CONSOLE ++ + #include "C4FoWDrawStrategy.h" + #include "C4FoWLight.h" + #include "C4FoWRegion.h" +@@ -151,3 +154,4 @@ void C4FoWDrawWireframeStrategy::DrawLightVertex(float x, float y) + DrawVertex(x, y); + } + ++#endif +diff --git a/src/landscape/fow/C4FoWDrawStrategy.h b/src/landscape/fow/C4FoWDrawStrategy.h +index feb0512..4743c11 100644 +--- a/src/landscape/fow/C4FoWDrawStrategy.h ++++ b/src/landscape/fow/C4FoWDrawStrategy.h +@@ -16,6 +16,8 @@ + #ifndef C4FOWDRAWSTRATEGY_H + #define C4FOWDRAWSTRATEGY_H + ++#ifndef USE_CONSOLE ++ + #include "C4DrawGL.h" + #include <list> + +@@ -122,3 +124,5 @@ private: + }; + + #endif ++ ++#endif +diff --git a/src/landscape/fow/C4FoWLight.cpp b/src/landscape/fow/C4FoWLight.cpp +index 8becfea..4e35db9 100644 +--- a/src/landscape/fow/C4FoWLight.cpp ++++ b/src/landscape/fow/C4FoWLight.cpp +@@ -14,6 +14,9 @@ + */ + + #include "C4Include.h" ++ ++#ifndef USE_CONSOLE ++ + #include "C4FoWLight.h" + #include "C4FoWLightSection.h" + #include "C4FoWBeamTriangle.h" +@@ -344,3 +347,5 @@ bool C4FoWLight::IsVisibleForPlayer(C4Player *player) const + if (!pObj || !player) return true; + return !::Hostile(pObj->Owner,player->Number); + } ++ ++#endif +diff --git a/src/landscape/fow/C4FoWLight.h b/src/landscape/fow/C4FoWLight.h +index 13ad58e..52f0457 100644 +--- a/src/landscape/fow/C4FoWLight.h ++++ b/src/landscape/fow/C4FoWLight.h +@@ -15,6 +15,8 @@ + #ifndef C4FOWLIGHT_H + #define C4FOWLIGHT_H + ++#ifndef USE_CONSOLE ++ + #include "C4Object.h" + #include "C4Surface.h" + #include "C4FacetEx.h" +@@ -95,4 +97,6 @@ private: + + }; + +-#endif +\ No newline at end of file ++#endif ++ ++#endif +diff --git a/src/landscape/fow/C4FoWLightSection.cpp b/src/landscape/fow/C4FoWLightSection.cpp +index 0ef4d77..30009a6 100644 +--- a/src/landscape/fow/C4FoWLightSection.cpp ++++ b/src/landscape/fow/C4FoWLightSection.cpp +@@ -14,6 +14,9 @@ + */ + + #include "C4Include.h" ++ ++#ifndef USE_CONSOLE ++ + #include "C4FoWLightSection.h" + #include "C4FoWBeamTriangle.h" + #include "C4FoWBeam.h" +@@ -856,3 +859,5 @@ void C4FoWLightSection::CompileFunc(StdCompiler *pComp) + } + } + } ++ ++#endif +diff --git a/src/landscape/fow/C4FoWLightSection.h b/src/landscape/fow/C4FoWLightSection.h +index cde356a..edecd34 100644 +--- a/src/landscape/fow/C4FoWLightSection.h ++++ b/src/landscape/fow/C4FoWLightSection.h +@@ -16,6 +16,8 @@ + #ifndef C4FOWLIGHTSECTION_H + #define C4FOWLIGHTSECTION_H + ++#ifndef USE_CONSOLE ++ + #include "C4Rect.h" + #include <list> + +@@ -134,4 +136,6 @@ public: + + }; + +-#endif +\ No newline at end of file ++#endif ++ ++#endif +diff --git a/src/landscape/fow/C4FoWRegion.cpp b/src/landscape/fow/C4FoWRegion.cpp +index 5e107a7..1df661e 100644 +--- a/src/landscape/fow/C4FoWRegion.cpp ++++ b/src/landscape/fow/C4FoWRegion.cpp +@@ -16,6 +16,7 @@ + #include "C4Include.h" + #include "C4FoWRegion.h" + ++#ifndef USE_CONSOLE + bool glCheck() { + if (int err = glGetError()) { + LogF("GL error %d: %s", err, gluErrorString(err)); +@@ -23,6 +24,7 @@ bool glCheck() { + } + return true; + } ++#endif + + C4FoWRegion::~C4FoWRegion() + { +@@ -31,7 +33,7 @@ C4FoWRegion::~C4FoWRegion() + + bool C4FoWRegion::BindFramebuf() + { +- ++#ifndef USE_CONSOLE + // Flip texture + C4Surface *pSfc = pSurface; + pSurface = pBackSurface; +@@ -79,6 +81,7 @@ bool C4FoWRegion::BindFramebuf() + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + return false; + } ++#endif + + // Worked! + return true; +@@ -86,11 +89,13 @@ bool C4FoWRegion::BindFramebuf() + + void C4FoWRegion::Clear() + { ++#ifndef USE_CONSOLE + if (hFrameBufDraw) { + glDeleteFramebuffersEXT(1, &hFrameBufDraw); + glDeleteFramebuffersEXT(1, &hFrameBufRead); + } + hFrameBufDraw = hFrameBufRead = 0; ++#endif + delete pSurface; pSurface = NULL; + delete pBackSurface; pBackSurface = NULL; + } +@@ -104,6 +109,7 @@ void C4FoWRegion::Update(C4Rect r, const FLOAT_RECT& vp) + + void C4FoWRegion::Render(const C4TargetFacet *pOnScreen) + { ++#ifndef USE_CONSOLE + // Update FoW at interesting location + pFoW->Update(Region, pPlayer); + +@@ -199,7 +205,7 @@ void C4FoWRegion::Render(const C4TargetFacet *pOnScreen) + glCheck(); + + OldRegion = Region; +- ++#endif + } + + void C4FoWRegion::GetFragTransform(const C4Rect& clipRect, const C4Rect& outRect, float lightTransform[6]) const +@@ -229,7 +235,9 @@ void C4FoWRegion::GetFragTransform(const C4Rect& clipRect, const C4Rect& outRect + C4FoWRegion::C4FoWRegion(C4FoW *pFoW, C4Player *pPlayer) + : pFoW(pFoW) + , pPlayer(pPlayer) ++#ifndef USE_CONSOLE + , hFrameBufDraw(0), hFrameBufRead(0) ++#endif + , Region(0,0,0,0), OldRegion(0,0,0,0) + , pSurface(NULL), pBackSurface(NULL) + { +diff --git a/src/landscape/fow/C4FoWRegion.h b/src/landscape/fow/C4FoWRegion.h +index 20e33a6..a264e4b 100644 +--- a/src/landscape/fow/C4FoWRegion.h ++++ b/src/landscape/fow/C4FoWRegion.h +@@ -31,10 +31,13 @@ public: + private: + C4FoW *pFoW; + C4Player *pPlayer; ++ C4Surface *pSurface, *pBackSurface; + C4Rect Region, OldRegion; + FLOAT_RECT ViewportRegion; // Region covered by visible viewport +- C4Surface *pSurface, *pBackSurface; ++ ++#ifndef USE_CONSOLE + GLuint hFrameBufDraw, hFrameBufRead; ++#endif + + public: + const C4FoW* getFoW() const { return pFoW; } +diff --git a/src/lib/StdMesh.cpp b/src/lib/StdMesh.cpp +index 6c1905d..9930097 100644 +--- a/src/lib/StdMesh.cpp ++++ b/src/lib/StdMesh.cpp +@@ -534,7 +534,11 @@ StdSubMesh::StdSubMesh() : + { + } + +-StdMesh::StdMesh() : Skeleton(new StdMeshSkeleton), vbo(0) ++StdMesh::StdMesh() : ++ Skeleton(new StdMeshSkeleton) ++#ifndef USE_CONSOLE ++ , vbo(0) ++#endif + { + BoundingBox.x1 = BoundingBox.y1 = BoundingBox.z1 = 0.0f; + BoundingBox.x2 = BoundingBox.y2 = BoundingBox.z2 = 0.0f; +@@ -543,17 +547,22 @@ StdMesh::StdMesh() : Skeleton(new StdMeshSkeleton), vbo(0) + + StdMesh::~StdMesh() + { ++#ifndef USE_CONSOLE + if (vbo) + glDeleteBuffers(1, &vbo); ++#endif + } + + void StdMesh::PostInit() + { ++#ifndef USE_CONSOLE + // Order submeshes so that opaque submeshes come before non-opaque ones + std::sort(SubMeshes.begin(), SubMeshes.end(), StdMeshSubMeshVisibilityCmpPred()); + UpdateVBO(); ++#endif + } + ++#ifndef USE_CONSOLE + void StdMesh::UpdateVBO() + { + // We're only uploading vertices once, so there shouldn't be a VBO so far +@@ -603,18 +612,21 @@ void StdMesh::UpdateVBO() + // Unbind the buffer so following rendering calls do not use it + glBindBuffer(GL_ARRAY_BUFFER, 0); + } +- ++#endif + + StdSubMeshInstance::StdSubMeshInstance(StdMeshInstance& instance, const StdSubMesh& submesh, float completion): + base(&submesh), Material(NULL), CurrentFaceOrdering(FO_Fixed) + { ++#ifndef USE_CONSOLE + LoadFacesForCompletion(instance, submesh, completion); ++#endif + + SetMaterial(submesh.GetMaterial()); + } + + void StdSubMeshInstance::LoadFacesForCompletion(StdMeshInstance& instance, const StdSubMesh& submesh, float completion) + { ++#ifndef USE_CONSOLE + // First: Copy all faces + Faces.resize(submesh.GetNumFaces()); + for (unsigned int i = 0; i < submesh.GetNumFaces(); ++i) +@@ -637,12 +649,14 @@ void StdSubMeshInstance::LoadFacesForCompletion(StdMeshInstance& instance, const + assert(submesh.GetNumFaces() >= 1); + Faces.resize(Clamp<unsigned int>(static_cast<unsigned int>(completion * submesh.GetNumFaces() + 0.5), 1, submesh.GetNumFaces())); + } ++#endif + } + + void StdSubMeshInstance::SetMaterial(const StdMeshMaterial& material) + { + Material = &material; + ++#ifndef USE_CONSOLE + // Setup initial texture animation data + assert(Material->BestTechniqueIndex >= 0); + const StdMeshMaterialTechnique& technique = Material->Techniques[Material->BestTechniqueIndex]; +@@ -664,10 +678,12 @@ void StdSubMeshInstance::SetMaterial(const StdMeshMaterial& material) + } + + // TODO: Reset face ordering ++#endif + } + + void StdSubMeshInstance::SetFaceOrdering(const StdSubMesh& submesh, FaceOrdering ordering) + { ++#ifndef USE_CONSOLE + if (CurrentFaceOrdering != ordering) + { + CurrentFaceOrdering = ordering; +@@ -677,10 +693,12 @@ void StdSubMeshInstance::SetFaceOrdering(const StdSubMesh& submesh, FaceOrdering + Faces[i] = submesh.GetFace(i); + } + } ++#endif + } + + void StdSubMeshInstance::SetFaceOrderingForClrModulation(const StdSubMesh& submesh, uint32_t clrmod) + { ++#ifndef USE_CONSOLE + bool opaque = Material->IsOpaque(); + + if(!opaque) +@@ -689,6 +707,7 @@ void StdSubMeshInstance::SetFaceOrderingForClrModulation(const StdSubMesh& subme + SetFaceOrdering(submesh, FO_NearestToFarthest); + else + SetFaceOrdering(submesh, FO_Fixed); ++#endif + } + + void StdSubMeshInstance::CompileFunc(StdCompiler* pComp) +@@ -1050,6 +1069,7 @@ StdMeshInstance::~StdMeshInstance() + + void StdMeshInstance::SetFaceOrdering(FaceOrdering ordering) + { ++#ifndef USE_CONSOLE + for (unsigned int i = 0; i < Mesh->GetNumSubMeshes(); ++i) + SubMeshInstances[i]->SetFaceOrdering(Mesh->GetSubMesh(i), ordering); + +@@ -1058,10 +1078,12 @@ void StdMeshInstance::SetFaceOrdering(FaceOrdering ordering) + for (AttachedMeshIter iter = AttachChildren.begin(); iter != AttachChildren.end(); ++iter) + if ((*iter)->OwnChild) + (*iter)->Child->SetFaceOrdering(ordering); ++#endif + } + + void StdMeshInstance::SetFaceOrderingForClrModulation(uint32_t clrmod) + { ++#ifndef USE_CONSOLE + for (unsigned int i = 0; i < Mesh->GetNumSubMeshes(); ++i) + SubMeshInstances[i]->SetFaceOrderingForClrModulation(Mesh->GetSubMesh(i), clrmod); + +@@ -1070,16 +1092,19 @@ void StdMeshInstance::SetFaceOrderingForClrModulation(uint32_t clrmod) + for (AttachedMeshIter iter = AttachChildren.begin(); iter != AttachChildren.end(); ++iter) + if ((*iter)->OwnChild) + (*iter)->Child->SetFaceOrderingForClrModulation(clrmod); ++#endif + } + + void StdMeshInstance::SetCompletion(float completion) + { + Completion = completion; + ++#ifndef USE_CONSOLE + // TODO: Load all submesh faces and then determine the ones to use from the + // full pool. + for(unsigned int i = 0; i < Mesh->GetNumSubMeshes(); ++i) + SubMeshInstances[i]->LoadFacesForCompletion(*this, Mesh->GetSubMesh(i), completion); ++#endif + } + + StdMeshInstance::AnimationNode* StdMeshInstance::PlayAnimation(const StdStrBuf& animation_name, int slot, AnimationNode* sibling, ValueProvider* position, ValueProvider* weight) +@@ -1210,6 +1235,7 @@ void StdMeshInstance::ExecuteAnimation(float dt) + if(!ExecuteAnimationNode(AnimationStack[i-1])) + StopAnimation(AnimationStack[i-1]); + ++#ifndef USE_CONSOLE + // Update animated textures + for (unsigned int i = 0; i < SubMeshInstances.size(); ++i) + { +@@ -1240,6 +1266,7 @@ void StdMeshInstance::ExecuteAnimation(float dt) + } + } + } ++#endif + + // Update animation for attached meshes + for (AttachedMeshList::iterator iter = AttachChildren.begin(); iter != AttachChildren.end(); ++iter) +@@ -1321,7 +1348,9 @@ void StdMeshInstance::SetMaterial(size_t i, const StdMeshMaterial& material) + { + assert(i < SubMeshInstances.size()); + SubMeshInstances[i]->SetMaterial(material); ++#ifndef USE_CONSOLE + std::stable_sort(SubMeshInstancesOrdered.begin(), SubMeshInstancesOrdered.end(), StdMeshSubMeshInstanceVisibilityCmpPred()); ++#endif + } + + const StdMeshMatrix& StdMeshInstance::GetBoneTransform(size_t i) const +@@ -1433,6 +1462,7 @@ bool StdMeshInstance::UpdateBoneTransforms() + + void StdMeshInstance::ReorderFaces(StdMeshMatrix* global_trans) + { ++#ifndef USE_CONSOLE + for (unsigned int i = 0; i < SubMeshInstances.size(); ++i) + { + StdSubMeshInstance& inst = *SubMeshInstances[i]; +@@ -1450,6 +1480,7 @@ void StdMeshInstance::ReorderFaces(StdMeshMatrix* global_trans) + } + + // TODO: Also reorder submeshes, attached meshes and include AttachTransformation for attached meshes... ++#endif + } + + void StdMeshInstance::CompileFunc(StdCompiler* pComp, AttachedMesh::DenumeratorFactoryFunc Factory) +diff --git a/src/lib/StdMesh.h b/src/lib/StdMesh.h +index 7007a74..a5ae5f3 100644 +--- a/src/lib/StdMesh.h ++++ b/src/lib/StdMesh.h +@@ -197,11 +197,15 @@ public: + + void PostInit(); + +- const GLuint GetVBO() const { return vbo; } ++#ifndef USE_CONSOLE ++ GLuint GetVBO() const { return vbo; } ++#endif + + private: ++#ifndef USE_CONSOLE + GLuint vbo; + void UpdateVBO(); ++#endif + + StdMesh(const StdMesh& other); // non-copyable + StdMesh& operator=(const StdMesh& other); // non-assignable +diff --git a/src/lib/StdMeshMaterial.cpp b/src/lib/StdMeshMaterial.cpp +index cb601a5..f1f65ce 100644 +--- a/src/lib/StdMeshMaterial.cpp ++++ b/src/lib/StdMeshMaterial.cpp +@@ -849,7 +849,9 @@ bool StdMeshMaterialProgram::CompileShader(StdMeshMaterialLoader& loader, C4Shad + shader.AddVertexSlices(VertexShader->GetFilename(), VertexShader->GetCode(), VertexShader->GetFilename()); + shader.AddFragmentSlices(FragmentShader->GetFilename(), FragmentShader->GetCode(), FragmentShader->GetFilename()); + // Construct the list of uniforms +- std::vector<const char*> uniformNames(C4SSU_Count + ParameterNames.size() + 1); ++ std::vector<const char*> uniformNames; ++#ifndef USE_CONSOLE ++ uniformNames.resize(C4SSU_Count + ParameterNames.size() + 1); + uniformNames[C4SSU_ClrMod] = "clrMod"; + uniformNames[C4SSU_BaseTex] = "baseTex"; // unused + uniformNames[C4SSU_OverlayTex] = "overlayTex"; // unused +@@ -864,25 +866,31 @@ bool StdMeshMaterialProgram::CompileShader(StdMeshMaterialLoader& loader, C4Shad + for (unsigned int i = 0; i < ParameterNames.size(); ++i) + uniformNames[C4SSU_Count + i] = ParameterNames[i].getData(); + uniformNames[C4SSU_Count + ParameterNames.size()] = NULL; ++#endif + // Compile the shader + StdCopyStrBuf name(Name); ++#ifndef USE_CONSOLE + if (ssc != 0) name.Append(":"); + if (ssc & C4SSC_LIGHT) name.Append("Light"); + if (ssc & C4SSC_MOD2) name.Append("Mod2"); ++#endif + return shader.Init(name.getData(), &uniformNames[0]); + } + + bool StdMeshMaterialProgram::Compile(StdMeshMaterialLoader& loader) + { ++#ifndef USE_CONSOLE + if (!CompileShader(loader, Shader, 0)) return false; + if (!CompileShader(loader, ShaderMod2, C4SSC_MOD2)) return false; + if (!CompileShader(loader, ShaderLight, C4SSC_LIGHT)) return false; + if (!CompileShader(loader, ShaderLightMod2, C4SSC_LIGHT | C4SSC_MOD2)) return false; ++#endif + return true; + } + + const C4Shader* StdMeshMaterialProgram::GetShader(int ssc) const + { ++#ifndef USE_CONSOLE + const C4Shader* shaders[4] = { + &Shader, + &ShaderMod2, +@@ -896,13 +904,20 @@ const C4Shader* StdMeshMaterialProgram::GetShader(int ssc) const + + assert(index < 4); + return shaders[index]; ++#else ++ return NULL; ++#endif + } + + int StdMeshMaterialProgram::GetParameterIndex(const char* name) const + { ++#ifndef USE_CONSOLE + std::vector<StdCopyStrBuf>::const_iterator iter = std::find(ParameterNames.begin(), ParameterNames.end(), name); + if(iter == ParameterNames.end()) return -1; + return C4SSU_Count + std::distance(ParameterNames.begin(), iter); ++#else ++ return -1; ++#endif + } + + double StdMeshMaterialTextureUnit::Transformation::GetWaveXForm(double t) const +@@ -1515,12 +1530,14 @@ void StdMeshMatManager::Parse(const char* mat_script, const char* filename, StdM + + Materials[material_name] = mat; + ++#ifndef USE_CONSOLE + // To Gfxspecific setup of the material; choose working techniques + if (!pDraw->PrepareMaterial(*this, loader, Materials[material_name])) + { + Materials.erase(material_name); + ctx.Error(StdCopyStrBuf("No working technique for material '") + material_name + "'"); + } ++#endif + } + else if (token_name == "vertex_program") + { +diff --git a/src/object/C4Def.cpp b/src/object/C4Def.cpp +index 5d8442e..81a0e36 100644 +--- a/src/object/C4Def.cpp ++++ b/src/object/C4Def.cpp +@@ -59,6 +59,7 @@ public: + + virtual void AddShaderSlices(C4Shader& shader, int ssc) + { ++#ifndef USE_CONSOLE + // Add mesh-independent slices + shader.AddFragmentSlice(-1, "#define OPENCLONK"); + shader.AddVertexSlice(-1, "#define OPENCLONK"); +@@ -80,6 +81,7 @@ public: + + if (ssc & C4SSC_BASE) shader.LoadSlices(&::GraphicsResource.Files, "SpriteTextureShader.glsl"); + if (ssc & C4SSC_OVERLAY) shader.LoadSlices(&::GraphicsResource.Files, "SpriteOverlayShader.glsl"); ++#endif + } + + private: +-- +2.1.4 + diff --git a/games-action/openclonk/files/openclonk-6.1-jpeg9.patch b/games-action/openclonk/files/openclonk-6.1-jpeg9.patch new file mode 100644 index 000000000000..161258604e6b --- /dev/null +++ b/games-action/openclonk/files/openclonk-6.1-jpeg9.patch @@ -0,0 +1,20 @@ +--- src/graphics/C4SurfaceLoaders.cpp.old 2015-01-02 18:01:35.768676874 +0100 ++++ src/graphics/C4SurfaceLoaders.cpp 2015-01-02 18:02:17.705896683 +0100 +@@ -303,7 +303,7 @@ + // The doc says to give fake end-of-inputs if there is no more data + cinfo->src->next_input_byte = &end_of_input; + cinfo->src->bytes_in_buffer = 1; +- return true; ++ return (boolean)true; + } + static void skip_input_data (j_decompress_ptr cinfo, long num_bytes) + { +@@ -354,7 +354,7 @@ + blub.term_source = jpeg_noop; + + // a missing image is an error +- jpeg_read_header(&cinfo, true); ++ jpeg_read_header(&cinfo, (boolean)true); + + // Let libjpeg convert for us + cinfo.out_color_space = JCS_RGB; diff --git a/games-action/openclonk/files/openclonk-6.1-paths.patch b/games-action/openclonk/files/openclonk-6.1-paths.patch new file mode 100644 index 000000000000..f95a9a5982cb --- /dev/null +++ b/games-action/openclonk/files/openclonk-6.1-paths.patch @@ -0,0 +1,69 @@ +Updated for openclonk-6.0, based on this patch: + From: Julian Ospald <hasufell@gentoo.org> + Date: Thu Feb 6 19:58:45 UTC 2014 + Subject: make paths modifiable + +diff -Naur openclonk-release-6.0-src.orig/CMakeLists.txt openclonk-release-6.0-src/CMakeLists.txt +--- openclonk-release-6.0-src.orig/CMakeLists.txt 2015-03-12 21:21:51.000000000 +0000 ++++ openclonk-release-6.0-src/CMakeLists.txt 2015-04-25 08:07:16.000000000 +0000 +@@ -42,6 +42,16 @@ + set(${_var} "${_string}" PARENT_SCOPE) + endfunction() + ++ ++############################################################################ ++# User selectable paths ++############################################################################ ++set(INSTALL_BINDIR "bin/" CACHE PATH "Binary install destination") ++set(INSTALL_GAMES_BINDIR "games/bin" CACHE PATH "Games binary install destination") ++set(INSTALL_DATAROOTDIR "share/" CACHE PATH "Data root install destination") ++set(INSTALL_DATADIR "${INSTALL_DATAROOTDIR}" CACHE PATH "Data install destination") ++ ++ + ############################################################################ + # User selectable options + ############################################################################ +@@ -1212,10 +1222,16 @@ + # Assemble compiler flags + ############################################################################ + if(UNIX) ++ if(NOT IS_ABSOLUTE "${INSTALL_DATADIR}") ++ set(ABSOLUTE_INSTALL_DATADIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_DATADIR}") ++ else() ++ set(ABSOLUTE_INSTALL_DATADIR "${INSTALL_DATADIR}") ++ endif() ++ + # Don't put this into CMAKE_CXX_FLAGS because otherwise it is cached, + # and when the path is changed both the old and new definition appears + # in the list of flags. +- add_definitions("-DOC_SYSTEM_DATA_DIR=\"${CMAKE_INSTALL_PREFIX}/share/games/openclonk\"") ++ add_definitions("-DOC_SYSTEM_DATA_DIR=\"${ABSOLUTE_INSTALL_DATADIR}/openclonk\"") + endif() + if(OC_CXX_FLAGS) + list(REMOVE_DUPLICATES OC_CXX_FLAGS) +@@ -1537,7 +1553,7 @@ + DEPENDS "${native_c4group}" + VERBATIM + ) +- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${group} DESTINATION share/games/openclonk) ++ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${group} DESTINATION "${INSTALL_DATADIR}/openclonk") + endif() + endforeach() + +@@ -1546,13 +1562,13 @@ + add_dependencies(data groups) + + # Install new files +- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/openclonk.desktop DESTINATION share/applications) ++ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/openclonk.desktop DESTINATION "${INSTALL_DATAROOTDIR}/applications") + # Update the MIME cache -- this makes the clonk:// protocol handler actually work + install(CODE "execute_process(COMMAND update-desktop-database)") + + # Install binaries +- install(TARGETS openclonk DESTINATION games) +- install(TARGETS c4group DESTINATION bin) ++ install(TARGETS openclonk DESTINATION "${INSTALL_GAMES_BINDIR}") ++ install(TARGETS c4group DESTINATION "${INSTALL_BINDIR}") + else() + install(TARGETS openclonk + BUNDLE DESTINATION . diff --git a/games-action/openclonk/files/openclonk-6.1-postinst.patch b/games-action/openclonk/files/openclonk-6.1-postinst.patch new file mode 100644 index 000000000000..d957e5cd929b --- /dev/null +++ b/games-action/openclonk/files/openclonk-6.1-postinst.patch @@ -0,0 +1,15 @@ +update-desktop-database is called from the pkg_postinst stage instead. + +diff -Naur openclonk-release-6.0-src.orig/CMakeLists.txt openclonk-release-6.0-src/CMakeLists.txt +--- openclonk-release-6.0-src.orig/CMakeLists.txt 2015-04-25 08:22:16.000000000 +0000 ++++ openclonk-release-6.0-src/CMakeLists.txt 2015-04-25 09:50:16.000000000 +0000 +@@ -1564,7 +1564,8 @@ + # Install new files + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/openclonk.desktop DESTINATION "${INSTALL_DATAROOTDIR}/applications") + # Update the MIME cache -- this makes the clonk:// protocol handler actually work +- install(CODE "execute_process(COMMAND update-desktop-database)") ++ # --> ebuild, pkg_postinst stage ++ #install(CODE "execute_process(COMMAND update-desktop-database)") + + # Install binaries + install(TARGETS openclonk DESTINATION "${INSTALL_GAMES_BINDIR}") |