Openxcom: Added recipe, patches and icon for 1.0

Running OpenXcom in Haiku requires a workaround as there is system
locale problem which causes game to crash with an error:

terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
Abort
Abort

The problem is only happening when there is no config file generated
to fix it, game has to be run once like this:

LC_ALL=C exec /system/apps/OpenXcom

Then game creates config and can be run from menu. I am not including
the fix in recipe as this would hide this system locale bug.

Also the game data subfolders (GEODATA, GEOGRAPH, MAPS, ROUTES,
SOUND, TERRAIN, UFOGRAPH, UFOINTRO, UNITS) should be provided
to /settings/OpenXcom.
This commit is contained in:
Mikołaj 'lich' Halber
2016-01-06 17:55:41 +01:00
parent d416dad9f9
commit 482b251cf2
3 changed files with 256 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
resource app_flags B_SINGLE_LAUNCH | B_ARGV_ONLY;
resource app_version {
major = 1,
middle = 0,
minor = 0,
variety = B_APPV_FINAL,
internal = 0,
short_info = "OpenXcom",
long_info = "Open-source clone of original X-Com"
};
resource app_signature "application/x-vnd.openxcom";
resource vector_icon {
$"6E636966020364CCBC03254C47070437A6FFFEA7FFFEFBFFAF7FFAEBBF3EC26F"
$"C608C613C27CC62EC344C6D0C58FC84DC58FC84DC687C7C6C7ABC801C73AC7AD"
$"C81DC854C83EC8EEC84EC8A3C82CC93AC7FDC98CC816C96FC7FDC98CC7ECC9AB"
$"C78CC9F7C78CC9F7C71BCA2EC57BCA01C66BCA31C55DCADDC310CB22C48FCB3D"
$"C234CA78C306C952C231C9DEC306C952C93DBFC3C756BC83C93DBC83C952BC83"
$"C952BD52C9DEBC72CB22BD4CCA78BAF4CB3DBA08CA01BA26CADDB917CA31B7F3"
$"C9F7B866CA2EB7F3C9F7B797C9ABB785C98CB785C98CB76AC96FB744C8EEB754"
$"C93AB739C8A3B7D8C801B76AC854B84DC7ADB9F3C84DB900C7C6B9F3C84DBC38"
$"C6D0BC3FC6D0BC3FC6D0BCD1C676BD1BC613BD1BC637BD1BC613BD06C5EDBD06"
$"C5EDBCE8C5C4BC38C54BBCA4C58EBC38C54BB9F0C3CEB9F0C3CEB8F8C450B7D1"
$"C41AB843C46AB75EC3C7B744C329B72FC377B752C2E0B77EC28EB765C2ACB77E"
$"C28EB793C269B7F046BA04C216BA04C216BA20C13DBC6FC0F9BAEEC0DDBD48C1"
$"9EBC76C2C2BD4BC236BC76C2C2C2DDBFB9C4C2C302C2DDC302C2C2C302C2C2C2"
$"2DC236C309C0F9C230C19EC48AC0DDC57BC216C55AC13DC57BC216C78846C7E5"
$"C269C7FDC28EC7FDC28EC814C2ACC837C329C827C2E0C84AC377C7A7C41AC81A"
$"C3C7C730C46AC588C3CEC67BC450C588C3CEC34EC548C340C54BC2E7C589C2E7"
$"C589C297C5C0C26FC608C26FC5EAC26FC6080437AFFFFAA7BFFEFFF3EF7FFAEF"
$"BF1AC26FC608C26FC608C26FC5EAC2E7C589C297C5C0C2E7C589C340C54BC34E"
$"C548C588C3CEC588C3CEC67BC450C7A7C41AC730C46AC81AC3C7C837C329C84A"
$"C377C827C2E0C7FDC28EC814C2ACC7FDC28EC7E5C269C78846C57BC216C57BC2"
$"16C55AC13DC309C0F9C48AC0DDC230C19EC302C2C2C22DC236C302C2C2C2DDBF"
$"B9C4C2BC76C2DDBC76C2C2BC76C2C2BD4BC236BC6FC0F9BD48C19EBAEEC0DDBA"
$"04C216BA20C13DBA04C216B7F046B793C269B77EC28EB77EC28EB765C2ACB744"
$"C329B752C2E0B72FC377B7D1C41AB75EC3C7B843C46AB9F0C3CEB8F8C450B9F0"
$"C3CEBC38C54BBC38C54BBCA4C58EBD06C5EDBCE8C5C4BD06C5EDBD1BC613BD1B"
$"C613BD1BC637BC3FC6D0BCD1C676BC3FC6D0BC38B9F3C84DB9F3C84DB900C7C6"
$"B7D8C801B84DC7ADB76AC854B744C8EEB739C8A3B754C93AB785C98CB76AC96F"
$"B785C98CB797C9ABB7F3C9F7B7F3C9F7B866CA2EBA08CA01B917CA31BA26CADD"
$"BC72CB22BAF4CB3DBD4CCA78BC83C952BD52C9DEBC83C952C93DBFC3C756C306"
$"C93DC306C952C306C952C231C9DEC310CB22C234CA78C48FCB3DC57BCA01C55D"
$"CADDC66BCA31C78CC9F7C71BCA2EC78CC9F7C7ECC9ABC7FDC98CC7FDC98CC816"
$"C96FC83EC8EEC82CC93AC84EC8A3C7ABC801C81DC854C73AC7ADC58FC84DC687"
$"C7C6C58FC84DC344C6D0C27CC62EC26FC613C6080411FABFFEFF03B982B911B9"
$"7BB90AB985B8B1B985B8B1B995B803B9ECB6A0B9B8B753BA88B496BFC3B391BC"
$"7AB391C30CB391C59DB6A0C4FFB496C5CFB753C604B8B1C5F2B803C604B8B1C6"
$"0BB90AC607B911C60BB911C60BB911C622BA3BC5B2BC7DC604BB5FC3FCBFE2BF"
$"C3C19EC202C197BD84C197B9D8BC7DBB8BBFE2B985BB5FB97BB911B966BA3BB9"
$"7BB911B982B911B982B911BA00BAFBBDCDBB7FBB6EBBCBBD4DB99AB982B911BB"
$"DFB8CAB982B9110003C607B911C607B911C3ADB8CAC1BFBB7FC240B99AC41EBB"
$"CBC607B911C58CBAFBC607B9110003C607B911C607B911C58CBAFBC1BFBB7FC4"
$"1EBBCBC240B99AC607B911C3ADB8CAC607B9110003B982B911B982B911BBDFB8"
$"CABDCDBB7FBD4DB99ABB6EBBCBB982B911BA00BAFBB982B9110413FABFFFFF3F"
$"C607B911C60BB90AC604B8B1C604B8B1C5F2B803C59DB6A0C5CFB753C4FFB496"
$"BFC3B391C30CB391BC7AB391B9ECB6A0BA88B496B9B8B753B985B8B1B995B803"
$"B985B8B1B97BB90AB982B911B982B911BBDFB8CABDCDBB7FBD4DB99ABB6EBBCB"
$"B982B911BA00BAFBB982B911B97BB911B97BB911B966BA3BB9D8BC7DB985BB5F"
$"BB8BBFE2BFC3C19EBD84C197C202C197C5B2BC7DC3FCBFE2C604BB5FC60BB911"
$"C622BA3BC60BB911C607B911C607B911C58CBAFBC1BFBB7FC41EBBCBC240B99A"
$"C607B911C3ADB8CAC607B911050A000100000A0101011001178122040A000202"
$"03000A01020405000A010106100117812204"
};

