Patch #488073: AtheOS port.

This commit is contained in:
Martin v. Löwis 2002-06-11 06:22:31 +00:00
parent 7981ce576c
commit f90ae20354
23 changed files with 1782 additions and 17 deletions

View File

@ -178,9 +178,9 @@ class build_ext (Command):
if os.name == 'os2':
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
if sys.platform[:6] == 'cygwin':
if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos':
if string.find(sys.executable, sys.exec_prefix) != -1:
# building third party extensions
self.library_dirs.append(os.path.join(sys.prefix, "lib",
@ -656,6 +656,22 @@ class build_ext (Command):
# don't extend ext.libraries, it may be shared with other
# extensions, it is a reference to the original list
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:
return ext.libraries

945
Lib/plat-atheos/IN.py Normal file
View File

@ -0,0 +1,945 @@
# 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 \

143
Lib/plat-atheos/TYPES.py Normal file
View File

@ -0,0 +1,143 @@
# 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))

3
Lib/plat-atheos/regen Normal file
View File

@ -0,0 +1,3 @@
#! /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

View File

@ -721,6 +721,34 @@ _expectations = {
test_zipfile
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:

View File

@ -17,6 +17,9 @@ except AttributeError:
else:
start_len = "qq"
if sys.platform.startswith('atheos'):
start_len = "qq"
if sys.platform in ('netbsd1', 'Darwin1.2', 'darwin',
'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
'bsdos2', 'bsdos3', 'bsdos4',

View File

@ -1,3 +1,4 @@
import sys
import os
from array import array
@ -88,7 +89,11 @@ f.close()
if not f.closed:
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)
try:
method()

View File

@ -12,7 +12,7 @@ import os, StringIO
import sys
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 +
"too many Unix assumptions")

View File

@ -139,7 +139,13 @@ class StatAttributeTests(unittest.TestCase):
return
import statvfs
try:
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
self.assertEquals(result.f_bfree, result[statvfs.F_BFREE])

View File

@ -14,11 +14,12 @@ from test_support import TestSkipped
def main():
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
# to avoid mixing "posix" fork & exec with native threads, and
# 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:
from os import popen
except ImportError:

View File

@ -146,6 +146,7 @@ LIBS= @LIBS@
LIBM= @LIBM@
LIBC= @LIBC@
SYSLIBS= $(LIBM) $(LIBC)
SHLIBS= @SHLIBS@
MAINOBJ= @MAINOBJ@
THREADOBJ= @THREADOBJ@
@ -341,7 +342,7 @@ $(LIBRARY): $(LIBRARY_OBJS)
$(RANLIB) $@
libpython$(VERSION).so: $(LIBRARY_OBJS)
$(LDSHARED) -o $@ $(LIBRARY_OBJS) $(LIBC) $(LIBM)
$(LDSHARED) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM)
libpython$(VERSION).sl: $(LIBRARY_OBJS)
$(LDSHARED) -o $@ $(LIBRARY_OBJS) $(LIBC) $(LIBM)

View File

@ -78,6 +78,7 @@ Mike Carlton
Luke Kenneth Casson Leighton
Donn Cave
Per Cederqvist
Octavian Cerna
Jeffrey Chang
Brad Chapman
Greg Chapman

68
Misc/AtheOS-NOTES Normal file
View File

@ -0,0 +1,68 @@
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>

View File

@ -311,6 +311,8 @@ C API
New platforms
- AtheOS is now supported.
- GNU/Hurd is now supported.
Tests

View File

@ -17,7 +17,9 @@ static PyObject *crypt_crypt(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "ss:crypt", &word, &salt)) {
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));
}

47
Python/dynload_atheos.c Normal file
View File

