Changeset - r13095:c8ad2bbbdb3b
[Not reviewed]
master
0 8 0
rubidium - 15 years ago 2009-09-21 18:36:33
rubidium@openttd.org
(svn r17606) -Add: initial support for Haiku; a dedicated server with zlib and libpng compiles and links (for me). Something's fishy with the network so it doesn't actually work (yet)
8 files changed with 52 insertions and 34 deletions:
0 comments (0 inline, 0 general)
config.lib
Show inline comments
 
@@ -459,10 +459,10 @@ check_params() {
 
		log 1 " PREPROCESSOR is only available for OSX"
 
		exit 1
 
	fi
 
	# OS only allows DETECT, UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP
 
	if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP)$'`" ]; then
 
	# OS only allows DETECT, UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP
 
	if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP)$'`" ]; then
 
		log 1 "configure: error: invalid option --os=$os"
 
		log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP]"
 
		log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP]"
 
		exit 1
 
	fi
 
	# cpu_type can be either 32 or 64
 
@@ -1203,11 +1203,11 @@ make_cflags_and_ldflags() {
 
		fi
 
	fi
 

	
 
	if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
 
	if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
 
		LIBS="$LIBS -lpthread"
 
	fi
 

	
 
	if [ "$os" != "CYGWIN" ] && [ "$os" != "MINGW" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ]; then
 
	if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ]; then
 
		LIBS="$LIBS -lc"
 
	fi
 
	if [ "$os" = "WINCE" ]; then
 