View File

@@ -0,0 +1,69 @@
SUMMARY="Open-source clone of the original X-Com"
DESCRIPTION="OpenXcom is an open-source clone of the original UFO: Enemy \
Unknown (X-Com: UFO Defense in USA), licensed under the GPL and written in \
C++ / SDL. It was originally founded by SupSuper in February 2010, and has \
since grown into a small development team surrounded by a very supporting \
community."
HOMEPAGE="http://openxcom.org/"
COPYRIGHT="2010-2014 OpenXcom Developers"
LICENSE="GNU GPL v3"
REVISION="1"
SOURCE_URI="https://codeload.github.com/SupSuper/OpenXcom/tar.gz/v$portVersion"
CHECKSUM_SHA256="45acb280010a01d60506b1c5f2951ae501c012cc6161aac470bd15c1e6981246"
SOURCE_DIR="OpenXcom-$portVersion"
PATCHES="openxcom-$portVersion.patchset"
ADDITIONAL_FILES="openxcom.rdef"
ARCHITECTURES="!x86_gcc2 ?x86_64 ?x86"
SECONDARY_ARCHITECTURES="x86"
PROVIDES="
openxcom = $portVersion
app:OpenXcom
"
REQUIRES="
haiku$secondaryArchSuffix
lib:libgl$secondaryArchSuffix
lib:libglu$secondaryArchSuffix
lib:libsdl$secondaryArchSuffix
lib:libsdl_gfx$secondaryArchSuffix
lib:libsdl_image$secondaryArchSuffix
lib:libsdl_mixer$secondaryArchSuffix
lib:libyaml_cpp$secondaryArchSuffix
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
devel:libgl$secondaryArchSuffix
devel:libglu$secondaryArchSuffix
devel:libsdl$secondaryArchSuffix
devel:libsdl_gfx$secondaryArchSuffix
devel:libsdl_image$secondaryArchSuffix
devel:libsdl_mixer$secondaryArchSuffix
devel:libyaml_cpp$secondaryArchSuffix
"
BUILD_PREREQUIRES="
cmd:cmake
cmd:gcc$secondaryArchSuffix
cmd:make
cmd:pkg_config$secondaryArchSuffix
"
GLOBAL_WRITABLE_FILES="
settings/OpenXcom directory keep-old
"
BUILD()
{
cmake .
make $jobArgs
}
INSTALL()
{
mkdir -p $appsDir
mkdir -p $settingsDir
cp $sourceDir/bin/openxcom $appsDir/OpenXcom
cp -r $sourceDir/bin/data $settingsDir/OpenXcom
addResourcesToBinaries $portDir/additional-files/openxcom.rdef $appsDir/OpenXcom
addAppDeskbarSymlink $appsDir/OpenXcom OpenXcom
}

