mirror of https://github.com/OpenTTD/OpenTTD
(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)
parent
3dd202ba1c
commit
01ab1c6001
24
config.lib
24
config.lib
|
@ -459,10 +459,10 @@ check_params() {
|
||||||
log 1 " PREPROCESSOR is only available for OSX"
|
log 1 " PREPROCESSOR is only available for OSX"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# OS only allows DETECT, UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP
|
# 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|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP)$'`" ]; then
|
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 "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
|
exit 1
|
||||||
fi
|
fi
|
||||||
# cpu_type can be either 32 or 64
|
# cpu_type can be either 32 or 64
|
||||||
|
@ -1203,11 +1203,11 @@ make_cflags_and_ldflags() {
|
||||||
fi
|
fi
|
||||||
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"
|
LIBS="$LIBS -lpthread"
|
||||||
fi
|
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"
|
LIBS="$LIBS -lc"
|
||||||
fi
|
fi
|
||||||
if [ "$os" = "WINCE" ]; then
|
if [ "$os" = "WINCE" ]; then
|
||||||
|
@ -1247,12 +1247,12 @@ make_cflags_and_ldflags() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$os" = "BEOS" ]; then
|
if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then
|
||||||
LIBS="$LIBS -lmidi -lbe"
|
LIBS="$LIBS -lmidi -lbe"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Most targets act like UNIX, just with some additions
|
# 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"
|
CFLAGS="$CFLAGS -DUNIX"
|
||||||
fi
|
fi
|
||||||
# And others like Windows
|
# And others like Windows
|
||||||
|
@ -1427,6 +1427,10 @@ make_cflags_and_ldflags() {
|
||||||
LDFLAGS="$LDFLAGS -lbind -lsocket"
|
LDFLAGS="$LDFLAGS -lbind -lsocket"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$os" = "HAIKU" ]; then
|
||||||
|
LDFLAGS="$LDFLAGS -lnetwork"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$os" = "SUNOS" ]; then
|
if [ "$os" = "SUNOS" ]; then
|
||||||
LDFLAGS="$LDFLAGS -lnsl -lsocket"
|
LDFLAGS="$LDFLAGS -lnsl -lsocket"
|
||||||
fi
|
fi
|
||||||
|
@ -1846,6 +1850,7 @@ detect_os() {
|
||||||
/hp-ux/ { print "HPUX"; exit}
|
/hp-ux/ { print "HPUX"; exit}
|
||||||
/morphos/ { print "MORPHOS"; exit}
|
/morphos/ { print "MORPHOS"; exit}
|
||||||
/beos/ { print "BEOS"; exit}
|
/beos/ { print "BEOS"; exit}
|
||||||
|
/haiku/ { print "HAIKU"; exit}
|
||||||
/sunos/ { print "SUNOS"; exit}
|
/sunos/ { print "SUNOS"; exit}
|
||||||
/solaris/ { print "SUNOS"; exit}
|
/solaris/ { print "SUNOS"; exit}
|
||||||
/cygwin/ { print "CYGWIN"; exit}
|
/cygwin/ { print "CYGWIN"; exit}
|
||||||
|
@ -1866,6 +1871,7 @@ detect_os() {
|
||||||
/hp-ux/ { print "HPUX"; exit}
|
/hp-ux/ { print "HPUX"; exit}
|
||||||
/morphos/ { print "MORPHOS"; exit}
|
/morphos/ { print "MORPHOS"; exit}
|
||||||
/beos/ { print "BEOS"; exit}
|
/beos/ { print "BEOS"; exit}
|
||||||
|
/haiku/ { print "HAIKU"; exit}
|
||||||
/sunos/ { print "SUNOS"; exit}
|
/sunos/ { print "SUNOS"; exit}
|
||||||
/cygwin/ { print "CYGWIN"; exit}
|
/cygwin/ { print "CYGWIN"; exit}
|
||||||
/mingw/ { print "MINGW"; exit}
|
/mingw/ { print "MINGW"; exit}
|
||||||
|
@ -1876,7 +1882,7 @@ detect_os() {
|
||||||
if [ -z "$os" ]; then
|
if [ -z "$os" ]; then
|
||||||
log 1 "detecting OS... none detected"
|
log 1 "detecting OS... none detected"
|
||||||
log 1 "I couldn't detect your OS. Please use --os=OS to force one"
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -2902,7 +2908,7 @@ showhelp() {
|
||||||
echo " --os=OS the OS we are compiling for [DETECT]"
|
echo " --os=OS the OS we are compiling for [DETECT]"
|
||||||
echo " DETECT/UNIX/OSX/FREEBSD/OPENBSD/NETBSD/"
|
echo " DETECT/UNIX/OSX/FREEBSD/OPENBSD/NETBSD/"
|
||||||
echo " MORPHOS/HPUX/BEOS/SUNOS/CYGWIN/MINGW/OS2/"
|
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 " --endian=ENDIAN set the endian of the HOST (AUTO/LE/BE)"
|
||||||
echo " --revision=rXXXX overwrite the revision detection."
|
echo " --revision=rXXXX overwrite the revision detection."
|
||||||
echo " Use with care!"
|
echo " Use with care!"
|
||||||
|
|
|
@ -115,7 +115,8 @@ AWKCOMMAND='
|
||||||
if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; }
|
if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; }
|
||||||
if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; }
|
if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; }
|
||||||
if ($0 == "DOS" && "'$os'" != "DOS") { 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" &&
|
if ($0 == "WIN32" && "'$os'" != "MINGW" &&
|
||||||
"'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; }
|
"'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; }
|
||||||
if ($0 == "MORPHOS" && "'$os'" != "MORPHOS") { next; }
|
if ($0 == "MORPHOS" && "'$os'" != "MORPHOS") { next; }
|
||||||
|
|
|
@ -19,9 +19,11 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#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
|
/* 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"
|
# define PRINTF_PID_T "%ld"
|
||||||
#else
|
#else
|
||||||
# define PRINTF_PID_T "%d"
|
# define PRINTF_PID_T "%d"
|
||||||
|
|
|
@ -279,6 +279,8 @@ void AskExitGame()
|
||||||
SetDParam(0, STR_OSNAME_OSX);
|
SetDParam(0, STR_OSNAME_OSX);
|
||||||
#elif defined(__BEOS__)
|
#elif defined(__BEOS__)
|
||||||
SetDParam(0, STR_OSNAME_BEOS);
|
SetDParam(0, STR_OSNAME_BEOS);
|
||||||
|
#elif defined(__HAIKU__)
|
||||||
|
SetDParam(0, STR_OSNAME_HAIKU);
|
||||||
#elif defined(__MORPHOS__)
|
#elif defined(__MORPHOS__)
|
||||||
SetDParam(0, STR_OSNAME_MORPHOS);
|
SetDParam(0, STR_OSNAME_MORPHOS);
|
||||||
#elif defined(__AMIGA__)
|
#elif defined(__AMIGA__)
|
||||||
|
|
|
@ -1344,6 +1344,7 @@ STR_OSNAME_DOS :DOS
|
||||||
STR_OSNAME_UNIX :Unix
|
STR_OSNAME_UNIX :Unix
|
||||||
STR_OSNAME_OSX :OS X
|
STR_OSNAME_OSX :OS X
|
||||||
STR_OSNAME_BEOS :BeOS
|
STR_OSNAME_BEOS :BeOS
|
||||||
|
STR_OSNAME_HAIKU :Haiku
|
||||||
STR_OSNAME_MORPHOS :MorphOS
|
STR_OSNAME_MORPHOS :MorphOS
|
||||||
STR_OSNAME_AMIGAOS :AmigaOS
|
STR_OSNAME_AMIGAOS :AmigaOS
|
||||||
STR_OSNAME_OS2 :OS/2
|
STR_OSNAME_OS2 :OS/2
|
||||||
|
|
|
@ -30,9 +30,9 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // PS
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#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! */
|
/* 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)
|
int seek_past_header(char **pos, const char *header)
|
||||||
{
|
{
|
||||||
|
@ -63,9 +63,9 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // BE
|
||||||
char **output = &output_pointer;
|
char **output = &output_pointer;
|
||||||
if (seek_past_header(output, "IP Interfaces:") == B_OK) {
|
if (seek_past_header(output, "IP Interfaces:") == B_OK) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
uint32 n, fields, read;
|
uint32 n;
|
||||||
|
int fields, read;
|
||||||
uint8 i1, i2, i3, i4, j1, j2, j3, j4;
|
uint8 i1, i2, i3, i4, j1, j2, j3, j4;
|
||||||
struct in_addr inaddr;
|
|
||||||
uint32 ip;
|
uint32 ip;
|
||||||
uint32 netmask;
|
uint32 netmask;
|
||||||
|
|
||||||
|
@ -85,7 +85,6 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // BE
|
||||||
((sockaddr_in*)&address)->sin_addr.s_addr = htonl(ip | ~netmask);
|
((sockaddr_in*)&address)->sin_addr.s_addr = htonl(ip | ~netmask);
|
||||||
NetworkAddress addr(address, sizeof(sockaddr));
|
NetworkAddress addr(address, sizeof(sockaddr));
|
||||||
if (!broadcast->Contains(addr)) *broadcast->Append() = addr;
|
if (!broadcast->Contains(addr)) *broadcast->Append() = addr;
|
||||||
index++;
|
|
||||||
}
|
}
|
||||||
if (read < 0) {
|
if (read < 0) {
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -155,7 +155,7 @@ static inline void OTTDfreeaddrinfo(struct addrinfo *ai)
|
||||||
# include <arpa/inet.h>
|
# include <arpa/inet.h>
|
||||||
# include <net/if.h>
|
# include <net/if.h>
|
||||||
/* According to glibc/NEWS, <ifaddrs.h> appeared in glibc-2.3. */
|
/* 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)
|
&& !(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
|
/* 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
|
* the following two lines and an alternative way will be used to fetch
|
||||||
|
@ -185,6 +185,10 @@ static inline void OTTDfreeaddrinfo(struct addrinfo *ai)
|
||||||
typedef int socklen_t;
|
typedef int socklen_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __HAIKU__
|
||||||
|
#define IPV6_V6ONLY 27
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PSP)
|
#if defined(PSP)
|
||||||
# include <sys/socket.h>
|
# include <sys/socket.h>
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
|
|
33
src/stdafx.h
33
src/stdafx.h
|
@ -16,15 +16,15 @@
|
||||||
#include "os/macosx/osx_stdafx.h"
|
#include "os/macosx/osx_stdafx.h"
|
||||||
#endif /* __APPLE__ */
|
#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>
|
#include <nds/jtypes.h>
|
||||||
/* NDS' types for uint32/int32 are based on longs, which causes
|
#define TROUBLED_INTS
|
||||||
* trouble all over the place in OpenTTD. */
|
#endif
|
||||||
#define uint32 uint32_ugly_hack
|
|
||||||
#define int32 int32_ugly_hack
|
|
||||||
typedef unsigned int uint32_ugly_hack;
|
|
||||||
typedef signed int int32_ugly_hack;
|
|
||||||
#endif /* __NDS__ */
|
|
||||||
|
|
||||||
/* It seems that we need to include stdint.h before anything else
|
/* 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
|
* We need INT64_MAX, which for most systems comes from stdint.h. However, MSVC
|
||||||
|
@ -82,10 +82,6 @@
|
||||||
#include <pspthreadman.h>
|
#include <pspthreadman.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__BEOS__)
|
|
||||||
#include <SupportDefs.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(SUNOS) || defined(HPUX)
|
#if defined(SUNOS) || defined(HPUX)
|
||||||
#include <alloca.h>
|
#include <alloca.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -282,11 +278,18 @@
|
||||||
typedef unsigned char byte;
|
typedef unsigned char byte;
|
||||||
|
|
||||||
/* This is already defined in unix, but not in QNX Neutrino (6.x)*/
|
/* 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;
|
typedef unsigned int uint;
|
||||||
#endif
|
#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 unsigned char uint8;
|
||||||
typedef signed char int8;
|
typedef signed char int8;
|
||||||
typedef unsigned short uint16;
|
typedef unsigned short uint16;
|
||||||
|
@ -295,7 +298,7 @@ typedef unsigned char byte;
|
||||||
typedef signed int int32;
|
typedef signed int int32;
|
||||||
typedef unsigned __int64 uint64;
|
typedef unsigned __int64 uint64;
|
||||||
typedef signed __int64 int64;
|
typedef signed __int64 int64;
|
||||||
#endif /* !__BEOS__ && !__NDS__ */
|
#endif /* !TROUBLED_INTS */
|
||||||
|
|
||||||
#if !defined(WITH_PERSONAL_DIR)
|
#if !defined(WITH_PERSONAL_DIR)
|
||||||
#define PERSONAL_DIR ""
|
#define PERSONAL_DIR ""
|
||||||
|
|
Loading…
Reference in New Issue