From e2d3be929a47b570759dd71170309d5f594dbb7e Mon Sep 17 00:00:00 2001 From: hasufell Date: Mon, 24 Nov 2014 22:30:17 +0100 Subject: [PATCH] 0ad: initial import --- metadata/categories.conf | 1 + .../0ad/0ad-0.0.17-alpha.exheres-0 | 150 ++++++++++ .../0ad/files/0ad-0.0.17-alpha-paths.patch | 269 ++++++++++++++++++ .../0ad-0.0.17-alpha-respect-flags.patch | 99 +++++++ 4 files changed, 519 insertions(+) create mode 100644 packages/games-strategy/0ad/0ad-0.0.17-alpha.exheres-0 create mode 100644 packages/games-strategy/0ad/files/0ad-0.0.17-alpha-paths.patch create mode 100644 packages/games-strategy/0ad/files/0ad-0.0.17-alpha-respect-flags.patch diff --git a/metadata/categories.conf b/metadata/categories.conf index 06b093d7..04462d0f 100644 --- a/metadata/categories.conf +++ b/metadata/categories.conf @@ -2,6 +2,7 @@ app-virtualization dev-lang dev-libs dev-util +games-strategy sci-mathematics x11-apps x11-plugins diff --git a/packages/games-strategy/0ad/0ad-0.0.17-alpha.exheres-0 b/packages/games-strategy/0ad/0ad-0.0.17-alpha.exheres-0 new file mode 100644 index 00000000..6b444960 --- /dev/null +++ b/packages/games-strategy/0ad/0ad-0.0.17-alpha.exheres-0 @@ -0,0 +1,150 @@ +# Copyright 2014 Bernd Steinhauser +# Copyright 2014 Julian Ospald +# Distributed under the terms of the GNU General Public License v2 + +require gtk-icon-cache + +SUMMARY="A free, real-time strategy game" +HOMEPAGE="http://play0ad.com" +DOWNLOADS=" + mirror://sourceforge/zero-ad/${PNV}-unix-build.tar.xz + mirror://sourceforge/zero-ad/${PNV}-unix-data.tar.xz +" + +LICENCES=" + Arev [[ note = [ Included DejaVu Fonts ] ]] + Bitstream-Vera [[ note = [ Included DejaVu Fonts ] ]] + BSD-3 [[ note = [ build/premake/premake4 ] ]] + CCPL-Attribution-ShareAlike-3.0 [[ note = [ binaries/data/mods/{art,audio} ] ]] + GPL-2 [[ note = [ + source/tools/atlas + Rest of binaries/data + ] ]] + GUST [[ note = [ Included TeXGyrePagella Fonts ] ]] + ISC [[ note = [ source/lobby/pkcs5_pbkdf2.cpp ] ]] + MIT [[ note = [ + build/premake/*.lua + libraries/source/{fcollada,nvtt} + source/lib + source/third_party/mongoose + ] ]] + ZLIB [[ note = [ source/third_party/mikktspace ] ]] +" +SLOT="0" +PLATFORMS="~amd64 ~x86" +MYOPTIONS=" + editor [[ description = [ Include Atlas scenario editor projects ] ]] + lobby [[ description = [ Enable the multiplayer lobby ] ]] + sound +" + +# nvtt (optional, mostly for 3rd party mods) +DEPENDENCIES=" + editor? ( + build+run: + x11-libs/wxGTK:3.0 + ) + lobby? ( + build+run: + net-libs/gloox + ) + sound? ( + build+run: + media-libs/libvorbis + media-libs/openal + ) + build: + virtual/pkg-config + build+run: + dev-libs/boost + dev-libs/spidermonkey:24.0[-icu(+)] + dev-libs/libxml2:2.0 + media-libs/jpeg + media-libs/libogg + media-libs/libpng:= + media-libs/SDL:2[X] + net-libs/enet + net-libs/miniupnpc + net-misc/curl + x11-dri/mesa + x11-libs/libX11 + x11-libs/libXcursor +" + +DEFAULT_SRC_PREPARE_PATCHES=( + -p0 "${FILES}"/${PNV}-respect-flags.patch + -p1 "${FILES}"/${PNV}-paths.patch +) + +src_configure() { + edo pushd "${WORK}"/build/premake/premake4 + + # The project uses an included version of premake (version 4.3.1), + # which doesn't seem available on premakes website. + # 4.3 does not work, 4.4 (b5) should be tested. So here we build + # premakes included version for now. + emake -C build/gmake.unix + + # regenerate scripts.c so our patch applies + edo ./bin/release/premake4 embed + + edo popd + + # rebuild premake again... + emake -C "${WORK}"/build/premake/premake4/build/gmake.unix clean + emake -C "${WORK}"/build/premake/premake4/build/gmake.unix + + # run premake to create build scripts + edo pushd "${WORK}"/build/premake + edo ./premake4/bin/release/premake4 \ + --bindir=/usr/bin \ + --libdir=/usr/${LIBDIR} \ + --datadir=/usr/share/${PN} \ + --file=premake4.lua \ + --outpath=../workspaces/gcc/ \ + --minimal-flags \ + --sdl2 \ + --without-nvtt \ + $(option sound "" "--without-audio") \ + $(option editor "--atlas" "") \ + $(option lobby "" "--without-lobby") \ + --with-system-miniupnpc \ + --with-system-mozjs24 \ + --collada \ + --without-tests \ + --with-c++11 \ + --without-pch \ + gmake + edo popd +} + +src_compile() { + # build 3rd party fcollada + emake -C libraries/source/fcollada/src + + # build 0ad + emake -C build/workspaces/gcc verbose=1 +} + +src_install() { + if optionq editor ; then + dobin binaries/system/ActorEditor + dolib binaries/system/libAtlasUI.so + fi + + # TODO: Use system fonts + newbin binaries/system/pyrogenesis 0ad + dolib binaries/system/libCollada.so + + insinto /usr/share/${PN} + doins -r binaries/data/* + + insinto /usr/share/icons/hicolor/128x128/apps/ + doins build/resources/${PN}.png + + insinto /usr/share/applications + doins build/resources/0ad.desktop + + dodoc README.txt binaries/system/readme.txt +} + diff --git a/packages/games-strategy/0ad/files/0ad-0.0.17-alpha-paths.patch b/packages/games-strategy/0ad/files/0ad-0.0.17-alpha-paths.patch new file mode 100644 index 00000000..0226dd3d --- /dev/null +++ b/packages/games-strategy/0ad/files/0ad-0.0.17-alpha-paths.patch @@ -0,0 +1,269 @@ +From 97cf70148695df87154ad9fabb312037021a0d82 Mon Sep 17 00:00:00 2001 +From: hasufell +Date: Mon, 24 Nov 2014 21:20:43 +0100 +Subject: [PATCH] Query /proc for the executable path on Linux + +Author: leper +http://trac.wildfiregames.com/ticket/2086 +http://trac.wildfiregames.com/changeset/15996 + +--- + source/lib/sysdep/os/bsd/bsd.cpp | 46 +------------- + source/lib/sysdep/os/linux/linux.cpp | 62 +++++++----------- + .../sysdep/os/unix/unix_executable_pathname.cpp | 73 ++++++++++++++++++++++ + .../lib/sysdep/os/unix/unix_executable_pathname.h | 28 +++++++++ + 4 files changed, 124 insertions(+), 85 deletions(-) + create mode 100644 source/lib/sysdep/os/unix/unix_executable_pathname.cpp + create mode 100644 source/lib/sysdep/os/unix/unix_executable_pathname.h + +diff --git a/source/lib/sysdep/os/bsd/bsd.cpp b/source/lib/sysdep/os/bsd/bsd.cpp +index 34e1460..aa74b98 100644 +--- a/source/lib/sysdep/os/bsd/bsd.cpp ++++ b/source/lib/sysdep/os/bsd/bsd.cpp +@@ -23,51 +23,9 @@ + #include "precompiled.h" + + #include "lib/sysdep/sysdep.h" +- +-#define GNU_SOURCE +-#include "mocks/dlfcn.h" +-#include "mocks/unistd.h" +- +-#include ++#include "lib/sysdep/os/unix/unix_excecutable_pathname.h" + + OsPath sys_ExecutablePathname() + { +- // Find the executable's filename +- Dl_info dl_info; +- memset(&dl_info, 0, sizeof(dl_info)); +- if (!T::dladdr((void *)sys_ExecutablePathname, &dl_info) || !dl_info.dli_fname) +- return OsPath(); +- const char* path = dl_info.dli_fname; +- +- // If this looks like an absolute path, use realpath to get the normalized +- // path (with no '.' or '..') +- if (path[0] == '/') +- { +- char resolved[PATH_MAX]; +- if (!realpath(path, resolved)) +- return OsPath(); +- return resolved; +- } +- +- // If this looks like a relative path, resolve against cwd and use realpath +- if (strchr(path, '/')) +- { +- char cwd[PATH_MAX]; +- if (!T::getcwd(cwd, PATH_MAX)) +- return OsPath(); +- +- char absolute[PATH_MAX]; +- int ret = snprintf(absolute, PATH_MAX, "%s/%s", cwd, path); +- if (ret < 0 || ret >= PATH_MAX) +- return OsPath(); // path too long, or other error +- char resolved[PATH_MAX]; +- if (!realpath(absolute, resolved)) +- return OsPath(); +- return resolved; +- } +- +- // If it's not a path at all, i.e. it's just a filename, we'd +- // probably have to search through PATH to find it. +- // That's complex and should be uncommon, so don't bother. +- return OsPath(); ++ return unix_ExecutablePathname(); + } +diff --git a/source/lib/sysdep/os/linux/linux.cpp b/source/lib/sysdep/os/linux/linux.cpp +index da2a8ac..d2d47af 100644 +--- a/source/lib/sysdep/os/linux/linux.cpp ++++ b/source/lib/sysdep/os/linux/linux.cpp +@@ -23,51 +23,31 @@ + #include "precompiled.h" + + #include "lib/sysdep/sysdep.h" ++#include "lib/sysdep/os/unix/unix_executable_pathname.h" + +-#define GNU_SOURCE +-#include "mocks/dlfcn.h" +-#include "mocks/unistd.h" +- +-#include +- +-OsPath sys_ExecutablePathname() ++static bool getPathFromProc(char* buffer, size_t length) + { +- // Find the executable's filename +- Dl_info dl_info; +- memset(&dl_info, 0, sizeof(dl_info)); +- if (!T::dladdr((void *)sys_ExecutablePathname, &dl_info) || !dl_info.dli_fname) +- return OsPath(); +- const char* path = dl_info.dli_fname; ++ int pos = readlink("/proc/self/exe", buffer, length-1); ++ if (pos <= 0) ++ return false; ++ buffer[pos] = '\0'; + +- // If this looks like an absolute path, use realpath to get the normalized +- // path (with no '.' or '..') +- if (path[0] == '/') +- { +- char resolved[PATH_MAX]; +- if (!realpath(path, resolved)) +- return OsPath(); +- return resolved; +- } ++ char* endOfPath = strrchr(buffer, '/'); ++ if (endOfPath == NULL) ++ return false; + +- // If this looks like a relative path, resolve against cwd and use realpath +- if (strchr(path, '/')) +- { +- char cwd[PATH_MAX]; +- if (!T::getcwd(cwd, PATH_MAX)) +- return OsPath(); ++ ++endOfPath; ++ *endOfPath = '\0'; + +- char absolute[PATH_MAX]; +- int ret = snprintf(absolute, PATH_MAX, "%s/%s", cwd, path); +- if (ret < 0 || ret >= PATH_MAX) +- return OsPath(); // path too long, or other error +- char resolved[PATH_MAX]; +- if (!realpath(absolute, resolved)) +- return OsPath(); +- return resolved; +- } ++ return true; ++} ++ ++OsPath sys_ExecutablePathname() ++{ ++ // Check /proc for the path ++ char pathBuffer[PATH_MAX]; ++ if (getPathFromProc(pathBuffer, sizeof(pathBuffer))) ++ return pathBuffer; + +- // If it's not a path at all, i.e. it's just a filename, we'd +- // probably have to search through PATH to find it. +- // That's complex and should be uncommon, so don't bother. +- return OsPath(); ++ return unix_ExecutablePathname(); + } +diff --git a/source/lib/sysdep/os/unix/unix_executable_pathname.cpp b/source/lib/sysdep/os/unix/unix_executable_pathname.cpp +new file mode 100644 +index 0000000..ae7b989 +--- /dev/null ++++ b/source/lib/sysdep/os/unix/unix_executable_pathname.cpp +@@ -0,0 +1,73 @@ ++/* Copyright (c) 2014 Wildfire Games ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included ++ * in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#include "precompiled.h" ++ ++#include "lib/sysdep/sysdep.h" ++ ++#define GNU_SOURCE ++#include "mocks/dlfcn.h" ++#include "mocks/unistd.h" ++ ++#include ++ ++OsPath unix_ExecutablePathname() ++{ ++ // Find the executable's filename ++ Dl_info dl_info; ++ memset(&dl_info, 0, sizeof(dl_info)); ++ if (!T::dladdr((void *)sys_ExecutablePathname, &dl_info) || !dl_info.dli_fname) ++ return OsPath(); ++ const char* path = dl_info.dli_fname; ++ ++ // If this looks like an absolute path, use realpath to get the normalized ++ // path (with no '.' or '..') ++ if (path[0] == '/') ++ { ++ char resolved[PATH_MAX]; ++ if (!realpath(path, resolved)) ++ return OsPath(); ++ return resolved; ++ } ++ ++ // If this looks like a relative path, resolve against cwd and use realpath ++ if (strchr(path, '/')) ++ { ++ char cwd[PATH_MAX]; ++ if (!T::getcwd(cwd, PATH_MAX)) ++ return OsPath(); ++ ++ char absolute[PATH_MAX]; ++ int ret = snprintf(absolute, PATH_MAX, "%s/%s", cwd, path); ++ if (ret < 0 || ret >= PATH_MAX) ++ return OsPath(); // path too long, or other error ++ char resolved[PATH_MAX]; ++ if (!realpath(absolute, resolved)) ++ return OsPath(); ++ return resolved; ++ } ++ ++ // If it's not a path at all, i.e. it's just a filename, we'd ++ // probably have to search through PATH to find it. ++ // That's complex and should be uncommon, so don't bother. ++ return OsPath(); ++} +diff --git a/source/lib/sysdep/os/unix/unix_executable_pathname.h b/source/lib/sysdep/os/unix/unix_executable_pathname.h +new file mode 100644 +index 0000000..f87c340 +--- /dev/null ++++ b/source/lib/sysdep/os/unix/unix_executable_pathname.h +@@ -0,0 +1,28 @@ ++/* Copyright (c) 2014 Wildfire Games ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included ++ * in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#ifndef INCLUDED_UNIX_EXECUTABLE_PATHNAME ++#define INCLUDED_UNIX_EXECUTABLE_PATHNAME ++ ++OsPath unix_ExecutablePathname(); ++ ++#endif // INCLUDED_UNIX_EXECUTABLE_PATHNAME +-- +2.1.3 + diff --git a/packages/games-strategy/0ad/files/0ad-0.0.17-alpha-respect-flags.patch b/packages/games-strategy/0ad/files/0ad-0.0.17-alpha-respect-flags.patch new file mode 100644 index 00000000..677349ef --- /dev/null +++ b/packages/games-strategy/0ad/files/0ad-0.0.17-alpha-respect-flags.patch @@ -0,0 +1,99 @@ +From: Julian Ospald +Date: Sun Jun 24 18:32:38 UTC 2012 +Subject: build system + +respect flags +let stripping be handled by the system + +fix minimal-flags option: + leave -fvisibility=hidden active + +--- build/premake/premake4.lua ++++ build/premake/premake4.lua +@@ -177,7 +177,7 @@ + + function project_set_build_flags() + +- flags { "Symbols", "NoEditAndContinue" } ++ flags { "NoEditAndContinue" } + if cc ~= "icc" and (os.is("windows") or not _OPTIONS["minimal-flags"]) then + -- adds the -Wall compiler flag + flags { "ExtraWarnings" } -- this causes far too many warnings/remarks on ICC +@@ -366,13 +366,11 @@ + end + end + +- if not _OPTIONS["minimal-flags"] then +- buildoptions { +- -- Hide symbols in dynamic shared objects by default, for efficiency and for equivalence with +- -- Windows - they should be exported explicitly with __attribute__ ((visibility ("default"))) +- "-fvisibility=hidden" +- } +- end ++ buildoptions { ++ -- Hide symbols in dynamic shared objects by default, for efficiency and for equivalence with ++ -- Windows - they should be exported explicitly with __attribute__ ((visibility ("default"))) ++ "-fvisibility=hidden" ++ } + + if _OPTIONS["bindir"] then + defines { "INSTALLED_BINDIR=" .. _OPTIONS["bindir"] } +--- libraries/source/fcollada/src/Makefile ++++ libraries/source/fcollada/src/Makefile +@@ -9,9 +9,9 @@ + + CXX ?= g++ + CXXFLAGS += -fvisibility=hidden -W -Wall -Wno-unused-parameter -Wno-unused-function $(OS_DEFINE) $(PIC_FLAGS) $(CPPFLAGS) +-CXXFLAGS_DEBUG := -O0 -g -D_DEBUG -DRETAIL +-CXXFLAGS_RELEASE := -O2 -DNDEBUG -DRETAIL +-CXXFLAGS_TEST := -O0 -g -D_DEBUG ++CXXFLAGS_DEBUG := -D_DEBUG -DRETAIL ++CXXFLAGS_RELEASE := -DNDEBUG -DRETAIL ++CXXFLAGS_TEST := -D_DEBUG + LIBS += `pkg-config libxml-2.0 --libs` + INCLUDES += -IFCollada `pkg-config libxml-2.0 --cflags` + INCLUDES_TEST := -IFCollada/FColladaTest $(INCLUDES) +--- build/premake/premake4/src/tools/gcc.lua ++++ build/premake/premake4/src/tools/gcc.lua +@@ -136,8 +136,6 @@ + if not cfg.flags.Symbols then + if cfg.system == "macosx" then + table.insert(result, "-Wl,-x") +- else +- table.insert(result, "-s") + end + end + +--- build/premake/premake4/build/gmake.unix/Premake4.make ++++ build/premake/premake4/build/gmake.unix/Premake4.make +@@ -26,9 +26,9 @@ + DEFINES += -DNDEBUG -DLUA_USE_POSIX -DLUA_USE_DLOPEN + INCLUDES += -I../../src/host/lua-5.1.4/src + CPPFLAGS += -MMD -MP $(DEFINES) $(INCLUDES) +- CFLAGS += $(CPPFLAGS) -Wall -Os +- CXXFLAGS += $(CPPFLAGS) -Wall -Os +- LDFLAGS += -s -rdynamic ++ CFLAGS += $(CPPFLAGS) -Wall ++ CXXFLAGS += $(CPPFLAGS) -Wall ++ LDFLAGS += -rdynamic + LIBS += -lm -ldl + RESFLAGS += $(DEFINES) $(INCLUDES) + LDDEPS += +@@ -48,8 +48,8 @@ + DEFINES += -D_DEBUG -DLUA_USE_POSIX -DLUA_USE_DLOPEN + INCLUDES += -I../../src/host/lua-5.1.4/src + CPPFLAGS += -MMD -MP $(DEFINES) $(INCLUDES) +- CFLAGS += $(CPPFLAGS) -Wall -g +- CXXFLAGS += $(CPPFLAGS) -Wall -g ++ CFLAGS += $(CPPFLAGS) -Wall ++ CXXFLAGS += $(CPPFLAGS) -Wall + LDFLAGS += -rdynamic + LIBS += -lm -ldl + RESFLAGS += $(DEFINES) $(INCLUDES) +@@ -302,4 +302,4 @@ + $(SILENT) $(CC) $(PCHINCLUDES) $(CFLAGS) -MF $(OBJDIR)/lauxlib.d -MT "$@" -o "$@" -c "$<" + + -include $(OBJECTS:%.o=%.d) +--include $(GCH:%.h.gch=%.h.d) +\ No newline at end of file ++-include $(GCH:%.h.gch=%.h.d)