/* Module configuration */

/* This file contains the table of built-in modules.
   See init_builtin() in import.c. */

#include "Python.h"

extern PyObject* PyInit_array(void);
#ifndef MS_WINI64
extern PyObject* PyInit_audioop(void);
#endif
extern PyObject* PyInit_binascii(void);
extern PyObject* PyInit_cmath(void);
extern PyObject* PyInit_errno(void);
extern PyObject* PyInit_gc(void);
extern PyObject* PyInit_math(void);
extern PyObject* PyInit__md5(void);
extern PyObject* PyInit_nt(void);
extern PyObject* PyInit_operator(void);
extern PyObject* PyInit_signal(void);
extern PyObject* PyInit__sha1(void);
extern PyObject* PyInit__sha256(void);
extern PyObject* PyInit__sha512(void);
extern PyObject* PyInit_time(void);
extern PyObject* PyInit__thread(void);
#ifdef WIN32
extern PyObject* PyInit_msvcrt(void);
extern PyObject* PyInit__locale(void);
#endif
extern PyObject* PyInit__codecs(void);
extern PyObject* PyInit__weakref(void);
extern PyObject* PyInit_xxsubtype(void);
extern PyObject* PyInit_zipimport(void);
extern PyObject* PyInit__random(void);
extern PyObject* PyInit_itertools(void);
extern PyObject* PyInit__collections(void);
extern PyObject* PyInit__heapq(void);
extern PyObject* PyInit__bisect(void);
extern PyObject* PyInit__symtable(void);
extern PyObject* PyInit_mmap(void);
extern PyObject* PyInit__csv(void);
extern PyObject* PyInit__sre(void);
extern PyObject* PyInit_parser(void);
extern PyObject* PyInit_winreg(void);
extern PyObject* PyInit__struct(void);
extern PyObject* PyInit_datetime(void);
extern PyObject* PyInit__functools(void);
extern PyObject* PyInit__json(void);
extern PyObject* PyInit_zlib(void);

extern PyObject* PyInit__multibytecodec(void);
extern PyObject* PyInit__codecs_cn(void);
extern PyObject* PyInit__codecs_hk(void);
extern PyObject* PyInit__codecs_iso2022(void);
extern PyObject* PyInit__codecs_jp(void);
extern PyObject* PyInit__codecs_kr(void);
extern PyObject* PyInit__codecs_tw(void);
extern PyObject* PyInit__subprocess(void);
extern PyObject* PyInit__lsprof(void);
extern PyObject* PyInit__ast(void);
extern PyObject* PyInit__fileio(void);
extern PyObject* PyInit__bytesio(void);
extern PyObject* PyInit__stringio(void);
extern PyObject* PyInit__pickle(void);
extern PyObject* PyInit_atexit(void);
extern PyObject* _PyWarnings_Init(void);

/* tools/freeze/makeconfig.py marker for additional "extern" */
/* -- ADDMODULE MARKER 1 -- */

extern PyObject* PyMarshal_Init(void);
extern PyObject* PyInit_imp(void);

struct _inittab _PyImport_Inittab[] = {

        {"array", PyInit_array},
	{"_ast", PyInit__ast},
#ifdef MS_WINDOWS
#ifndef MS_WINI64
        {"audioop", PyInit_audioop},
#endif
#endif
        {"binascii", PyInit_binascii},
        {"cmath", PyInit_cmath},
        {"errno", PyInit_errno},
        {"gc", PyInit_gc},
        {"math", PyInit_math},
        {"nt", PyInit_nt}, /* Use the NT os functions, not posix */
        {"operator", PyInit_operator},
        {"signal", PyInit_signal},
        {"_md5", PyInit__md5},
        {"_sha1", PyInit__sha1},
        {"_sha256", PyInit__sha256},
        {"_sha512", PyInit__sha512},
        {"time", PyInit_time},
#ifdef WITH_THREAD
        {"_thread", PyInit__thread},
#endif
#ifdef WIN32
        {"msvcrt", PyInit_msvcrt},
        {"_locale", PyInit__locale},
#endif
	/* XXX Should _subprocess go in a WIN32 block?  not WIN64? */
	{"_subprocess", PyInit__subprocess},

        {"_codecs", PyInit__codecs},
	{"_weakref", PyInit__weakref},
	{"_random", PyInit__random},
        {"_bisect", PyInit__bisect},
        {"_heapq", PyInit__heapq},
	{"_lsprof", PyInit__lsprof},
	{"itertools", PyInit_itertools},
        {"_collections", PyInit__collections},
	{"_symtable", PyInit__symtable},
	{"mmap", PyInit_mmap},
	{"_csv", PyInit__csv},
	{"_sre", PyInit__sre},
	{"parser", PyInit_parser},
	{"winreg", PyInit_winreg},
	{"_struct", PyInit__struct},
	{"datetime", PyInit_datetime},
	{"_functools", PyInit__functools},
	{"_json", PyInit__json},

	{"xxsubtype", PyInit_xxsubtype},
	{"zipimport", PyInit_zipimport},
	{"zlib", PyInit_zlib},
	
	/* CJK codecs */
	{"_multibytecodec", PyInit__multibytecodec},
	{"_codecs_cn", PyInit__codecs_cn},
	{"_codecs_hk", PyInit__codecs_hk},
	{"_codecs_iso2022", PyInit__codecs_iso2022},
	{"_codecs_jp", PyInit__codecs_jp},
	{"_codecs_kr", PyInit__codecs_kr},
	{"_codecs_tw", PyInit__codecs_tw},

/* tools/freeze/makeconfig.py marker for additional "_inittab" entries */
/* -- ADDMODULE MARKER 2 -- */

        /* This module "lives in" with marshal.c */
        {"marshal", PyMarshal_Init},

        /* This lives it with import.c */
        {"imp", PyInit_imp},

        /* These entries are here for sys.builtin_module_names */
        {"__main__", NULL},
        {"builtins", NULL},
        {"sys", NULL},
        {"_warnings", _PyWarnings_Init},

        {"_fileio", PyInit__fileio},
        {"_bytesio", PyInit__bytesio},
        {"_stringio", PyInit__stringio},
        {"_pickle", PyInit__pickle},
        {"atexit", PyInit_atexit},

        /* Sentinel */
        {0, 0}
};