@@ -1247,12 +1247,12 @@ make_cflags_and_ldflags() {
 
		fi
 
	fi
 

	
 
	if [ "$os" = "BEOS" ]; then
 
	if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then
 
		LIBS="$LIBS -lmidi -lbe"
 
	fi
 

	
 
	# Most targets act like UNIX, just with some additions
 
	if [ "$os" = "BEOS" ] || [ "$os" = "OSX" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then
 
	if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then
 
		CFLAGS="$CFLAGS -DUNIX"
 
	fi
 
	# And others like Windows
 
@@ -1427,6 +1427,10 @@ make_cflags_and_ldflags() {
 
			LDFLAGS="$LDFLAGS -lbind -lsocket"
 
		fi
 

	
 
		if [ "$os" = "HAIKU" ]; then
 
			LDFLAGS="$LDFLAGS -lnetwork"
 
		fi
 

	
 
		if [ "$os" = "SUNOS" ]; then
 
			LDFLAGS="$LDFLAGS -lnsl -lsocket"
 
		fi
 
@@ -1846,6 +1850,7 @@ detect_os() {
 
					/hp-ux/        { print "HPUX";    exit}
 
					/morphos/      { print "MORPHOS"; exit}
 
					/beos/         { print "BEOS";    exit}
 
					/haiku/        { print "HAIKU";   exit}
 
					/sunos/        { print "SUNOS";   exit}
 
					/solaris/      { print "SUNOS";   exit}
 
					/cygwin/       { print "CYGWIN";  exit}
 
@@ -1866,6 +1871,7 @@ detect_os() {
 
					/hp-ux/        { print "HPUX";    exit}
 
					/morphos/      { print "MORPHOS"; exit}
 
					/beos/         { print "BEOS";    exit}
 
					/haiku/        { print "HAIKU";   exit}
 
					/sunos/        { print "SUNOS";   exit}
 
					/cygwin/       { print "CYGWIN";  exit}
 
					/mingw/        { print "MINGW";   exit}
 
@@ -1876,7 +1882,7 @@ detect_os() {
 
		if [ -z "$os" ]; then
 
			log 1 "detecting OS... none detected"
 
			log 1 "I couldn't detect your OS. Please use --os=OS to force one"
 
			log 1 "Allowed values are: UNIX, OSX, FREEBSD, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP"
 
			log 1 "Allowed values are: UNIX, OSX, FREEBSD, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP"
 
			exit 1
 
		fi
 

	
 
@@ -2902,7 +2908,7 @@ showhelp() {
 
	echo "  --os=OS                        the OS we are compiling for [DETECT]"
 
	echo "                                 DETECT/UNIX/OSX/FREEBSD/OPENBSD/NETBSD/"
 
	echo "                                 MORPHOS/HPUX/BEOS/SUNOS/CYGWIN/MINGW/OS2/"
 
	echo "                                 DOS/WINCE/PSP"
 
	echo "                                 DOS/WINCE/PSP/HAIKU"
 
	echo "  --endian=ENDIAN                set the endian of the HOST (AUTO/LE/BE)"
 
	echo "  --revision=rXXXX               overwrite the revision detection."
 
	echo "                                 Use with care!"
configure
Show inline comments
 
@@ -115,9 +115,10 @@ AWKCOMMAND='
 
		if ($0 == "DEDICATED"   && "'$enable_dedicated'" != "1")   { next; }
 
		if ($0 == "COCOA"       && "'$with_cocoa'" == "0")         { next; }
 
		if ($0 == "DOS"         && "'$os'" != "DOS")               { next; }
 
		if ($0 == "BEOS"        && "'$os'" != "BEOS")              { next; }
 
		if ($0 == "BEOS"        && "'$os'" != "BEOS" &&
 
		                                       "'$os'" != "HAIKU") { next; }
 
		if ($0 == "WIN32"       && "'$os'" != "MINGW" &&
 
		                "'$os'" != "CYGWIN" && "'$os'" != "MSVC" ) { next; }
 
		                 "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; }
 
		if ($0 == "MORPHOS"     && "'$os'" != "MORPHOS")           { next; }
 
		if ($0 == "WINCE"       && "'$os'" != "WINCE")             { next; }
 
		if ($0 == "MSVC"        && "'$os'" != "MSVC")              { next; }
src/dedicated.cpp
Show inline comments
 
@@ -19,9 +19,11 @@
 

	
 
#include <unistd.h>
 

	
 
#if defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)
 
#if (defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)) || defined(__HAIKU__)
 
/* Solaris has, in certain situation, pid_t defined as long, while in other
 
 *  cases it has it defined as int... this handles all cases nicely. */
 
 *  cases it has it defined as int... this handles all cases nicely.
 
 * Haiku has also defined pid_t as a long.
 
 */
 
# define PRINTF_PID_T "%ld"
 
#else
 
# define PRINTF_PID_T "%d"
src/intro_gui.cpp
Show inline comments
 
@@ -279,6 +279,8 @@ void AskExitGame()
 
		SetDParam(0, STR_OSNAME_OSX);
 
#elif defined(__BEOS__)
 
		SetDParam(0, STR_OSNAME_BEOS);
 
#elif defined(__HAIKU__)
 
		SetDParam(0, STR_OSNAME_HAIKU);
 
#elif defined(__MORPHOS__)
 
		SetDParam(0, STR_OSNAME_MORPHOS);
 
#elif defined(__AMIGA__)
src/lang/english.txt
Show inline comments
 
@@ -1344,6 +1344,7 @@ STR_OSNAME_DOS                          
 
STR_OSNAME_UNIX                                                 :Unix
 
STR_OSNAME_OSX                                                  :OS X
 
STR_OSNAME_BEOS                                                 :BeOS
 
STR_OSNAME_HAIKU                                                :Haiku
 
STR_OSNAME_MORPHOS                                              :MorphOS
 
STR_OSNAME_AMIGAOS                                              :AmigaOS
 
STR_OSNAME_OS2                                                  :OS/2
src/network/core/host.cpp
Show inline comments
 
@@ -30,9 +30,9 @@ static void NetworkFindBroadcastIPsInter
 
{
 
}
 

	
 
#elif defined(BEOS_NET_SERVER) /* doesn't have neither getifaddrs or net/if.h */
 
#elif defined(BEOS_NET_SERVER) || defined(__HAIKU__) /* doesn't have neither getifaddrs or net/if.h */
 
/* Based on Andrew Bachmann's netstat+.c. Big thanks to him! */
 
int _netstat(int fd, char **output, int verbose);
 
extern "C" int _netstat(int fd, char **output, int verbose);
 

	
 
int seek_past_header(char **pos, const char *header)
 
{
 
@@ -63,9 +63,9 @@ static void NetworkFindBroadcastIPsInter
 
	char **output = &output_pointer;
 
	if (seek_past_header(output, "IP Interfaces:") == B_OK) {
 
		for (;;) {
 
			uint32 n, fields, read;
 
			uint32 n;
 
			int fields, read;
 
			uint8 i1, i2, i3, i4, j1, j2, j3, j4;
 
			struct in_addr inaddr;
 
			uint32 ip;
 
			uint32 netmask;
 

	
 
@@ -85,7 +85,6 @@ static void NetworkFindBroadcastIPsInter
 
				((sockaddr_in*)&address)->sin_addr.s_addr = htonl(ip | ~netmask);
 
				NetworkAddress addr(address, sizeof(sockaddr));
 
				if (!broadcast->Contains(addr)) *broadcast->Append() = addr;
 
				index++;
 
			}
 
			if (read < 0) {
 
				break;
src/network/core/os_abstraction.h
Show inline comments
 
@@ -155,7 +155,7 @@ static inline void OTTDfreeaddrinfo(stru
 
#		include <arpa/inet.h>
 
#		include <net/if.h>
 
/* According to glibc/NEWS, <ifaddrs.h> appeared in glibc-2.3. */
 
#		if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__INNOTEK_LIBC__) \
 
#		if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \
 
		   && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX)
 
/* If for any reason ifaddrs.h does not exist on your system, comment out
 
 *   the following two lines and an alternative way will be used to fetch
 
@@ -185,6 +185,10 @@ static inline void OTTDfreeaddrinfo(stru
 
	typedef int socklen_t;
 
#endif
 

	
 
#ifdef __HAIKU__
 
	#define IPV6_V6ONLY 27
 
#endif
 

	
 
#if defined(PSP)
 
#	include <sys/socket.h>
 
#	include <netinet/in.h>
src/stdafx.h
Show inline comments
 
@@ -16,15 +16,15 @@
 
	#include "os/macosx/osx_stdafx.h"
 
#endif /* __APPLE__ */
 

	
 
#if defined(__NDS__)
 
#if defined(__BEOS__) || defined(__HAIKU__)
 
	#include <SupportDefs.h>
 
	#include <unistd.h>
 
	#define _GNU_SOURCE
 
	#define TROUBLED_INTS
 
#elif defined(__NDS__)
 
	#include <nds/jtypes.h>
 
	/* NDS' types for uint32/int32 are based on longs, which causes
 
	 * trouble all over the place in OpenTTD. */
 
	#define uint32 uint32_ugly_hack
 
	#define int32 int32_ugly_hack
 
	typedef unsigned int uint32_ugly_hack;
 
	typedef signed int int32_ugly_hack;
 
#endif /* __NDS__ */
 
	#define TROUBLED_INTS
 
#endif
 

	
 
/* It seems that we need to include stdint.h before anything else
 
 * We need INT64_MAX, which for most systems comes from stdint.h. However, MSVC
 
@@ -82,10 +82,6 @@
 
	#include <pspthreadman.h>
 
#endif
 

	
 
#if defined(__BEOS__)
 
	#include <SupportDefs.h>
 
#endif
 

	
 
#if defined(SUNOS) || defined(HPUX)
 
	#include <alloca.h>
 
#endif
 
@@ -282,11 +278,18 @@
 
typedef unsigned char byte;
 

	
 
/* This is already defined in unix, but not in QNX Neutrino (6.x)*/
 
#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__MORPHOS__)) || defined(__QNXNTO__)
 
#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__MORPHOS__)) || defined(__QNXNTO__)
 
	typedef unsigned int uint;
 
#endif
 

	
 
#if !defined(__BEOS__) && !defined(__NDS__) /* Already defined on BEOS and NDS */
 
#if defined(TROUBLED_INTS)
 
	/* NDS'/BeOS'/Haiku's types for uint32/int32 are based on longs, which causes
 
	 * trouble all over the place in OpenTTD. */
 
	#define uint32 uint32_ugly_hack
 
	#define int32 int32_ugly_hack
 
	typedef unsigned int uint32_ugly_hack;
 
	typedef signed int int32_ugly_hack;
 
#else
 
	typedef unsigned char    uint8;
 
	typedef   signed char     int8;
 
	typedef unsigned short   uint16;
 
@@ -295,7 +298,7 @@ typedef unsigned char byte;
 
	typedef   signed int      int32;
 
	typedef unsigned __int64 uint64;
 
	typedef   signed __int64  int64;
 
#endif /* !__BEOS__ && !__NDS__ */
 
#endif /* !TROUBLED_INTS */
 

	
 
#if !defined(WITH_PERSONAL_DIR)
 
	#define PERSONAL_DIR ""
0 comments (0 inline, 0 general)