@ -0,0 +1,47 @@
/* 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;
}

View File

@ -133,6 +133,10 @@ void PyThread_init_thread(void)
#include "thread_plan9.h"
#endif
#ifdef ATHEOS_THREADS
#include "thread_atheos.h"
#endif
/*
#ifdef FOOBAR_THREADS
#include "thread_foobar.h"

300
Python/thread_atheos.h Normal file
View File

@ -0,0 +1,300 @@
/* 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
}

View File

@ -50,6 +50,8 @@ except KeyError:
try:
if sys.platform.find("beos") == 0:
searchdirs=os.environ['BEINCLUDES'].split(';')
elif sys.platform.startswith("atheos"):
searchdirs=os.environ['C_INCLUDE_PATH'].split(':')
else:
raise KeyError
except KeyError:

149
configure vendored
View File

@ -1,5 +1,5 @@
#! /bin/sh
# From configure.in Revision: 1.321 .
# From configure.in Revision: 1.322 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.53.
#
@ -1293,6 +1293,7 @@ then
case $MACHDEP in
cygwin*) MACHDEP="cygwin";;
darwin*) MACHDEP="darwin";;
atheos*) MACHDEP="atheos";;
'') MACHDEP="unknown";;
esac
fi
@ -3072,7 +3073,7 @@ fi;
if test -z "$enable_shared"
then
case $ac_sys_system in
CYGWIN*)
CYGWIN* | atheos*)
enable_shared="yes";;
*)
enable_shared="no";;
@ -3131,6 +3132,11 @@ if test $enable_shared = "yes"; then
BLDLIBRARY='-rpath $(LIBDIR) -L. -lpython$(VERSION)'
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
# DG/UX requires some fancy ld contortions to produce a .so from an .a
case $MACHDEP in
@ -3384,6 +3390,7 @@ if test -z "$LN" ; then
case $ac_sys_system in
BeOS*) LN="ln -s";;
CYGWIN*) LN="ln -s";;
atheos*) LN="ln -s";;
*) LN=ln;;
esac
fi
@ -8779,6 +8786,7 @@ then
SCO_SV*) LDSHARED="cc -G -KPIC -Ki486 -belf -Wl,-Bexport";;
Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";;
CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";;
atheos*) LDSHARED="gcc -shared";;
*) LDSHARED="ld";;
esac
fi
@ -8814,6 +8822,7 @@ then
*) CCSHARED="";;
esac;;
CYGWIN*) CCSHARED="-DUSE_DL_IMPORT";;
atheos*) CCSHARED="-fPIC";;
esac
fi
echo "$as_me:$LINENO: result: $CCSHARED" >&5
@ -8883,6 +8892,23 @@ fi
echo "$as_me:$LINENO: result: $CFLAGSFORSHARED" >&5
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
echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
@ -9870,6 +9896,120 @@ _ACEOF
THREADOBJ="Python/thread.o"
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
echo "$as_me:$LINENO: checking for kernel/OS.h" >&5
echo $ECHO_N "checking for kernel/OS.h... $ECHO_C" >&6
@ -10324,6 +10464,9 @@ fi
fi
fi
fi
fi
@ -11192,6 +11335,7 @@ then
BeOS*) DYNLOADFILE="dynload_beos.o";;
hp*|HP*) DYNLOADFILE="dynload_hpux.o";;
Darwin/*) DYNLOADFILE="dynload_next.o";;
atheos*) DYNLOADFILE="dynload_atheos.o";;
*)
# use dynload_shlib.c and dlopen() if we have it; otherwise stub
# out any dynamic loading
@ -16394,6 +16538,7 @@ s,@BLDSHARED@,$BLDSHARED,;t t
s,@CCSHARED@,$CCSHARED,;t t
s,@LINKFORSHARED@,$LINKFORSHARED,;t t
s,@CFLAGSFORSHARED@,$CFLAGSFORSHARED,;t t
s,@SHLIBS@,$SHLIBS,;t t
s,@USE_SIGNAL_MODULE@,$USE_SIGNAL_MODULE,;t t
s,@SIGNAL_OBJS@,$SIGNAL_OBJS,;t t
s,@USE_THREAD_MODULE@,$USE_THREAD_MODULE,;t t

View File

@ -81,6 +81,7 @@ then
case $MACHDEP in
cygwin*) MACHDEP="cygwin";;
darwin*) MACHDEP="darwin";;
atheos*) MACHDEP="atheos";;
'') MACHDEP="unknown";;
esac
fi
@ -328,7 +329,7 @@ AC_ARG_ENABLE(shared,
if test -z "$enable_shared"
then
case $ac_sys_system in
CYGWIN*)
CYGWIN* | atheos*)
enable_shared="yes";;
*)
enable_shared="no";;
@ -385,6 +386,11 @@ if test $enable_shared = "yes"; then
BLDLIBRARY='-rpath $(LIBDIR) -L. -lpython$(VERSION)'
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
# DG/UX requires some fancy ld contortions to produce a .so from an .a
case $MACHDEP in
@ -417,6 +423,7 @@ if test -z "$LN" ; then
case $ac_sys_system in
BeOS*) LN="ln -s";;
CYGWIN*) LN="ln -s";;
atheos*) LN="ln -s";;
*) LN=ln;;
esac
fi
@ -906,6 +913,7 @@ then
SCO_SV*) LDSHARED="cc -G -KPIC -Ki486 -belf -Wl,-Bexport";;
Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";;
CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";;
atheos*) LDSHARED="gcc -shared";;
*) LDSHARED="ld";;
esac
fi
@ -939,6 +947,7 @@ then
*) CCSHARED="";;
esac;;
CYGWIN*) CCSHARED="-DUSE_DL_IMPORT";;
atheos*) CCSHARED="-fPIC";;
esac
fi
AC_MSG_RESULT($CCSHARED)
@ -1003,6 +1012,21 @@ then
fi
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
AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV
AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX
@ -1177,6 +1201,10 @@ pthread_create (NULL, NULL, start_routine, NULL)], [
AC_CHECK_FUNC(pthread_detach, [AC_DEFINE(WITH_THREAD)
posix_threads=yes
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_DEFINE(BEOS_THREADS, 1,
[Define this if you have BeOS threads.])
@ -1202,7 +1230,7 @@ pthread_create (NULL, NULL, start_routine, NULL)], [
LIBS="$LIBS -lcma"
THREADOBJ="Python/thread.o"],[
USE_THREAD_MODULE="#"])
])])])])])])])])])])
])])])])])])])])])])])
if test "$posix_threads" = "yes"; then
if test "$unistd_defines_pthreads" = "no"; then
@ -1560,6 +1588,7 @@ then
BeOS*) DYNLOADFILE="dynload_beos.o";;
hp*|HP*) DYNLOADFILE="dynload_hpux.o";;
Darwin/*) DYNLOADFILE="dynload_next.o";;
atheos*) DYNLOADFILE="dynload_atheos.o";;
*)
# use dynload_shlib.c and dlopen() if we have it; otherwise stub
# out any dynamic loading

View File

@ -4,6 +4,9 @@
support for AIX C++ shared extension modules. */
#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
on SGI IRIX 4.x) */
#undef BAD_EXEC_PROTOTYPES

View File

@ -214,6 +214,8 @@ class PyBuildExt(build_ext):
platform = 'beos'
elif platform[:6] == 'darwin':
platform = 'darwin'
elif platform[:6] == 'atheos':
platform = 'atheos'
return platform
@ -242,6 +244,13 @@ class PyBuildExt(build_ext):
platform = self.get_platform()
(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
math_libs = ['m']
if platform in ['darwin', 'beos']:
@ -323,6 +332,7 @@ class PyBuildExt(build_ext):
exts.append( Extension('cPickle', ['cPickle.c']) )
# Memory-mapped files (also works on Win32).
if platform not in ['atheos']:
exts.append( Extension('mmap', ['mmapmodule.c']) )
# Lance Ellinghaus's modules:
@ -479,10 +489,11 @@ class PyBuildExt(build_ext):
# Steen Lumholt's termios module
exts.append( Extension('termios', ['termios.c']) )
# Jeremy Hylton's rlimit interface
if platform not in ['atheos']:
exts.append( Extension('resource', ['resource.c']) )
# 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')):
libs = ['nsl']
else:
@ -593,7 +604,7 @@ class PyBuildExt(build_ext):
# Dynamic loading module
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']) )
# Platform-specific libraries