View File

@@ -0,0 +1,118 @@
From c965aec6b307f3b6bc614a1ee3733ef23fd8e17a Mon Sep 17 00:00:00 2001
From: Mikolaj 'lich' Halber <lich@opmbx.org>
Date: Sun, 3 Jan 2016 21:31:07 +0000
Subject: Added Haiku support
diff --git a/cmake/modules/FindSDL2.cmake b/cmake/modules/FindSDL2.cmake
index b407bef..7764974 100644
--- a/cmake/modules/FindSDL2.cmake
+++ b/cmake/modules/FindSDL2.cmake
@@ -78,7 +78,7 @@
FIND_PATH(SDL_INCLUDE_DIR SDL.h
HINTS
$ENV{SDLDIR}
- PATH_SUFFIXES include/SDL include
+ PATH_SUFFIXES include/SDL include SDL
PATHS
~/Library/Frameworks
/Library/Frameworks
@@ -219,7 +219,7 @@ macro ( FindSDL_component _component )
HINTS
$ENV{SDL${UPPERCOMPONENT}DIR}
$ENV{SDLDIR}
- PATH_SUFFIXES include/SDL include
+ PATH_SUFFIXES include/SDL include SDL
PATHS
~/Library/Frameworks
/Library/Frameworks
diff --git a/cmake/modules/FindSDL_gfx.cmake b/cmake/modules/FindSDL_gfx.cmake
index 2e09b9b..c4c0633 100644
--- a/cmake/modules/FindSDL_gfx.cmake
+++ b/cmake/modules/FindSDL_gfx.cmake
@@ -28,7 +28,7 @@ FIND_PATH(SDLGFX_INCLUDE_DIR SDL_gfx.h
HINTS
$ENV{SDLGFXDIR}
$ENV{SDLDIR}
- PATH_SUFFIXES include
+ PATH_SUFFIXES include SDL
PATHS
~/Library/Frameworks
/Library/Frameworks
@@ -72,7 +72,7 @@ IF(NOT SDLGFX_INCLUDE_DIR)
HINTS
$ENV{SDLGFXDIR}
$ENV{SDLDIR}
- PATH_SUFFIXES include
+ PATH_SUFFIXES include SDL
PATHS
~/Library/Frameworks
/Library/Frameworks
diff --git a/cmake/modules/FindYaml_cpp.cmake b/cmake/modules/FindYaml_cpp.cmake
index 64ccc2f..27a0f4b 100644
--- a/cmake/modules/FindYaml_cpp.cmake
+++ b/cmake/modules/FindYaml_cpp.cmake
@@ -29,7 +29,7 @@ FIND_PATH(YAMLCPP_INCLUDE_DIR yaml.h
${PC_YAMLCPP_INCLUDEDIR}
${PC_YAMLCPP_INCLUDE_DIRS}
$ENV{YAMLCPPDIR}
- PATH_SUFFIXES include/yaml-cpp include
+ PATH_SUFFIXES include/yaml-cpp include yaml-cpp
PATHS
~/Library/Frameworks
/Library/Frameworks
diff --git a/src/Engine/CrossPlatform.cpp b/src/Engine/CrossPlatform.cpp
index a5704f4..53823e6 100644
--- a/src/Engine/CrossPlatform.cpp
+++ b/src/Engine/CrossPlatform.cpp
@@ -59,6 +59,10 @@
#include <SDL.h>
#include <SDL_syswm.h>
#include <SDL_image.h>
+#ifdef __HAIKU__
+#include <FindDirectory.h>
+#include <StorageDefs.h>
+#endif
namespace OpenXcom
{
@@ -144,7 +148,10 @@ std::vector<std::string> findDataFolders()
#else
char const *home = getHome();
#ifdef __HAIKU__
- list.push_back("/boot/apps/OpenXcom/data/");
+ char data_path[B_PATH_NAME_LENGTH];
+ find_directory(B_SYSTEM_SETTINGS_DIRECTORY, 0, true, data_path, sizeof(data_path)-strlen("/OpenXcom/"));
+ strcat(data_path,"/OpenXcom/");
+ list.push_back(data_path);
#endif
char path[MAXPATHLEN];
@@ -237,7 +244,10 @@ std::vector<std::string> findUserFolders()
}
#else
#ifdef __HAIKU__
- list.push_back("/boot/apps/OpenXcom/");
+ char user_path[B_PATH_NAME_LENGTH];
+ find_directory(B_USER_SETTINGS_DIRECTORY, 0, true, user_path, sizeof(user_path)-strlen("/OpenXcom/"));
+ strcat(user_path,"/OpenXcom/");
+ list.push_back(user_path);
#endif
char const *home = getHome();
char path[MAXPATHLEN];
@@ -281,7 +291,10 @@ std::string findConfigFolder()
#if defined(_WIN32) || defined(__APPLE__)
return "";
#elif defined (__HAIKU__)
- return "/boot/home/config/settings/openxcom/";
+ char settings_path[B_PATH_NAME_LENGTH];
+ find_directory(B_USER_SETTINGS_DIRECTORY, 0, true, settings_path, sizeof(settings_path)-strlen("/OpenXcom/"));
+ strcat(settings_path,"/OpenXcom/");
+ return settings_path;
#else
char const *home = getHome();
char path[MAXPATHLEN];
--
2.2.2