Commit 405adb9e authored by Martin v. Löwis's avatar Martin v. Löwis

Patch #488073: AtheOS port.

parent 56261979
...@@ -178,9 +178,9 @@ class build_ext (Command): ...@@ -178,9 +178,9 @@ class build_ext (Command):
if os.name == 'os2': if os.name == 'os2':
self.library_dirs.append(os.path.join(sys.exec_prefix, 'Config')) self.library_dirs.append(os.path.join(sys.exec_prefix, 'Config'))
# for extensions under Cygwin Python's library directory must be # for extensions under Cygwin and AtheOS Python's library directory must be
# appended to library_dirs # appended to library_dirs
if sys.platform[:6] == 'cygwin': if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos':
if string.find(sys.executable, sys.exec_prefix) != -1: if string.find(sys.executable, sys.exec_prefix) != -1:
# building third party extensions # building third party extensions
self.library_dirs.append(os.path.join(sys.prefix, "lib", self.library_dirs.append(os.path.join(sys.prefix, "lib",
...@@ -656,6 +656,22 @@ class build_ext (Command): ...@@ -656,6 +656,22 @@ class build_ext (Command):
# don't extend ext.libraries, it may be shared with other # don't extend ext.libraries, it may be shared with other
# extensions, it is a reference to the original list # extensions, it is a reference to the original list
return ext.libraries + [pythonlib] return ext.libraries + [pythonlib]
elif sys.platform[:6] == "atheos":
from distutils import sysconfig
template = "python%d.%d"
pythonlib = (template %
(sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff))
# Get SHLIBS from Makefile
extra = []
for lib in sysconfig.get_config_var('SHLIBS').split():
if lib.startswith('-l'):
extra.append(lib[2:])
else:
extra.append(lib)
# don't extend ext.libraries, it may be shared with other
# extensions, it is a reference to the original list
return ext.libraries + [pythonlib, "m"] + extra
else: else:
return ext.libraries return ext.libraries
......
# Generated by h2py from /include/netinet/in.h
_NETINET_IN_H = 1
# Included from features.h
_FEATURES_H = 1
__USE_ANSI = 1
__FAVOR_BSD = 1
_ISOC9X_SOURCE = 1
_POSIX_SOURCE = 1
_POSIX_C_SOURCE = 199506L
_XOPEN_SOURCE = 500
_XOPEN_SOURCE_EXTENDED = 1
_LARGEFILE64_SOURCE = 1
_BSD_SOURCE = 1
_SVID_SOURCE = 1
_BSD_SOURCE = 1
_SVID_SOURCE = 1
__USE_ISOC9X = 1
_POSIX_SOURCE = 1
_POSIX_C_SOURCE = 2
_POSIX_C_SOURCE = 199506L
__USE_POSIX = 1
__USE_POSIX2 = 1
__USE_POSIX199309 = 1
__USE_POSIX199506 = 1
__USE_XOPEN = 1
__USE_XOPEN_EXTENDED = 1
__USE_UNIX98 = 1
_LARGEFILE_SOURCE = 1
__USE_XOPEN_EXTENDED = 1
__USE_LARGEFILE = 1
__USE_LARGEFILE64 = 1
__USE_FILE_OFFSET64 = 1
__USE_MISC = 1
__USE_BSD = 1
__USE_SVID = 1
__USE_GNU = 1
__USE_REENTRANT = 1
__STDC_IEC_559__ = 1
__STDC_IEC_559_COMPLEX__ = 1
__GNU_LIBRARY__ = 6
__GLIBC__ = 2
__GLIBC_MINOR__ = 1
# Included from sys/cdefs.h
_SYS_CDEFS_H = 1
def __PMT(args): return args
def __P(args): return args
def __PMT(args): return args
def __P(args): return ()
def __PMT(args): return ()
def __STRING(x): return #x
def __STRING(x): return "x"
def __ASMNAME(cname): return __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
def __attribute__(xyz): return
__USE_EXTERN_INLINES = 1
# Included from gnu/stubs.h
# Included from limits.h
_LIBC_LIMITS_H_ = 1
# Included from bits/posix1_lim.h
_BITS_POSIX1_LIM_H = 1
_POSIX_AIO_LISTIO_MAX = 2
_POSIX_AIO_MAX = 1
_POSIX_ARG_MAX = 4096
_POSIX_CHILD_MAX = 6
_POSIX_DELAYTIMER_MAX = 32
_POSIX_LINK_MAX = 8
_POSIX_MAX_CANON = 255
_POSIX_MAX_INPUT = 255
_POSIX_MQ_OPEN_MAX = 8
_POSIX_MQ_PRIO_MAX = 32
_POSIX_NGROUPS_MAX = 0
_POSIX_OPEN_MAX = 16
_POSIX_FD_SETSIZE = _POSIX_OPEN_MAX
_POSIX_NAME_MAX = 14
_POSIX_PATH_MAX = 255
_POSIX_PIPE_BUF = 512
_POSIX_RTSIG_MAX = 8
_POSIX_SEM_NSEMS_MAX = 256
_POSIX_SEM_VALUE_MAX = 32767
_POSIX_SIGQUEUE_MAX = 32
_POSIX_SSIZE_MAX = 32767
_POSIX_STREAM_MAX = 8
_POSIX_TZNAME_MAX = 3
_POSIX_QLIMIT = 1
_POSIX_HIWAT = _POSIX_PIPE_BUF
_POSIX_UIO_MAXIOV = 16
_POSIX_TTY_NAME_MAX = 9
_POSIX_TIMER_MAX = 32
_POSIX_LOGIN_NAME_MAX = 9
_POSIX_CLOCKRES_MIN = 20000000
# Included from bits/local_lim.h
# Included from posix/limits.h
CHAR_BIT = 8
CHAR_MAX = 127
CHAR_MIN = (-128)
INT_MAX = 2147483647
INT_MIN = (-2147483647-1)
LONG_MAX = 2147483647L
LONG_MIN = (-2147483647L-1L)
SCHAR_MAX = 127
SCHAR_MIN = (-128)
SHRT_MAX = 32767
SHRT_MIN = (-32768)
UCHAR_MAX = 255
USHRT_MAX = 65535
_POSIX_ARG_MAX = 131072
_POSIX_CHILD_MAX = 4096
_POSIX_LINK_MAX = 1
_POSIX_MAX_CANON = 126
_POSIX_MAX_INPUT = 126
_POSIX_NAME_MAX = 256
_POSIX_NGROUPS_MAX = 32
_POSIX_OPEN_MAX = 256
_POSIX_PATH_MAX = 255
_POSIX_PIPE_BUF = 512
_POSIX_SSIZE_MAX = 2147483647
_POSIX_STREAM_MAX = 256
_POSIX_TZNAME_MAX = 5
NGROUPS_MAX = 32
ARG_MAX = 131072
CHILD_MAX = 4096
OPEN_MAX = 256
LINK_MAX = 1
MAX_CANON = 126
MAX_INPUT = 126
NAME_MAX = 255
PATH_MAX = 4096
PIPE_BUF = 4096
SSIZE_MAX = 2147483647
MAXSYMLINKS = 16
AIO_PRIO_DELTA_MAX = 20
SSIZE_MAX = INT_MAX
NGROUPS_MAX = _POSIX_NGROUPS_MAX
# Included from bits/posix2_lim.h
_BITS_POSIX2_LIM_H = 1
_POSIX2_BC_BASE_MAX = 99
_POSIX2_BC_DIM_MAX = 2048
_POSIX2_BC_SCALE_MAX = 99
_POSIX2_BC_STRING_MAX = 1000
_POSIX2_COLL_WEIGHTS_MAX = 255
_POSIX2_EQUIV_CLASS_MAX = 255
_POSIX2_EXPR_NEST_MAX = 32
_POSIX2_LINE_MAX = 2048
_POSIX2_RE_DUP_MAX = 255
_POSIX2_CHARCLASS_NAME_MAX = 2048
BC_BASE_MAX = _POSIX2_BC_BASE_MAX
BC_DIM_MAX = _POSIX2_BC_DIM_MAX
BC_SCALE_MAX = _POSIX2_BC_SCALE_MAX
BC_STRING_MAX = _POSIX2_BC_STRING_MAX
COLL_WEIGHTS_MAX = _POSIX2_COLL_WEIGHTS_MAX
EQUIV_CLASS_MAX = _POSIX2_EQUIV_CLASS_MAX
EXPR_NEST_MAX = _POSIX2_EXPR_NEST_MAX
LINE_MAX = _POSIX2_LINE_MAX
RE_DUP_MAX = _POSIX2_RE_DUP_MAX
CHARCLASS_NAME_MAX = _POSIX2_CHARCLASS_NAME_MAX
# Included from bits/xopen_lim.h
_XOPEN_LIM_H = 1
# Included from bits/stdio_lim.h
L_tmpnam = 20
TMP_MAX = 238328
FILENAME_MAX = 4096
L_ctermid = 9
L_cuserid = 9
FOPEN_MAX = 256
STREAM_MAX = FOPEN_MAX
TZNAME_MAX = _POSIX_TZNAME_MAX
_XOPEN_IOV_MAX = _POSIX_UIO_MAXIOV
NL_ARGMAX = _POSIX_ARG_MAX
NL_LANGMAX = _POSIX2_LINE_MAX
NL_MSGMAX = INT_MAX
NL_NMAX = INT_MAX
NL_SETMAX = INT_MAX
NL_TEXTMAX = INT_MAX
NZERO = 20
MB_LEN_MAX = 6
_LIMITS_H = 1
CHAR_BIT = 8
SCHAR_MIN = (-128)
SCHAR_MAX = 127
UCHAR_MAX = 255
CHAR_MIN = 0
CHAR_MAX = UCHAR_MAX
CHAR_MIN = SCHAR_MIN
CHAR_MAX = SCHAR_MAX
SHRT_MIN = (-32768)
SHRT_MAX = 32767
USHRT_MAX = 65535
INT_MIN = (-INT_MAX - 1)
INT_MAX = 2147483647
UINT_MAX = 4294967295
LONG_MAX = 9223372036854775807L
LONG_MAX = 2147483647L
LONG_MIN = (-LONG_MAX - 1L)
ULONG_MAX = 4294967295L
# Included from stdint.h
_STDINT_H = 1
# Included from bits/wordsize.h
__WORDSIZE = 32
def __INT64_C(c): return c ## L
def __UINT64_C(c): return c ## UL
def __INT64_C(c): return c ## LL
def __UINT64_C(c): return c ## ULL
INT8_MIN = (-128)
INT16_MIN = (-32767-1)
INT32_MIN = (-2147483647-1)
INT64_MIN = (-__INT64_C(9223372036854775807)-1)
INT8_MAX = (127)
INT16_MAX = (32767)
INT32_MAX = (2147483647)
INT64_MAX = (__INT64_C(9223372036854775807))
UINT64_MAX = (__UINT64_C(18446744073709551615))
INT_LEAST8_MIN = (-128)
INT_LEAST16_MIN = (-32767-1)
INT_LEAST32_MIN = (-2147483647-1)
INT_LEAST64_MIN = (-__INT64_C(9223372036854775807)-1)
INT_LEAST8_MAX = (127)
INT_LEAST16_MAX = (32767)
INT_LEAST32_MAX = (2147483647)
INT_LEAST64_MAX = (__INT64_C(9223372036854775807))
UINT_LEAST64_MAX = (__UINT64_C(18446744073709551615))
INT_FAST8_MIN = (-128)
INT_FAST16_MIN = (-9223372036854775807L-1)
INT_FAST32_MIN = (-9223372036854775807L-1)
INT_FAST16_MIN = (-2147483647-1)
INT_FAST32_MIN = (-2147483647-1)
INT_FAST64_MIN = (-__INT64_C(9223372036854775807)-1)
INT_FAST8_MAX = (127)
INT_FAST16_MAX = (9223372036854775807L)
INT_FAST32_MAX = (9223372036854775807L)
INT_FAST16_MAX = (2147483647)
INT_FAST32_MAX = (2147483647)
INT_FAST64_MAX = (__INT64_C(9223372036854775807))
UINT_FAST64_MAX = (__UINT64_C(18446744073709551615))
INTPTR_MIN = (-9223372036854775807L-1)
INTPTR_MAX = (9223372036854775807L)
INTPTR_MIN = (-2147483647-1)
INTPTR_MAX = (2147483647)
INTMAX_MIN = (-__INT64_C(9223372036854775807)-1)
INTMAX_MAX = (__INT64_C(9223372036854775807))
UINTMAX_MAX = (__UINT64_C(18446744073709551615))
PTRDIFF_MIN = (-9223372036854775807L-1)
PTRDIFF_MAX = (9223372036854775807L)
PTRDIFF_MIN = (-2147483647-1)
PTRDIFF_MAX = (2147483647)
SIG_ATOMIC_MIN = (-2147483647-1)
SIG_ATOMIC_MAX = (2147483647)
WCHAR_MIN = (-2147483647-1)
WCHAR_MAX = (2147483647)
WINT_MIN = (0)
def INT8_C(c): return c
def INT16_C(c): return c
def INT32_C(c): return c
def INT64_C(c): return c ## L
def INT64_C(c): return c ## LL
def UINT8_C(c): return c ## U
def UINT16_C(c): return c ## U
def UINT32_C(c): return c ## U
def UINT64_C(c): return c ## UL
def UINT64_C(c): return c ## ULL
def INTMAX_C(c): return c ## L
def UINTMAX_C(c): return c ## UL
def INTMAX_C(c): return c ## LL
def UINTMAX_C(c): return c ## ULL
# Included from sys/types.h
_SYS_TYPES_H = 1
# Included from bits/types.h
_BITS_TYPES_H = 1
__FD_SETSIZE = 1024
def __FDELT(d): return ((d) / __NFDBITS)
# Included from bits/pthreadtypes.h
# Included from time.h
_TIME_H = 1
# Included from bits/time.h
# Included from posix/time.h
# Included from posix/types.h
MAXHOSTNAMELEN = 64
FD_SETSIZE = 1024
CLOCKS_PER_SEC = 1000000
_BITS_TIME_H = 1
CLOCKS_PER_SEC = 1000000
CLK_TCK = 100
_STRUCT_TIMEVAL = 1
CLK_TCK = CLOCKS_PER_SEC
__clock_t_defined = 1
__time_t_defined = 1
__timespec_defined = 1
def __isleap(year): return \
__BIT_TYPES_DEFINED__ = 1
# Included from endian.h
_ENDIAN_H = 1
__LITTLE_ENDIAN = 1234
__BIG_ENDIAN = 4321
__PDP_ENDIAN = 3412
# Included from bits/endian.h
__BYTE_ORDER = __LITTLE_ENDIAN
__FLOAT_WORD_ORDER = __BYTE_ORDER
LITTLE_ENDIAN = __LITTLE_ENDIAN
BIG_ENDIAN = __BIG_ENDIAN
PDP_ENDIAN = __PDP_ENDIAN
BYTE_ORDER = __BYTE_ORDER
# Included from sys/select.h
_SYS_SELECT_H = 1
# Included from bits/select.h
def __FD_ZERO(fdsp): return \
def __FD_ZERO(set): return \
# Included from bits/sigset.h
_SIGSET_H_types = 1
_SIGSET_H_fns = 1
def __sigmask(sig): return \
def __sigemptyset(set): return \
def __sigfillset(set): return \
def __sigisemptyset(set): return \
FD_SETSIZE = __FD_SETSIZE
def FD_ZERO(fdsetp): return __FD_ZERO (fdsetp)
# Included from sys/sysmacros.h
_SYS_SYSMACROS_H = 1
def major(dev): return ( (( (dev) >> 8) & 0xff))
def minor(dev): return ( ((dev) & 0xff))
# Included from bits/socket.h
PF_UNSPEC = 0
PF_LOCAL = 1
PF_UNIX = PF_LOCAL
PF_FILE = PF_LOCAL
PF_INET = 2
PF_AX25 = 3
PF_IPX = 4
PF_APPLETALK = 5
PF_NETROM = 6
PF_BRIDGE = 7
PF_ATMPVC = 8
PF_X25 = 9
PF_INET6 = 10
PF_ROSE = 11
PF_DECnet = 12
PF_NETBEUI = 13
PF_SECURITY = 14
PF_KEY = 15
PF_NETLINK = 16
PF_ROUTE = PF_NETLINK
PF_PACKET = 17
PF_ASH = 18
PF_ECONET = 19
PF_ATMSVC = 20
PF_SNA = 22
PF_IRDA = 23
PF_MAX = 32
AF_UNSPEC = PF_UNSPEC
AF_LOCAL = PF_LOCAL
AF_UNIX = PF_UNIX
AF_FILE = PF_FILE
AF_INET = PF_INET
AF_AX25 = PF_AX25
AF_IPX = PF_IPX
AF_APPLETALK = PF_APPLETALK
AF_NETROM = PF_NETROM
AF_BRIDGE = PF_BRIDGE
AF_ATMPVC = PF_ATMPVC
AF_X25 = PF_X25
AF_INET6 = PF_INET6
AF_ROSE = PF_ROSE
AF_DECnet = PF_DECnet
AF_NETBEUI = PF_NETBEUI
AF_SECURITY = PF_SECURITY
AF_KEY = PF_KEY
AF_NETLINK = PF_NETLINK
AF_ROUTE = PF_ROUTE
AF_PACKET = PF_PACKET
AF_ASH = PF_ASH
AF_ECONET = PF_ECONET
AF_ATMSVC = PF_ATMSVC
AF_SNA = PF_SNA
AF_IRDA = PF_IRDA
AF_MAX = PF_MAX
SOL_RAW = 255
SOL_DECNET = 261
SOL_X25 = 262
SOL_PACKET = 263
SOL_ATM = 264
SOL_AAL = 265
SOL_IRDA = 266
SOMAXCONN = 128
# Included from bits/sockaddr.h
_BITS_SOCKADDR_H = 1
def __SOCKADDR_COMMON(sa_prefix): return \
_SS_SIZE = 128
def CMSG_FIRSTHDR(mhdr): return \
# Included from atheos/socket.h
# Included from atheos/types.h
OS_NAME_LENGTH = 64
TRUE = 1
FALSE = 0
# Included from atheos/filesystem.h
# Included from atheos/atomic.h
# Included from atheos/typedefs.h
# Included from atheos/fs_attribs.h
# Included from atheos/kernel.h
# Included from atheos/kdebug.h
# Included from atheos/threads.h
TF_DEADLOCK = 0x0001
DB_PACKET_SIZE = 128
DB_PORT_COUNT = 16
DBP_PRINTK = 0
DBP_DEBUGGER = 2
# Included from atheos/stdlib.h
# Included from atheos/string.h
def COMMON(x): return \
def COMMON(x): return \
# Included from atheos/schedule.h
# Included from atheos/timer.h
# Included from posix/resource.h
RUSAGE_SELF = 0
RUSAGE_CHILDREN = -1
RLIMIT_CPU = 0
RLIMIT_FSIZE = 1
RLIMIT_DATA = 2
RLIMIT_STACK = 3
RLIMIT_CORE = 4
RLIMIT_RSS = 5
RLIMIT_MEMLOCK = 6
RLIMIT_NPROC = 7
RLIMIT_NOFILE = 8
RLIMIT_AS = 9
RLIM_NLIMITS = 10
# Included from atheos/v86.h
# Included from atheos/areas.h
MEMF_REAL = 0x00000002
MEMF_USER = 0x00000004
MEMF_BUFFER = 0x00000008
MEMF_KERNEL = 0x00000010
MEMF_OKTOFAILHACK = 0x00000020
MEMF_PRI_MASK = 0x000000ff
MEMF_NOBLOCK = 0x00000100
MEMF_CLEAR = 0x00010000
MEMF_LOCKED = 0x10000000
PAGE_SHIFT = 12
PGDIR_SHIFT = 22
def PAGE_ALIGN(addr): return (((addr)+PAGE_SIZE-1)&PAGE_MASK)
AREA_NO_LOCK = 0
AREA_LAZY_LOCK = 1
AREA_FULL_LOCK = 2
AREA_CONTIGUOUS = 3
AREA_READ = 0x00000001
AREA_WRITE = 0x00000002
AREA_EXEC = 0x00000004
AREA_FULL_ACCESS = (AREA_READ | AREA_WRITE | AREA_EXEC)
AREA_KERNEL = 0x00000008
AREA_UNMAP_PHYS = 0x00000010
AREA_ANY_ADDRESS = 0x00000000
AREA_EXACT_ADDRESS = 0x00000100
AREA_BASE_ADDRESS = 0x00000200
AREA_CLONE_ADDRESS = 0x00000300
AREA_ADDR_SPEC_MASK = 0x00000f00
AREA_TOP_DOWN = 0x00001000
AREA_REMAPPED = 0x0020
AREA_SHARED = 0x0040
AREA_GROWSDOWN = 0x0080
AREA_FIRST_KERNEL_ADDRESS = 0x00100000
AREA_LAST_KERNEL_ADDRESS = 0x7fffffff
AREA_FIRST_USER_ADDRESS = 0x80000000
AREA_LAST_USER_ADDRESS = 0xffffffff
MAX_CPU_COUNT = 16
def kfree(p): return kassertw( __kfree(p) == 0 )
# Included from posix/dirent.h
MAXNAMLEN = NAME_MAX
MAXNAMLEN = 255
# Included from dirent.h
_DIRENT_H = 1
# Included from bits/dirent.h
def _D_ALLOC_NAMLEN(d): return (_D_EXACT_NAMLEN (d) + 1)
def IFTODT(mode): return (((mode) & 0170000) >> 12)
def DTTOIF(dirtype): return ((dirtype) << 12)
def dirfd(dirp): return _DIR_dirfd (dirp)
MAXNAMLEN = NAME_MAX
MAXNAMLEN = 255
# Included from posix/stat.h
S_IFMT = 00170000
S_IFSOCK = 0140000
S_IFLNK = 0120000
S_IFREG = 0100000
S_IFBLK = 0060000
S_IFDIR = 0040000
S_IFCHR = 0020000
S_IFIFO = 0010000
S_ISUID = 0004000
S_ISGID = 0002000
S_ISVTX = 0001000
def S_ISLNK(m): return (((m) & S_IFMT) == S_IFLNK)
def S_ISREG(m): return (((m) & S_IFMT) == S_IFREG)
def S_ISDIR(m): return (((m) & S_IFMT) == S_IFDIR)
def S_ISCHR(m): return (((m) & S_IFMT) == S_IFCHR)
def S_ISBLK(m): return (((m) & S_IFMT) == S_IFBLK)
def S_ISFIFO(m): return (((m) & S_IFMT) == S_IFIFO)
def S_ISSOCK(m): return (((m) & S_IFMT) == S_IFSOCK)
S_IRWXU = 00700
S_IRUSR = 00400
S_IWUSR = 00200
S_IXUSR = 00100
S_IRWXG = 00070
S_IRGRP = 00040
S_IWGRP = 00020
S_IXGRP = 00010
S_IRWXO = 00007
S_IROTH = 00004
S_IWOTH = 00002
S_IXOTH = 00001
S_IRWXUGO = (S_IRWXU|S_IRWXG|S_IRWXO)
S_IALLUGO = (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO)
S_IRUGO = (S_IRUSR|S_IRGRP|S_IROTH)
S_IWUGO = (S_IWUSR|S_IWGRP|S_IWOTH)
S_IXUGO = (S_IXUSR|S_IXGRP|S_IXOTH)
_STAT_VER_KERNEL = 0
# Included from posix/fcntl.h
O_ACCMODE = 0003
O_RWMASK = O_ACCMODE
O_RDONLY = 00
O_WRONLY = 01
O_RDWR = 02
O_CREAT = 0100
O_EXCL = 0200
O_NOCTTY = 0400
O_TRUNC = 01000
O_APPEND = 02000
O_NONBLOCK = 04000
O_NDELAY = O_NONBLOCK
O_SYNC = 010000
O_FSYNC = O_SYNC
O_ASYNC = 020000
FASYNC = O_ASYNC
O_DIRECTORY = 040000
O_NOTRAVERSE = 0100000
O_NOFOLLOW = O_NOTRAVERSE
F_DUPFD = 0
F_GETFD = 1
F_SETFD = 2
F_GETFL = 3
F_SETFL = 4
F_GETLK = 5
F_SETLK = 6
F_SETLKW = 7
F_SETOWN = 8
F_GETOWN = 9
F_SETSIG = 10
F_GETSIG = 11
F_COPYFD = 12
FD_CLOEXEC = 1
F_RDLCK = 0
F_WRLCK = 1
F_UNLCK = 2
F_EXLCK = 4
F_SHLCK = 8
LOCK_SH = 1
LOCK_EX = 2
LOCK_NB = 4
LOCK_UN = 8
# Included from posix/uio.h
UIO_FASTIOV = 8
UIO_MAXIOV = 1024
MNTF_READONLY = 0x0001
FS_IS_READONLY = 0x00000001
FS_IS_REMOVABLE = 0x00000002
FS_IS_PERSISTENT = 0x00000004
FS_IS_SHARED = 0x00000008
FS_IS_BLOCKBASED = 0x00000010
FS_CAN_MOUNT = 0x00000020
FS_HAS_MIME = 0x00010000
FS_HAS_ATTR = 0x00020000
FS_HAS_QUERY = 0x00040000
FSINFO_VERSION = 1
WSTAT_MODE = 0x0001
WSTAT_UID = 0x0002
WSTAT_GID = 0x0004
WSTAT_SIZE = 0x0008
WSTAT_ATIME = 0x0010
WSTAT_MTIME = 0x0020
WSTAT_CTIME = 0x0040
WFSSTAT_NAME = 0x0001
FSDRIVER_API_VERSION = 1
# Included from net/nettypes.h
IP_ADR_LEN = 4
INADDR_ANY = 0x00000000
INADDR_BROADCAST = 0xffffffff
INADDR_LOOPBACK = 0x7f000001
def CMSG_ALIGN(len): return ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
PROT_SOCK = 1024
SHUTDOWN_MASK = 3
RCV_SHUTDOWN = 1
SEND_SHUTDOWN = 2
SOCK_STREAM = 1
SOCK_DGRAM = 2
SOCK_RAW = 3
SOCK_RDM = 4
SOCK_SEQPACKET = 5
SOCK_PACKET = 10
PF_UNSPEC = 0
PF_LOCAL = 1
PF_UNIX = PF_LOCAL
PF_FILE = PF_LOCAL
PF_INET = 2
PF_AX25 = 3
PF_IPX = 4
PF_APPLETALK = 5
PF_NETROM = 6
PF_BRIDGE = 7
PF_ATMPVC = 8
PF_X25 = 9
PF_INET6 = 10
PF_ROSE = 11
PF_DECnet = 12
PF_NETBEUI = 13
PF_SECURITY = 14
PF_KEY = 15
PF_NETLINK = 16
PF_ROUTE = PF_NETLINK
PF_PACKET = 17
PF_ASH = 18
PF_ECONET = 19
PF_ATMSVC = 20
PF_SNA = 22
PF_IRDA = 23
PF_MAX = 32
AF_UNSPEC = PF_UNSPEC
AF_LOCAL = PF_LOCAL
AF_UNIX = PF_UNIX
AF_FILE = PF_FILE
AF_INET = PF_INET
AF_AX25 = PF_AX25
AF_IPX = PF_IPX
AF_APPLETALK = PF_APPLETALK
AF_NETROM = PF_NETROM
AF_BRIDGE = PF_BRIDGE
AF_ATMPVC = PF_ATMPVC
AF_X25 = PF_X25
AF_INET6 = PF_INET6
AF_ROSE = PF_ROSE
AF_DECnet = PF_DECnet
AF_NETBEUI = PF_NETBEUI
AF_SECURITY = PF_SECURITY
AF_KEY = PF_KEY
AF_NETLINK = PF_NETLINK
AF_ROUTE = PF_ROUTE
AF_PACKET = PF_PACKET
AF_ASH = PF_ASH
AF_ECONET = PF_ECONET
AF_ATMSVC = PF_ATMSVC
AF_SNA = PF_SNA
AF_IRDA = PF_IRDA
AF_MAX = PF_MAX
PF_UNIX = 1
AF_UNIX = PF_UNIX
PF_INET = 2
AF_INET = PF_INET
SOMAXCONN = 128
MSG_OOB = 1
MSG_PEEK = 2
MSG_DONTROUTE = 4
MSG_PROXY = 16
SOL_SOCKET = 1
SO_DEBUG = 1
SO_REUSEADDR = 2
SO_TYPE = 3
SO_ERROR = 4
SO_DONTROUTE = 5
SO_BROADCAST = 6
SO_SNDBUF = 7
SO_RCVBUF = 8
SO_KEEPALIVE = 9
SO_OOBINLINE = 10
SO_NO_CHECK = 11
SO_PRIORITY = 12
SO_LINGER = 13
SO_BSDCOMPAT = 14
SOL_IP = 0
SOL_IPX = 256
SOL_AX25 = 257
SOL_ATALK = 258
SOL_NETROM = 259
SOL_TCP = 6
SOL_UDP = 17
IP_TOS = 1
IPTOS_LOWDELAY = 0x10
IPTOS_THROUGHPUT = 0x08
IPTOS_RELIABILITY = 0x04
IPTOS_MINCOST = 0x02
IP_TTL = 2
IP_HDRINCL = 3
IP_OPTIONS = 4
IP_MULTICAST_IF = 32
IP_MULTICAST_TTL = 33
IP_MULTICAST_LOOP = 34
IP_ADD_MEMBERSHIP = 35
IP_DROP_MEMBERSHIP = 36
TCP_NODELAY = 0x01
TCP_MAXSEG = 0x02
def IN_CLASSA(a): return ((( (a)) & 0x80000000) == 0)
IN_CLASSA_NET = 0xff000000
IN_CLASSA_NSHIFT = 24
IN_CLASSA_HOST = (0xffffffff & ~IN_CLASSA_NET)
IN_CLASSA_MAX = 128
def IN_CLASSB(a): return ((( (a)) & 0xc0000000) == 0x80000000)
IN_CLASSB_NET = 0xffff0000
IN_CLASSB_NSHIFT = 16
IN_CLASSB_HOST = (0xffffffff & ~IN_CLASSB_NET)
IN_CLASSB_MAX = 65536
def IN_CLASSC(a): return ((( (a)) & 0xe0000000) == 0xc0000000)
IN_CLASSC_NET = 0xffffff00
IN_CLASSC_NSHIFT = 8
IN_CLASSC_HOST = (0xffffffff & ~IN_CLASSC_NET)
def IN_CLASSD(a): return ((( (a)) & 0xf0000000) == 0xe0000000)
def IN_MULTICAST(a): return IN_CLASSD(a)
def IN_EXPERIMENTAL(a): return ((( (a)) & 0xe0000000) == 0xe0000000)
def IN_BADCLASS(a): return ((( (a)) & 0xf0000000) == 0xf0000000)
INADDR_ANY = ( 0x00000000)
INADDR_BROADCAST = ( 0xffffffff)
INADDR_NONE = ( 0xffffffff)
IN_LOOPBACKNET = 127
INADDR_LOOPBACK = ( 0x7f000001)
INADDR_UNSPEC_GROUP = ( 0xe0000000)
INADDR_ALLHOSTS_GROUP = ( 0xe0000001)
INADDR_ALLRTRS_GROUP = ( 0xe0000002)
INADDR_MAX_LOCAL_GROUP = ( 0xe00000ff)
INET_ADDRSTRLEN = 16
INET6_ADDRSTRLEN = 46
# Included from bits/in.h
IP_TOS = 1
IP_TTL = 2
IP_HDRINCL = 3
IP_OPTIONS = 4
IP_ROUTER_ALERT = 5
IP_RECVOPTS = 6
IP_RETOPTS = 7
IP_PKTINFO = 8
IP_PKTOPTIONS = 9
IP_PMTUDISC = 10
IP_MTU_DISCOVER = 10
IP_RECVERR = 11
IP_RECVTTL = 12
IP_RECVTOS = 13
IP_MULTICAST_IF = 32
IP_MULTICAST_TTL = 33
IP_MULTICAST_LOOP = 34
IP_ADD_MEMBERSHIP = 35
IP_DROP_MEMBERSHIP = 36
IP_RECVRETOPTS = IP_RETOPTS
IP_PMTUDISC_DONT = 0
IP_PMTUDISC_WANT = 1
IP_PMTUDISC_DO = 2
SOL_IP = 0
SOL_SOCKET = 1
IP_DEFAULT_MULTICAST_TTL = 1
IP_DEFAULT_MULTICAST_LOOP = 1
IP_MAX_MEMBERSHIPS = 20
IPV6_ADDRFORM = 1
IPV6_PKTINFO = 2
IPV6_HOPOPTS = 3
IPV6_DSTOPTS = 4
IPV6_RXSRCRT = 5
IPV6_PKTOPTIONS = 6
IPV6_CHECKSUM = 7
IPV6_HOPLIMIT = 8
IPV6_NEXTHOP = 9
IPV6_AUTHHDR = 10
IPV6_UNICAST_HOPS = 16
IPV6_MULTICAST_IF = 17
IPV6_MULTICAST_HOPS = 18
IPV6_MULTICAST_LOOP = 19
IPV6_ADD_MEMBERSHIP = 20
IPV6_DROP_MEMBERSHIP = 21
IPV6_ROUTER_ALERT = 22
SCM_SRCRT = IPV6_RXSRCRT
IPV6_RXHOPOPTS = IPV6_HOPOPTS
IPV6_RXDSTOPTS = IPV6_DSTOPTS
IPV6_PMTUDISC_DONT = 0
IPV6_PMTUDISC_WANT = 1
IPV6_PMTUDISC_DO = 2
SOL_IPV6 = 41
SOL_ICMPV6 = 58
# Included from bits/byteswap.h
def __bswap_constant_16(x): return \
def __bswap_16(x): return \
def __bswap_16(x): return __bswap_constant_16 (x)
def __bswap_constant_32(x): return \
def __bswap_32(x): return \
def __bswap_32(x): return \
def __bswap_32(x): return __bswap_constant_32 (x)
def __bswap_64(x): return \
def ntohl(x): return (x)
def ntohs(x): return (x)
def htonl(x): return (x)
def htons(x): return (x)
def ntohl(x): return __bswap_32 (x)
def ntohs(x): return __bswap_16 (x)
def htonl(x): return __bswap_32 (x)
def htons(x): return __bswap_16 (x)
def IN6_IS_ADDR_UNSPECIFIED(a): return \
def IN6_IS_ADDR_LOOPBACK(a): return \
def IN6_IS_ADDR_LINKLOCAL(a): return \
def IN6_IS_ADDR_SITELOCAL(a): return \
def IN6_IS_ADDR_V4MAPPED(a): return \
def IN6_IS_ADDR_V4COMPAT(a): return \
def IN6_IS_ADDR_MC_NODELOCAL(a): return \
def IN6_IS_ADDR_MC_LINKLOCAL(a): return \
def IN6_IS_ADDR_MC_SITELOCAL(a): return \
def IN6_IS_ADDR_MC_ORGLOCAL(a): return \
def IN6_IS_ADDR_MC_GLOBAL(a): return \
# Generated by h2py from /include/sys/types.h
_SYS_TYPES_H = 1
# Included from features.h
_FEATURES_H = 1
__USE_ANSI = 1
__FAVOR_BSD = 1
_ISOC9X_SOURCE = 1
_POSIX_SOURCE = 1
_POSIX_C_SOURCE = 199506L
_XOPEN_SOURCE = 500
_XOPEN_SOURCE_EXTENDED = 1
_LARGEFILE64_SOURCE = 1
_BSD_SOURCE = 1
_SVID_SOURCE = 1
_BSD_SOURCE = 1
_SVID_SOURCE = 1
__USE_ISOC9X = 1
_POSIX_SOURCE = 1
_POSIX_C_SOURCE = 2
_POSIX_C_SOURCE = 199506L
__USE_POSIX = 1
__USE_POSIX2 = 1
__USE_POSIX199309 = 1
__USE_POSIX199506 = 1
__USE_XOPEN = 1
__USE_XOPEN_EXTENDED = 1
__USE_UNIX98 = 1
_LARGEFILE_SOURCE = 1
__USE_XOPEN_EXTENDED = 1
__USE_LARGEFILE = 1
__USE_LARGEFILE64 = 1
__USE_FILE_OFFSET64 = 1
__USE_MISC = 1
__USE_BSD = 1
__USE_SVID = 1
__USE_GNU = 1
__USE_REENTRANT = 1
__STDC_IEC_559__ = 1
__STDC_IEC_559_COMPLEX__ = 1
__GNU_LIBRARY__ = 6
__GLIBC__ = 2
__GLIBC_MINOR__ = 1
# Included from sys/cdefs.h
_SYS_CDEFS_H = 1
def __PMT(args): return args
def __P(args): return args
def __PMT(args): return args
def __P(args): return ()
def __PMT(args): return ()
def __STRING(x): return #x
def __STRING(x): return "x"
def __ASMNAME(cname): return __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
def __attribute__(xyz): return
__USE_EXTERN_INLINES = 1
# Included from gnu/stubs.h
# Included from bits/types.h
_BITS_TYPES_H = 1
__FD_SETSIZE = 1024
def __FDELT(d): return ((d) / __NFDBITS)
# Included from bits/pthreadtypes.h
# Included from time.h
_TIME_H = 1
# Included from bits/time.h
# Included from posix/time.h
# Included from posix/types.h
MAXHOSTNAMELEN = 64
FD_SETSIZE = 1024
CLOCKS_PER_SEC = 1000000
_BITS_TIME_H = 1
CLOCKS_PER_SEC = 1000000
CLK_TCK = 100
_STRUCT_TIMEVAL = 1
CLK_TCK = CLOCKS_PER_SEC
__clock_t_defined = 1
__time_t_defined = 1
__timespec_defined = 1
def __isleap(year): return \
__BIT_TYPES_DEFINED__ = 1
# Included from endian.h
_ENDIAN_H = 1
__LITTLE_ENDIAN = 1234
__BIG_ENDIAN = 4321
__PDP_ENDIAN = 3412
# Included from bits/endian.h
__BYTE_ORDER = __LITTLE_ENDIAN
__FLOAT_WORD_ORDER = __BYTE_ORDER
LITTLE_ENDIAN = __LITTLE_ENDIAN
BIG_ENDIAN = __BIG_ENDIAN
PDP_ENDIAN = __PDP_ENDIAN
BYTE_ORDER = __BYTE_ORDER
# Included from sys/select.h
_SYS_SELECT_H = 1
# Included from bits/select.h
def __FD_ZERO(fdsp): return \
def __FD_ZERO(set): return \
# Included from bits/sigset.h
_SIGSET_H_types = 1
_SIGSET_H_fns = 1
def __sigmask(sig): return \
def __sigemptyset(set): return \
def __sigfillset(set): return \
def __sigisemptyset(set): return \
FD_SETSIZE = __FD_SETSIZE
def FD_ZERO(fdsetp): return __FD_ZERO (fdsetp)
# Included from sys/sysmacros.h
_SYS_SYSMACROS_H = 1
def major(dev): return ( (( (dev) >> 8) & 0xff))
def minor(dev): return ( ((dev) & 0xff))
#! /bin/sh
set -v
python$EXE ../../Tools/scripts/h2py.py -i '\(u_long\)' -i '\(uint32_t\)' -i '\(int\)' -i '\(unsigned int\)' /include/netinet/in.h /include/sys/types.h
...@@ -721,6 +721,34 @@ _expectations = { ...@@ -721,6 +721,34 @@ _expectations = {
test_zipfile test_zipfile
test_zlib test_zlib
""", """,
'atheos':
"""
test_al
test_cd
test_cl
test_curses
test_dl
test_email_codecs
test_gdbm
test_gl
test_imgfile
test_largefile
test_linuxaudiodev
test_locale
test_mhlib
test_mmap
test_mpz
test_nis
test_poll
test_popen2
test_resource
test_socket_ssl
test_socketserver
test_sunaudiodev
test_unicode_file
test_winreg
test_winsound
""",
} }
class _ExpectedSkips: class _ExpectedSkips:
......
...@@ -17,6 +17,9 @@ except AttributeError: ...@@ -17,6 +17,9 @@ except AttributeError:
else: else:
start_len = "qq" start_len = "qq"
if sys.platform.startswith('atheos'):
start_len = "qq"
if sys.platform in ('netbsd1', 'Darwin1.2', 'darwin', if sys.platform in ('netbsd1', 'Darwin1.2', 'darwin',
'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
'bsdos2', 'bsdos3', 'bsdos4', 'bsdos2', 'bsdos3', 'bsdos4',
......
import sys
import os import os
from array import array from array import array
...@@ -88,7 +89,11 @@ f.close() ...@@ -88,7 +89,11 @@ f.close()
if not f.closed: if not f.closed:
raise TestFailed, 'file.closed should be true' raise TestFailed, 'file.closed should be true'
for methodname in ['fileno', 'flush', 'isatty', 'read', 'readinto', 'readline', 'readlines', 'seek', 'tell', 'truncate', 'write', 'xreadlines' ]: methods = ['fileno', 'flush', 'isatty', 'read', 'readinto', 'readline', 'readlines', 'seek', 'tell', 'truncate', 'write', 'xreadlines' ]
if sys.platform.startswith('atheos'):
methods.remove('truncate')
for methodname in methods:
method = getattr(f, methodname) method = getattr(f, methodname)
try: try:
method() method()
......
...@@ -12,7 +12,7 @@ import os, StringIO ...@@ -12,7 +12,7 @@ import os, StringIO
import sys import sys
import mhlib import mhlib
if sys.platform.startswith("win") or sys.platform=="riscos": if sys.platform.startswith("win") or sys.platform=="riscos" or sys.platform.startswith("atheos"):
raise TestSkipped("test_mhlib skipped on %s -- "%sys.platform + raise TestSkipped("test_mhlib skipped on %s -- "%sys.platform +
"too many Unix assumptions") "too many Unix assumptions")
......
...@@ -139,7 +139,13 @@ class StatAttributeTests(unittest.TestCase): ...@@ -139,7 +139,13 @@ class StatAttributeTests(unittest.TestCase):
return return
import statvfs import statvfs
try:
result = os.statvfs(self.fname) result = os.statvfs(self.fname)
except OSError, e:
# On AtheOS, glibc always returns ENOSYS
import errno
if e.errno == errno.ENOSYS:
return
# Make sure direct access works # Make sure direct access works
self.assertEquals(result.f_bfree, result[statvfs.F_BFREE]) self.assertEquals(result.f_bfree, result[statvfs.F_BFREE])
......
...@@ -14,11 +14,12 @@ from test_support import TestSkipped ...@@ -14,11 +14,12 @@ from test_support import TestSkipped
def main(): def main():
print "Test popen2 module:" print "Test popen2 module:"
if sys.platform[:4] == 'beos' and __name__ != '__main__': if (sys.platform[:4] == 'beos' or sys.platform[:6] == 'atheos') \
and __name__ != '__main__':
# Locks get messed up or something. Generally we're supposed # Locks get messed up or something. Generally we're supposed
# to avoid mixing "posix" fork & exec with native threads, and # to avoid mixing "posix" fork & exec with native threads, and
# they may be right about that after all. # they may be right about that after all.
raise TestSkipped, "popen2() doesn't work during import on BeOS" raise TestSkipped, "popen2() doesn't work during import on " + sys.platform
try: try:
from os import popen from os import popen
except ImportError: except ImportError:
......
...@@ -146,6 +146,7 @@ LIBS= @LIBS@ ...@@ -146,6 +146,7 @@ LIBS= @LIBS@
LIBM= @LIBM@ LIBM= @LIBM@
LIBC= @LIBC@ LIBC= @LIBC@
SYSLIBS= $(LIBM) $(LIBC) SYSLIBS= $(LIBM) $(LIBC)
SHLIBS= @SHLIBS@
MAINOBJ= @MAINOBJ@ MAINOBJ= @MAINOBJ@
THREADOBJ= @THREADOBJ@ THREADOBJ= @THREADOBJ@
...@@ -341,7 +342,7 @@ $(LIBRARY): $(LIBRARY_OBJS) ...@@ -341,7 +342,7 @@ $(LIBRARY): $(LIBRARY_OBJS)
$(RANLIB) $@ $(RANLIB) $@
libpython$(VERSION).so: $(LIBRARY_OBJS) libpython$(VERSION).so: $(LIBRARY_OBJS)
$(LDSHARED) -o $@ $(LIBRARY_OBJS) $(LIBC) $(LIBM) $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM)
libpython$(VERSION).sl: $(LIBRARY_OBJS) libpython$(VERSION).sl: $(LIBRARY_OBJS)
$(LDSHARED) -o $@ $(LIBRARY_OBJS) $(LIBC) $(LIBM) $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(LIBC) $(LIBM)
......
...@@ -78,6 +78,7 @@ Mike Carlton ...@@ -78,6 +78,7 @@ Mike Carlton
Luke Kenneth Casson Leighton Luke Kenneth Casson Leighton
Donn Cave Donn Cave
Per Cederqvist Per Cederqvist
Octavian Cerna
Jeffrey Chang Jeffrey Chang
Brad Chapman Brad Chapman
Greg Chapman Greg Chapman
......
Python for AtheOS
Before building:
Make sure you have shared versions of the libraries you want to use
with Python. You will have to compile them yourself, or download
precompiled packages.
Recommended libraries:
ncurses-4.2
readline-4.2a
zlib-1.1.4
Build:
$ ./configure --prefix=/usr/python
$ make
Python is always built as a shared library, otherwise dynamic loading
would not work.
Testing:
$ make test
Install:
# make install
# pkgmanager -a /usr/python
AtheOS issues:
- large file support: due to a stdio bug in glibc/libio, access to
large files may not work correctly.
fseeko() tries to seek to a negative offset.
ftello() returns a negative offset, it looks like a 32->64bit
sign-extension issue.
The lowlevel functions (open, lseek, etc) are OK.
- sockets: AF_UNIX is defined in the C library and in Python, but
not implemented in the system.
- select: poll is available in the C library, but does not work
(It does not return POLLNVAL for bad fds and hangs).
- posix: statvfs and fstatvfs always return ENOSYS.
-
- disabled modules:
- mmap: not yet implemented in AtheOS
- nis: broken (on an unconfigured system yp_get_default_domain()
returns junk instead of error)
- dl: dynamic loading doesn't work via dlopen()
- resource: getrimit and setrlimit are not yet implemented
- if you are getting segmentation faults, you probably are low on memory.
AtheOS doesn't handle very well an out-of-memory condition and
simply SEGVs the process.
Tested on:
AtheOS-0.3.7
gcc-2.95
binutils-2.10
make-3.78
--
Octavian Cerna <tavy@ylabs.com>
...@@ -311,6 +311,8 @@ C API ...@@ -311,6 +311,8 @@ C API
New platforms New platforms
- AtheOS is now supported.
- GNU/Hurd is now supported. - GNU/Hurd is now supported.
Tests Tests
......
...@@ -17,7 +17,9 @@ static PyObject *crypt_crypt(PyObject *self, PyObject *args) ...@@ -17,7 +17,9 @@ static PyObject *crypt_crypt(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "ss:crypt", &word, &salt)) { if (!PyArg_ParseTuple(args, "ss:crypt", &word, &salt)) {
return NULL; return NULL;
} }
return PyString_FromString( crypt( word, salt ) ); /* On some platforms (AtheOS) crypt returns NULL for an invalid
salt. Return None in that case. XXX Maybe raise an exception? */
return Py_BuildValue("s", crypt(word, salt));
} }
......
/* Support for dynamic loading of extension modules */
#include <atheos/image.h>
#include <errno.h>
#include "Python.h"
#include "importdl.h"
const struct filedescr _PyImport_DynLoadFiletab[] = {
{".so", "rb", C_EXTENSION},
{"module.so", "rb", C_EXTENSION},
{0, 0}
};
dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
const char *pathname, FILE *fp)
{
void *p;
int lib;
char funcname[258];
if (Py_VerboseFlag)
printf("load_library %s\n", pathname);
lib = load_library(pathname, 0);
if (lib < 0) {
char buf[512];
if (Py_VerboseFlag)
perror(pathname);
PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s: %.200s",
pathname, strerror(errno));
PyErr_SetString(PyExc_ImportError, buf);
return NULL;
}
PyOS_snprintf(funcname, sizeof(funcname), "init%.200s", shortname);
if (Py_VerboseFlag)
printf("get_symbol_address %s\n", funcname);
if (get_symbol_address(lib, funcname, -1, &p) < 0) {
p = NULL;
if (Py_VerboseFlag)
perror(funcname);
}
return (dl_funcptr) p;
}
...@@ -133,6 +133,10 @@ void PyThread_init_thread(void) ...@@ -133,6 +133,10 @@ void PyThread_init_thread(void)
#include "thread_plan9.h" #include "thread_plan9.h"
#endif #endif
#ifdef ATHEOS_THREADS
#include "thread_atheos.h"
#endif
/* /*
#ifdef FOOBAR_THREADS #ifdef FOOBAR_THREADS
#include "thread_foobar.h" #include "thread_foobar.h"
......
/* Threading for AtheOS.
Based on thread_beos.h. */
#include <atheos/threads.h>
#include <atheos/semaphore.h>
#include <atheos/atomic.h>
#include <errno.h>
#include <string.h>
/* Missing decl from threads.h */
extern int exit_thread(int);
/* Undefine FASTLOCK to play with simple semaphores. */
#define FASTLOCK
#ifdef FASTLOCK
/* Use an atomic counter and a semaphore for maximum speed. */
typedef struct fastmutex {
sem_id sem;
atomic_t count;
} fastmutex_t;
static int fastmutex_create(const char *name, fastmutex_t * mutex);
static int fastmutex_destroy(fastmutex_t * mutex);
static int fastmutex_lock(fastmutex_t * mutex);
static int fastmutex_timedlock(fastmutex_t * mutex, bigtime_t timeout);
static int fastmutex_unlock(fastmutex_t * mutex);
static int fastmutex_create(const char *name, fastmutex_t * mutex)
{
mutex->count = 0;
mutex->sem = create_semaphore(name, 0, 0);
return (mutex->sem < 0) ? -1 : 0;
}
static int fastmutex_destroy(fastmutex_t * mutex)
{
if (fastmutex_timedlock(mutex, 0) == 0 || errno == EWOULDBLOCK) {
return delete_semaphore(mutex->sem);
}
return 0;
}
static int fastmutex_lock(fastmutex_t * mutex)
{
atomic_t prev = atomic_add(&mutex->count, 1);
if (prev > 0)
return lock_semaphore(mutex->sem);
return 0;
}
static int fastmutex_timedlock(fastmutex_t * mutex, bigtime_t timeout)
{
atomic_t prev = atomic_add(&mutex->count, 1);
if (prev > 0)
return lock_semaphore_x(mutex->sem, 1, 0, timeout);
return 0;
}
static int fastmutex_unlock(fastmutex_t * mutex)
{
atomic_t prev = atomic_add(&mutex->count, -1);
if (prev > 1)
return unlock_semaphore(mutex->sem);
return 0;
}
#endif /* FASTLOCK */
/*
* Initialization.
*
*/
static void PyThread__init_thread(void)
{
/* Do nothing. */
return;
}
/*
* Thread support.
*
*/
static atomic_t thread_count = 0;
long PyThread_start_new_thread(void (*func) (void *), void *arg)
{
status_t success = -1;
thread_id tid;
char name[OS_NAME_LENGTH];
atomic_t this_thread;
dprintf(("PyThread_start_new_thread called\n"));
this_thread = atomic_add(&thread_count, 1);
PyOS_snprintf(name, sizeof(name), "python thread (%d)", this_thread);
tid = spawn_thread(name, func, NORMAL_PRIORITY, 0, arg);
if (tid < 0) {
dprintf(("PyThread_start_new_thread spawn_thread failed: %s\n", strerror(errno)));
} else {
success = resume_thread(tid);
if (success < 0) {
dprintf(("PyThread_start_new_thread resume_thread failed: %s\n", strerror(errno)));
}
}
return (success < 0 ? -1 : tid);
}
long PyThread_get_thread_ident(void)
{
return get_thread_id(NULL);
}
static void do_PyThread_exit_thread(int no_cleanup)
{
dprintf(("PyThread_exit_thread called\n"));
/* Thread-safe way to read a variable without a mutex: */
if (atomic_add(&thread_count, 0) == 0) {
/* No threads around, so exit main(). */
if (no_cleanup)
_exit(0);
else
exit(0);
} else {
/* We're a thread */
exit_thread(0);
}
}
void PyThread_exit_thread(void)
{
do_PyThread_exit_thread(0);
}
void PyThread__exit_thread(void)
{
do_PyThread_exit_thread(1);
}
#ifndef NO_EXIT_PROG
static void do_PyThread_exit_prog(int status, int no_cleanup)
{
dprintf(("PyThread_exit_prog(%d) called\n", status));
/* No need to do anything, the threads get torn down if main()exits. */
if (no_cleanup)
_exit(status);
else
exit(status);
}
void PyThread_exit_prog(int status)
{
do_PyThread_exit_prog(status, 0);
}
void PyThread__exit_prog(int status)
{
do_PyThread_exit_prog(status, 1);
}
#endif /* NO_EXIT_PROG */
/*
* Lock support.
*
*/
static atomic_t lock_count = 0;
PyThread_type_lock PyThread_allocate_lock(void)
{
#ifdef FASTLOCK
fastmutex_t *lock;
#else
sem_id sema;
#endif
char name[OS_NAME_LENGTH];
atomic_t this_lock;
dprintf(("PyThread_allocate_lock called\n"));
#ifdef FASTLOCK
lock = (fastmutex_t *) malloc(sizeof(fastmutex_t));
if (lock == NULL) {
dprintf(("PyThread_allocate_lock failed: out of memory\n"));
return (PyThread_type_lock) NULL;
}
#endif
this_lock = atomic_add(&lock_count, 1);
PyOS_snprintf(name, sizeof(name), "python lock (%d)", this_lock);
#ifdef FASTLOCK
if (fastmutex_create(name, lock) < 0) {
dprintf(("PyThread_allocate_lock failed: %s\n",
strerror(errno)));
free(lock);
lock = NULL;
}
dprintf(("PyThread_allocate_lock()-> %p\n", lock));
return (PyThread_type_lock) lock;
#else
sema = create_semaphore(name, 1, 0);
if (sema < 0) {
dprintf(("PyThread_allocate_lock failed: %s\n",
strerror(errno)));
sema = 0;
}
dprintf(("PyThread_allocate_lock()-> %p\n", sema));
return (PyThread_type_lock) sema;
#endif
}
void PyThread_free_lock(PyThread_type_lock lock)
{
dprintf(("PyThread_free_lock(%p) called\n", lock));
#ifdef FASTLOCK
if (fastmutex_destroy((fastmutex_t *) lock) < 0) {
dprintf(("PyThread_free_lock(%p) failed: %s\n", lock,
strerror(errno)));
}
free(lock);
#else
if (delete_semaphore((sem_id) lock) < 0) {
dprintf(("PyThread_free_lock(%p) failed: %s\n", lock,
strerror(errno)));
}
#endif
}
int PyThread_acquire_lock(PyThread_type_lock lock, int waitflag)
{
int retval;
dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock,
waitflag));
#ifdef FASTLOCK
if (waitflag)
retval = fastmutex_lock((fastmutex_t *) lock);
else
retval = fastmutex_timedlock((fastmutex_t *) lock, 0);
#else
if (waitflag)
retval = lock_semaphore((sem_id) lock);
else
retval = lock_semaphore_x((sem_id) lock, 1, 0, 0);
#endif
if (retval < 0) {
dprintf(("PyThread_acquire_lock(%p, %d) failed: %s\n",
lock, waitflag, strerror(errno)));
}
dprintf(("PyThread_acquire_lock(%p, %d)-> %d\n", lock, waitflag,
retval));
return retval < 0 ? 0 : 1;
}
void PyThread_release_lock(PyThread_type_lock lock)
{
dprintf(("PyThread_release_lock(%p) called\n", lock));
#ifdef FASTLOCK
if (fastmutex_unlock((fastmutex_t *) lock) < 0) {
dprintf(("PyThread_release_lock(%p) failed: %s\n", lock,
strerror(errno)));
}
#else
if (unlock_semaphore((sem_id) lock) < 0) {
dprintf(("PyThread_release_lock(%p) failed: %s\n", lock,
strerror(errno)));
}
#endif
}
...@@ -50,6 +50,8 @@ except KeyError: ...@@ -50,6 +50,8 @@ except KeyError:
try: try:
if sys.platform.find("beos") == 0: if sys.platform.find("beos") == 0:
searchdirs=os.environ['BEINCLUDES'].split(';') searchdirs=os.environ['BEINCLUDES'].split(';')
elif sys.platform.startswith("atheos"):
searchdirs=os.environ['C_INCLUDE_PATH'].split(':')
else: else:
raise KeyError raise KeyError
except KeyError: except KeyError:
......
#! /bin/sh #! /bin/sh
# From configure.in Revision: 1.321 . # From configure.in Revision: 1.322 .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.53. # Generated by GNU Autoconf 2.53.
# #
...@@ -1293,6 +1293,7 @@ then ...@@ -1293,6 +1293,7 @@ then
case $MACHDEP in case $MACHDEP in
cygwin*) MACHDEP="cygwin";; cygwin*) MACHDEP="cygwin";;
darwin*) MACHDEP="darwin";; darwin*) MACHDEP="darwin";;
atheos*) MACHDEP="atheos";;
'') MACHDEP="unknown";; '') MACHDEP="unknown";;
esac esac
fi fi
...@@ -3072,7 +3073,7 @@ fi; ...@@ -3072,7 +3073,7 @@ fi;
if test -z "$enable_shared" if test -z "$enable_shared"
then then
case $ac_sys_system in case $ac_sys_system in
CYGWIN*) CYGWIN* | atheos*)
enable_shared="yes";; enable_shared="yes";;
*) *)
enable_shared="no";; enable_shared="no";;
...@@ -3131,6 +3132,11 @@ if test $enable_shared = "yes"; then ...@@ -3131,6 +3132,11 @@ if test $enable_shared = "yes"; then
BLDLIBRARY='-rpath $(LIBDIR) -L. -lpython$(VERSION)' BLDLIBRARY='-rpath $(LIBDIR) -L. -lpython$(VERSION)'
RUNSHARED=LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH RUNSHARED=LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
;; ;;
atheos*)
LDLIBRARY='libpython$(VERSION).so'
BLDLIBRARY='-L. -lpython$(VERSION)'
RUNSHARED=DLL_PATH=`pwd`:${DLL_PATH:-/atheos/sys/libs:/atheos/autolnk/lib}
;;
esac esac
# DG/UX requires some fancy ld contortions to produce a .so from an .a # DG/UX requires some fancy ld contortions to produce a .so from an .a
case $MACHDEP in case $MACHDEP in
...@@ -3384,6 +3390,7 @@ if test -z "$LN" ; then ...@@ -3384,6 +3390,7 @@ if test -z "$LN" ; then
case $ac_sys_system in case $ac_sys_system in
BeOS*) LN="ln -s";; BeOS*) LN="ln -s";;
CYGWIN*) LN="ln -s";; CYGWIN*) LN="ln -s";;
atheos*) LN="ln -s";;
*) LN=ln;; *) LN=ln;;
esac esac
fi fi
...@@ -8779,6 +8786,7 @@ then ...@@ -8779,6 +8786,7 @@ then
SCO_SV*) LDSHARED="cc -G -KPIC -Ki486 -belf -Wl,-Bexport";; SCO_SV*) LDSHARED="cc -G -KPIC -Ki486 -belf -Wl,-Bexport";;
Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";; Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";;
CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";; CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";;
atheos*) LDSHARED="gcc -shared";;
*) LDSHARED="ld";; *) LDSHARED="ld";;
esac esac
fi fi
...@@ -8814,6 +8822,7 @@ then ...@@ -8814,6 +8822,7 @@ then
*) CCSHARED="";; *) CCSHARED="";;
esac;; esac;;
CYGWIN*) CCSHARED="-DUSE_DL_IMPORT";; CYGWIN*) CCSHARED="-DUSE_DL_IMPORT";;
atheos*) CCSHARED="-fPIC";;
esac esac
fi fi
echo "$as_me:$LINENO: result: $CCSHARED" >&5 echo "$as_me:$LINENO: result: $CCSHARED" >&5
...@@ -8883,6 +8892,23 @@ fi ...@@ -8883,6 +8892,23 @@ fi
echo "$as_me:$LINENO: result: $CFLAGSFORSHARED" >&5 echo "$as_me:$LINENO: result: $CFLAGSFORSHARED" >&5
echo "${ECHO_T}$CFLAGSFORSHARED" >&6 echo "${ECHO_T}$CFLAGSFORSHARED" >&6
# SHLIBS are libraries (except -lc and -lm) to link to the python shared
# library (with --enable-shared).
# For platforms on which shared libraries are not allowed to have unresolved
# symbols, this must be set to $(LIBS) (expanded by make).
echo "$as_me:$LINENO: checking SHLIBS" >&5
echo $ECHO_N "checking SHLIBS... $ECHO_C" >&6
case "$ac_sys_system" in
atheos*)
SHLIBS='$(LIBS)';;
*)
SHLIBS='';;
esac
echo "$as_me:$LINENO: result: $SHLIBS" >&5
echo "${ECHO_T}$SHLIBS" >&6
# checks for libraries # checks for libraries
echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
...@@ -9870,6 +9896,120 @@ _ACEOF ...@@ -9870,6 +9896,120 @@ _ACEOF
THREADOBJ="Python/thread.o" THREADOBJ="Python/thread.o"
else else
if test "${ac_cv_header_atheos_threads_h+set}" = set; then
echo "$as_me:$LINENO: checking for atheos/threads.h" >&5
echo $ECHO_N "checking for atheos/threads.h... $ECHO_C" >&6
if test "${ac_cv_header_atheos_threads_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
echo "$as_me:$LINENO: result: $ac_cv_header_atheos_threads_h" >&5
echo "${ECHO_T}$ac_cv_header_atheos_threads_h" >&6
else
# Is the header compilable?
echo "$as_me:$LINENO: checking atheos/threads.h usability" >&5
echo $ECHO_N "checking atheos/threads.h usability... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
#include "confdefs.h"
$ac_includes_default
#include <atheos/threads.h>
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_header_compiler=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
ac_header_compiler=no
fi
rm -f conftest.$ac_objext conftest.$ac_ext
echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
echo "${ECHO_T}$ac_header_compiler" >&6
# Is the header present?
echo "$as_me:$LINENO: checking atheos/threads.h presence" >&5
echo $ECHO_N "checking atheos/threads.h presence... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
#include "confdefs.h"
#include <atheos/threads.h>
_ACEOF
if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
egrep -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
ac_header_preproc=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
ac_header_preproc=no
fi
rm -f conftest.err conftest.$ac_ext
echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
echo "${ECHO_T}$ac_header_preproc" >&6
# So? What about this header?
case $ac_header_compiler:$ac_header_preproc in
yes:no )
{ echo "$as_me:$LINENO: WARNING: atheos/threads.h: accepted by the compiler, rejected by the preprocessor!" >&5
echo "$as_me: WARNING: atheos/threads.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
{ echo "$as_me:$LINENO: WARNING: atheos/threads.h: proceeding with the preprocessor's result" >&5
echo "$as_me: WARNING: atheos/threads.h: proceeding with the preprocessor's result" >&2;};;
no:yes )
{ echo "$as_me:$LINENO: WARNING: atheos/threads.h: present but cannot be compiled" >&5
echo "$as_me: WARNING: atheos/threads.h: present but cannot be compiled" >&2;}
{ echo "$as_me:$LINENO: WARNING: atheos/threads.h: check for missing prerequisite headers?" >&5
echo "$as_me: WARNING: atheos/threads.h: check for missing prerequisite headers?" >&2;}
{ echo "$as_me:$LINENO: WARNING: atheos/threads.h: proceeding with the preprocessor's result" >&5
echo "$as_me: WARNING: atheos/threads.h: proceeding with the preprocessor's result" >&2;};;
esac
echo "$as_me:$LINENO: checking for atheos/threads.h" >&5
echo $ECHO_N "checking for atheos/threads.h... $ECHO_C" >&6
if test "${ac_cv_header_atheos_threads_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_header_atheos_threads_h=$ac_header_preproc
fi
echo "$as_me:$LINENO: result: $ac_cv_header_atheos_threads_h" >&5
echo "${ECHO_T}$ac_cv_header_atheos_threads_h" >&6
fi
if test $ac_cv_header_atheos_threads_h = yes; then
cat >>confdefs.h <<\_ACEOF
#define WITH_THREAD 1
_ACEOF
cat >>confdefs.h <<\_ACEOF
#define ATHEOS_THREADS 1
_ACEOF
THREADOBJ="Python/thread.o"
else
if test "${ac_cv_header_kernel_OS_h+set}" = set; then if test "${ac_cv_header_kernel_OS_h+set}" = set; then
echo "$as_me:$LINENO: checking for kernel/OS.h" >&5 echo "$as_me:$LINENO: checking for kernel/OS.h" >&5
echo $ECHO_N "checking for kernel/OS.h... $ECHO_C" >&6 echo $ECHO_N "checking for kernel/OS.h... $ECHO_C" >&6
...@@ -10324,6 +10464,9 @@ fi ...@@ -10324,6 +10464,9 @@ fi
fi fi
fi
fi fi
fi fi
...@@ -11192,6 +11335,7 @@ then ...@@ -11192,6 +11335,7 @@ then
BeOS*) DYNLOADFILE="dynload_beos.o";; BeOS*) DYNLOADFILE="dynload_beos.o";;
hp*|HP*) DYNLOADFILE="dynload_hpux.o";; hp*|HP*) DYNLOADFILE="dynload_hpux.o";;
Darwin/*) DYNLOADFILE="dynload_next.o";; Darwin/*) DYNLOADFILE="dynload_next.o";;
atheos*) DYNLOADFILE="dynload_atheos.o";;
*) *)
# use dynload_shlib.c and dlopen() if we have it; otherwise stub # use dynload_shlib.c and dlopen() if we have it; otherwise stub
# out any dynamic loading # out any dynamic loading
...@@ -16394,6 +16538,7 @@ s,@BLDSHARED@,$BLDSHARED,;t t ...@@ -16394,6 +16538,7 @@ s,@BLDSHARED@,$BLDSHARED,;t t
s,@CCSHARED@,$CCSHARED,;t t s,@CCSHARED@,$CCSHARED,;t t
s,@LINKFORSHARED@,$LINKFORSHARED,;t t s,@LINKFORSHARED@,$LINKFORSHARED,;t t
s,@CFLAGSFORSHARED@,$CFLAGSFORSHARED,;t t s,@CFLAGSFORSHARED@,$CFLAGSFORSHARED,;t t
s,@SHLIBS@,$SHLIBS,;t t
s,@USE_SIGNAL_MODULE@,$USE_SIGNAL_MODULE,;t t s,@USE_SIGNAL_MODULE@,$USE_SIGNAL_MODULE,;t t
s,@SIGNAL_OBJS@,$SIGNAL_OBJS,;t t s,@SIGNAL_OBJS@,$SIGNAL_OBJS,;t t
s,@USE_THREAD_MODULE@,$USE_THREAD_MODULE,;t t s,@USE_THREAD_MODULE@,$USE_THREAD_MODULE,;t t
......
...@@ -81,6 +81,7 @@ then ...@@ -81,6 +81,7 @@ then
case $MACHDEP in case $MACHDEP in
cygwin*) MACHDEP="cygwin";; cygwin*) MACHDEP="cygwin";;
darwin*) MACHDEP="darwin";; darwin*) MACHDEP="darwin";;
atheos*) MACHDEP="atheos";;
'') MACHDEP="unknown";; '') MACHDEP="unknown";;
esac esac
fi fi
...@@ -328,7 +329,7 @@ AC_ARG_ENABLE(shared, ...@@ -328,7 +329,7 @@ AC_ARG_ENABLE(shared,
if test -z "$enable_shared" if test -z "$enable_shared"
then then
case $ac_sys_system in case $ac_sys_system in
CYGWIN*) CYGWIN* | atheos*)
enable_shared="yes";; enable_shared="yes";;
*) *)
enable_shared="no";; enable_shared="no";;
...@@ -385,6 +386,11 @@ if test $enable_shared = "yes"; then ...@@ -385,6 +386,11 @@ if test $enable_shared = "yes"; then
BLDLIBRARY='-rpath $(LIBDIR) -L. -lpython$(VERSION)' BLDLIBRARY='-rpath $(LIBDIR) -L. -lpython$(VERSION)'
RUNSHARED=LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH RUNSHARED=LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
;; ;;
atheos*)
LDLIBRARY='libpython$(VERSION).so'
BLDLIBRARY='-L. -lpython$(VERSION)'
RUNSHARED=DLL_PATH=`pwd`:${DLL_PATH:-/atheos/sys/libs:/atheos/autolnk/lib}
;;
esac esac
# DG/UX requires some fancy ld contortions to produce a .so from an .a # DG/UX requires some fancy ld contortions to produce a .so from an .a
case $MACHDEP in case $MACHDEP in
...@@ -417,6 +423,7 @@ if test -z "$LN" ; then ...@@ -417,6 +423,7 @@ if test -z "$LN" ; then
case $ac_sys_system in case $ac_sys_system in
BeOS*) LN="ln -s";; BeOS*) LN="ln -s";;
CYGWIN*) LN="ln -s";; CYGWIN*) LN="ln -s";;
atheos*) LN="ln -s";;
*) LN=ln;; *) LN=ln;;
esac esac
fi fi
...@@ -906,6 +913,7 @@ then ...@@ -906,6 +913,7 @@ then
SCO_SV*) LDSHARED="cc -G -KPIC -Ki486 -belf -Wl,-Bexport";; SCO_SV*) LDSHARED="cc -G -KPIC -Ki486 -belf -Wl,-Bexport";;
Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";; Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";;
CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";; CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";;
atheos*) LDSHARED="gcc -shared";;
*) LDSHARED="ld";; *) LDSHARED="ld";;
esac esac
fi fi
...@@ -939,6 +947,7 @@ then ...@@ -939,6 +947,7 @@ then
*) CCSHARED="";; *) CCSHARED="";;
esac;; esac;;
CYGWIN*) CCSHARED="-DUSE_DL_IMPORT";; CYGWIN*) CCSHARED="-DUSE_DL_IMPORT";;
atheos*) CCSHARED="-fPIC";;
esac esac
fi fi
AC_MSG_RESULT($CCSHARED) AC_MSG_RESULT($CCSHARED)
...@@ -1003,6 +1012,21 @@ then ...@@ -1003,6 +1012,21 @@ then
fi fi
AC_MSG_RESULT($CFLAGSFORSHARED) AC_MSG_RESULT($CFLAGSFORSHARED)
# SHLIBS are libraries (except -lc and -lm) to link to the python shared
# library (with --enable-shared).
# For platforms on which shared libraries are not allowed to have unresolved
# symbols, this must be set to $(LIBS) (expanded by make).
AC_SUBST(SHLIBS)
AC_MSG_CHECKING(SHLIBS)
case "$ac_sys_system" in
atheos*)
SHLIBS='$(LIBS)';;
*)
SHLIBS='';;
esac
AC_MSG_RESULT($SHLIBS)
# checks for libraries # checks for libraries
AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV
AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX
...@@ -1177,6 +1201,10 @@ pthread_create (NULL, NULL, start_routine, NULL)], [ ...@@ -1177,6 +1201,10 @@ pthread_create (NULL, NULL, start_routine, NULL)], [
AC_CHECK_FUNC(pthread_detach, [AC_DEFINE(WITH_THREAD) AC_CHECK_FUNC(pthread_detach, [AC_DEFINE(WITH_THREAD)
posix_threads=yes posix_threads=yes
THREADOBJ="Python/thread.o"],[ THREADOBJ="Python/thread.o"],[
AC_CHECK_HEADER(atheos/threads.h, [AC_DEFINE(WITH_THREAD)
AC_DEFINE(ATHEOS_THREADS, 1,
[Define this if you have AtheOS threads.])
THREADOBJ="Python/thread.o"],[
AC_CHECK_HEADER(kernel/OS.h, [AC_DEFINE(WITH_THREAD) AC_CHECK_HEADER(kernel/OS.h, [AC_DEFINE(WITH_THREAD)
AC_DEFINE(BEOS_THREADS, 1, AC_DEFINE(BEOS_THREADS, 1,
[Define this if you have BeOS threads.]) [Define this if you have BeOS threads.])
...@@ -1202,7 +1230,7 @@ pthread_create (NULL, NULL, start_routine, NULL)], [ ...@@ -1202,7 +1230,7 @@ pthread_create (NULL, NULL, start_routine, NULL)], [
LIBS="$LIBS -lcma" LIBS="$LIBS -lcma"
THREADOBJ="Python/thread.o"],[ THREADOBJ="Python/thread.o"],[
USE_THREAD_MODULE="#"]) USE_THREAD_MODULE="#"])
])])])])])])])])])]) ])])])])])])])])])])])
if test "$posix_threads" = "yes"; then if test "$posix_threads" = "yes"; then
if test "$unistd_defines_pthreads" = "no"; then if test "$unistd_defines_pthreads" = "no"; then
...@@ -1560,6 +1588,7 @@ then ...@@ -1560,6 +1588,7 @@ then
BeOS*) DYNLOADFILE="dynload_beos.o";; BeOS*) DYNLOADFILE="dynload_beos.o";;
hp*|HP*) DYNLOADFILE="dynload_hpux.o";; hp*|HP*) DYNLOADFILE="dynload_hpux.o";;
Darwin/*) DYNLOADFILE="dynload_next.o";; Darwin/*) DYNLOADFILE="dynload_next.o";;
atheos*) DYNLOADFILE="dynload_atheos.o";;
*) *)
# use dynload_shlib.c and dlopen() if we have it; otherwise stub # use dynload_shlib.c and dlopen() if we have it; otherwise stub
# out any dynamic loading # out any dynamic loading
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
support for AIX C++ shared extension modules. */ support for AIX C++ shared extension modules. */
#undef AIX_GENUINE_CPLUSPLUS #undef AIX_GENUINE_CPLUSPLUS
/* Define this if you have AtheOS threads. */
#undef ATHEOS_THREADS
/* Define if your <unistd.h> contains bad prototypes for exec*() (as it does /* Define if your <unistd.h> contains bad prototypes for exec*() (as it does
on SGI IRIX 4.x) */ on SGI IRIX 4.x) */
#undef BAD_EXEC_PROTOTYPES #undef BAD_EXEC_PROTOTYPES
......
...@@ -214,6 +214,8 @@ class PyBuildExt(build_ext): ...@@ -214,6 +214,8 @@ class PyBuildExt(build_ext):
platform = 'beos' platform = 'beos'
elif platform[:6] == 'darwin': elif platform[:6] == 'darwin':
platform = 'darwin' platform = 'darwin'
elif platform[:6] == 'atheos':
platform = 'atheos'
return platform return platform
...@@ -242,6 +244,13 @@ class PyBuildExt(build_ext): ...@@ -242,6 +244,13 @@ class PyBuildExt(build_ext):
platform = self.get_platform() platform = self.get_platform()
(srcdir,) = sysconfig.get_config_vars('srcdir') (srcdir,) = sysconfig.get_config_vars('srcdir')
# Check for AtheOS which has libraries in non-standard locations
if platform == 'atheos':
lib_dirs += ['/system/libs', '/atheos/autolnk/lib']
lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep)
inc_dirs += ['/system/include', '/atheos/autolnk/include']
inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep)
# Check for MacOS X, which doesn't need libm.a at all # Check for MacOS X, which doesn't need libm.a at all
math_libs = ['m'] math_libs = ['m']
if platform in ['darwin', 'beos']: if platform in ['darwin', 'beos']:
...@@ -323,6 +332,7 @@ class PyBuildExt(build_ext): ...@@ -323,6 +332,7 @@ class PyBuildExt(build_ext):
exts.append( Extension('cPickle', ['cPickle.c']) ) exts.append( Extension('cPickle', ['cPickle.c']) )
# Memory-mapped files (also works on Win32). # Memory-mapped files (also works on Win32).
if platform not in ['atheos']:
exts.append( Extension('mmap', ['mmapmodule.c']) ) exts.append( Extension('mmap', ['mmapmodule.c']) )
# Lance Ellinghaus's modules: # Lance Ellinghaus's modules:
...@@ -479,10 +489,11 @@ class PyBuildExt(build_ext): ...@@ -479,10 +489,11 @@ class PyBuildExt(build_ext):
# Steen Lumholt's termios module # Steen Lumholt's termios module
exts.append( Extension('termios', ['termios.c']) ) exts.append( Extension('termios', ['termios.c']) )
# Jeremy Hylton's rlimit interface # Jeremy Hylton's rlimit interface
if platform not in ['atheos']:
exts.append( Extension('resource', ['resource.c']) ) exts.append( Extension('resource', ['resource.c']) )
# Sun yellow pages. Some systems have the functions in libc. # Sun yellow pages. Some systems have the functions in libc.
if platform not in ['cygwin']: if platform not in ['cygwin', 'atheos']:
if (self.compiler.find_library_file(lib_dirs, 'nsl')): if (self.compiler.find_library_file(lib_dirs, 'nsl')):
libs = ['nsl'] libs = ['nsl']
else: else:
...@@ -593,7 +604,7 @@ class PyBuildExt(build_ext): ...@@ -593,7 +604,7 @@ class PyBuildExt(build_ext):
# Dynamic loading module # Dynamic loading module
dl_inc = find_file('dlfcn.h', [], inc_dirs) dl_inc = find_file('dlfcn.h', [], inc_dirs)
if dl_inc is not None: if (dl_inc is not None) and (platform not in ['atheos']):
exts.append( Extension('dl', ['dlmodule.c']) ) exts.append( Extension('dl', ['dlmodule.c']) )
# Platform-specific libraries # Platform-specific libraries
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment