summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2018-12-23 17:26:56 -0500
committermidipix <writeonce@midipix.org>2018-12-23 20:31:21 -0500
commitfeb6bdda2186ec0b0d1134b2da13732f35705557 (patch)
treefb45b57c6414308c132663cadeab3afa3f452a79
parent23670adefe79a809600afe9d6ba4e1266df59181 (diff)
downloadsbpython3-feb6bdda2186ec0b0d1134b2da13732f35705557.tar.bz2
sbpython3-feb6bdda2186ec0b0d1134b2da13732f35705557.tar.xz
project: support variant-specific header-, source-, and extension lists.
-rw-r--r--config/linux/config.mk4
-rw-r--r--config/midipix/config.mk4
-rw-r--r--project/common.mk170
-rw-r--r--project/extras.mk1
-rw-r--r--project/headers.mk106
-rw-r--r--project/pycompile.mk1
-rw-r--r--project/pyexts.c182
-rw-r--r--project/pyexts.mk1927
-rw-r--r--project/variants/3.6.3/common.mk167
-rw-r--r--project/variants/3.6.3/headers.mk103
-rw-r--r--project/variants/3.6.3/linkage/inittab.h (renamed from profiles/linkage/inittab.h)0
-rw-r--r--project/variants/3.6.3/linkage/pycompile.h (renamed from profiles/linkage/pycompile.h)0
-rw-r--r--project/variants/3.6.3/linkage/static.h (renamed from profiles/linkage/static.h)0
-rw-r--r--project/variants/3.6.3/pyexts.h194
-rw-r--r--project/variants/3.6.3/pyexts.mk1924
-rw-r--r--project/variants/3.6.3/subsets.mk (renamed from profiles/pyexts/subsets.mk)0
16 files changed, 2406 insertions, 2377 deletions
diff --git a/config/linux/config.mk b/config/linux/config.mk
index 41d2d06..b8a5f1f 100644
--- a/config/linux/config.mk
+++ b/config/linux/config.mk
@@ -13,7 +13,9 @@ DYNLOAD_SRCS = \
# extensions: desired subsets
-include $(PROJECT_DIR)/profiles/pyexts/subsets.mk
+ifneq ($(PYTHON_MAJOR),)
+include $(PROJECT_DIR)/project/variants/$(PYTHON_MAJOR).$(PYTHON_MINOR).$(PYTHON_MICRO)/subsets.mk
+endif
PYEXT_SHARED = \
$(PYEXT_SUBSET_SHARED_ANYOS_CORE) \
diff --git a/config/midipix/config.mk b/config/midipix/config.mk
index e9c672d..45ec0e5 100644
--- a/config/midipix/config.mk
+++ b/config/midipix/config.mk
@@ -13,7 +13,9 @@ DYNLOAD_SRCS = \
# extensions: desired subsets
-include $(PROJECT_DIR)/profiles/pyexts/subsets.mk
+ifneq ($(PYTHON_MAJOR),)
+include $(PROJECT_DIR)/project/variants/$(PYTHON_MAJOR).$(PYTHON_MINOR).$(PYTHON_MICRO)/subsets.mk
+endif
PYEXT_SHARED = \
$(PYEXT_SUBSET_SHARED_ANYOS_CORE) \
diff --git a/project/common.mk b/project/common.mk
index b68c998..8a8255a 100644
--- a/project/common.mk
+++ b/project/common.mk
@@ -1,167 +1,3 @@
-core/%.lo: CFLAGS_SHARED += -DPy_BUILD_CORE
-core/%.o: CFLAGS_STATIC += -DPy_BUILD_CORE
-
-core/Modules/config.lo: build/config.c $(ALL_HEADERS) host.tag tree.tag config.tag
- $(CC) -c -o $@ $< $(CFLAGS_SHARED)
-
-core/Modules/config.o: build/config.c $(ALL_HEADERS) host.tag tree.tag config.tag
- $(CC) -c -o $@ $< $(CFLAGS_STATIC)
-
-core/%.lo: $(SOURCE_DIR)/%.c $(ALL_HEADERS) host.tag tree.tag config.tag
- $(CC) -c -o $@ $< $(CFLAGS_SHARED)
-
-core/%.o: $(SOURCE_DIR)/%.c $(ALL_HEADERS) host.tag tree.tag config.tag
- $(CC) -c -o $@ $< $(CFLAGS_STATIC)
-
-
-MODULE_SRCS = \
- core/Modules/_codecsmodule.c \
- core/Modules/_collectionsmodule.c \
- core/Modules/_functoolsmodule.c \
- core/Modules/_localemodule.c \
- core/Modules/_operator.c \
- core/Modules/_sre.c \
- core/Modules/_stat.c \
- core/Modules/_threadmodule.c \
- core/Modules/_tracemalloc.c \
- core/Modules/_weakref.c \
- core/Modules/atexitmodule.c \
- core/Modules/config.c \
- core/Modules/errnomodule.c \
- core/Modules/faulthandler.c \
- core/Modules/gcmodule.c \
- core/Modules/getbuildinfo.c \
- core/Modules/getpath.c \
- core/Modules/hashtable.c \
- core/Modules/itertoolsmodule.c \
- core/Modules/main.c \
- core/Modules/posixmodule.c \
- core/Modules/pwdmodule.c \
- core/Modules/signalmodule.c \
- core/Modules/symtablemodule.c \
- core/Modules/timemodule.c \
- core/Modules/xxsubtype.c \
- core/Modules/zipimport.c \
- core/Modules/_io/_iomodule.c \
- core/Modules/_io/bufferedio.c \
- core/Modules/_io/bytesio.c \
- core/Modules/_io/fileio.c \
- core/Modules/_io/iobase.c \
- core/Modules/_io/stringio.c \
- core/Modules/_io/textio.c \
-
-OBJECT_SRCS = \
- core/Objects/abstract.c \
- core/Objects/accu.c \
- core/Objects/boolobject.c \
- core/Objects/bytearrayobject.c \
- core/Objects/bytes_methods.c \
- core/Objects/bytesobject.c \
- core/Objects/capsule.c \
- core/Objects/cellobject.c \
- core/Objects/classobject.c \
- core/Objects/codeobject.c \
- core/Objects/complexobject.c \
- core/Objects/descrobject.c \
- core/Objects/dictobject.c \
- core/Objects/enumobject.c \
- core/Objects/exceptions.c \
- core/Objects/fileobject.c \
- core/Objects/floatobject.c \
- core/Objects/frameobject.c \
- core/Objects/funcobject.c \
- core/Objects/genobject.c \
- core/Objects/iterobject.c \
- core/Objects/listobject.c \
- core/Objects/longobject.c \
- core/Objects/memoryobject.c \
- core/Objects/methodobject.c \
- core/Objects/moduleobject.c \
- core/Objects/namespaceobject.c \
- core/Objects/object.c \
- core/Objects/obmalloc.c \
- core/Objects/odictobject.c \
- core/Objects/rangeobject.c \
- core/Objects/setobject.c \
- core/Objects/sliceobject.c \
- core/Objects/structseq.c \
- core/Objects/tupleobject.c \
- core/Objects/typeobject.c \
- core/Objects/unicodectype.c \
- core/Objects/unicodeobject.c \
- core/Objects/weakrefobject.c \
-
-PARSER_SRCS = \
- core/Parser/acceler.c \
- core/Parser/bitset.c \
- core/Parser/firstsets.c \
- core/Parser/grammar.c \
- core/Parser/grammar1.c \
- core/Parser/listnode.c \
- core/Parser/metagrammar.c \
- core/Parser/myreadline.c \
- core/Parser/node.c \
- core/Parser/parser.c \
- core/Parser/parsetok.c \
- core/Parser/pgen.c \
- core/Parser/tokenizer.c \
-
-PYTHON_SRCS = \
- core/Python/Python-ast.c \
- core/Python/_warnings.c \
- core/Python/asdl.c \
- core/Python/ast.c \
- core/Python/bltinmodule.c \
- core/Python/ceval.c \
- core/Python/codecs.c \
- core/Python/compile.c \
- core/Python/dtoa.c \
- core/Python/dynamic_annotations.c \
- core/Python/errors.c \
- core/Python/fileutils.c \
- core/Python/formatter_unicode.c \
- core/Python/frozen.c \
- core/Python/frozenmain.c \
- core/Python/future.c \
- core/Python/getargs.c \
- core/Python/getcompiler.c \
- core/Python/getcopyright.c \
- core/Python/getopt.c \
- core/Python/getplatform.c \
- core/Python/getversion.c \
- core/Python/graminit.c \
- core/Python/import.c \
- core/Python/importdl.c \
- core/Python/marshal.c \
- core/Python/modsupport.c \
- core/Python/mysnprintf.c \
- core/Python/mystrtoul.c \
- core/Python/peephole.c \
- core/Python/pyarena.c \
- core/Python/pyctype.c \
- core/Python/pyfpe.c \
- core/Python/pyhash.c \
- core/Python/pylifecycle.c \
- core/Python/pymath.c \
- core/Python/pystate.c \
- core/Python/pystrcmp.c \
- core/Python/pystrhex.c \
- core/Python/pystrtod.c \
- core/Python/pythonrun.c \
- core/Python/pytime.c \
- core/Python/random.c \
- core/Python/structmember.c \
- core/Python/symtable.c \
- core/Python/sysmodule.c \
- core/Python/thread.c \
- core/Python/traceback.c \
-
-APP_SRCS = \
- core/Programs/python.c \
-
-COMMON_SRCS = \
- $(CONFIG_SRCS) \
- $(MODULE_SRCS) \
- $(OBJECT_SRCS) \
- $(PARSER_SRCS) \
- $(PYTHON_SRCS) \
+ifneq ($(PYTHON_MAJOR),)
+include $(PROJECT_DIR)/project/variants/$(PYTHON_MAJOR).$(PYTHON_MINOR).$(PYTHON_MICRO)/common.mk
+endif
diff --git a/project/extras.mk b/project/extras.mk
index c57d93c..b60bb1b 100644
--- a/project/extras.mk
+++ b/project/extras.mk
@@ -1,5 +1,6 @@
# build info
CFLAGS_COMMON += -I$(PROJECT_DIR)/profiles
+CFLAGS_COMMON += -I$(PROJECT_DIR)/project/variants/$(PYTHON_MAJOR).$(PYTHON_MINOR).$(PYTHON_MICRO)
CFLAGS_COMMON += -I$(SOURCE_DIR)/Include
CFLAGS_CONFIG += -DPLATFORM=\"$(PYTHON_PLATFORM)\"
diff --git a/project/headers.mk b/project/headers.mk
index 67865bc..a275e50 100644
--- a/project/headers.mk
+++ b/project/headers.mk
@@ -1,103 +1,3 @@
-API_HEADERS = \
- build/pyconfig.h \
- $(SOURCE_DIR)/Include/Python-ast.h \
- $(SOURCE_DIR)/Include/Python.h \
- $(SOURCE_DIR)/Include/abstract.h \
- $(SOURCE_DIR)/Include/accu.h \
- $(SOURCE_DIR)/Include/asdl.h \
- $(SOURCE_DIR)/Include/ast.h \
- $(SOURCE_DIR)/Include/bitset.h \
- $(SOURCE_DIR)/Include/bltinmodule.h \
- $(SOURCE_DIR)/Include/boolobject.h \
- $(SOURCE_DIR)/Include/bytearrayobject.h \
- $(SOURCE_DIR)/Include/bytes_methods.h \
- $(SOURCE_DIR)/Include/bytesobject.h \
- $(SOURCE_DIR)/Include/cellobject.h \
- $(SOURCE_DIR)/Include/ceval.h \
- $(SOURCE_DIR)/Include/classobject.h \
- $(SOURCE_DIR)/Include/code.h \
- $(SOURCE_DIR)/Include/codecs.h \
- $(SOURCE_DIR)/Include/compile.h \
- $(SOURCE_DIR)/Include/complexobject.h \
- $(SOURCE_DIR)/Include/datetime.h \
- $(SOURCE_DIR)/Include/descrobject.h \
- $(SOURCE_DIR)/Include/dictobject.h \
- $(SOURCE_DIR)/Include/dtoa.h \
- $(SOURCE_DIR)/Include/dynamic_annotations.h \
- $(SOURCE_DIR)/Include/enumobject.h \
- $(SOURCE_DIR)/Include/errcode.h \
- $(SOURCE_DIR)/Include/eval.h \
- $(SOURCE_DIR)/Include/fileobject.h \
- $(SOURCE_DIR)/Include/fileutils.h \
- $(SOURCE_DIR)/Include/floatobject.h \
- $(SOURCE_DIR)/Include/frameobject.h \
- $(SOURCE_DIR)/Include/funcobject.h \
- $(SOURCE_DIR)/Include/genobject.h \
- $(SOURCE_DIR)/Include/graminit.h \
- $(SOURCE_DIR)/Include/grammar.h \
- $(SOURCE_DIR)/Include/import.h \
- $(SOURCE_DIR)/Include/intrcheck.h \
- $(SOURCE_DIR)/Include/iterobject.h \
- $(SOURCE_DIR)/Include/listobject.h \
- $(SOURCE_DIR)/Include/longintrepr.h \
- $(SOURCE_DIR)/Include/longobject.h \
- $(SOURCE_DIR)/Include/marshal.h \
- $(SOURCE_DIR)/Include/memoryobject.h \
- $(SOURCE_DIR)/Include/metagrammar.h \
- $(SOURCE_DIR)/Include/methodobject.h \
- $(SOURCE_DIR)/Include/modsupport.h \
- $(SOURCE_DIR)/Include/moduleobject.h \
- $(SOURCE_DIR)/Include/namespaceobject.h \
- $(SOURCE_DIR)/Include/node.h \
- $(SOURCE_DIR)/Include/object.h \
- $(SOURCE_DIR)/Include/objimpl.h \
- $(SOURCE_DIR)/Include/odictobject.h \
- $(SOURCE_DIR)/Include/opcode.h \
- $(SOURCE_DIR)/Include/osdefs.h \
- $(SOURCE_DIR)/Include/osmodule.h \
- $(SOURCE_DIR)/Include/parsetok.h \
- $(SOURCE_DIR)/Include/patchlevel.h \
- $(SOURCE_DIR)/Include/pgen.h \
- $(SOURCE_DIR)/Include/pgenheaders.h \
- $(SOURCE_DIR)/Include/py_curses.h \
- $(SOURCE_DIR)/Include/pyarena.h \
- $(SOURCE_DIR)/Include/pyatomic.h \
- $(SOURCE_DIR)/Include/pycapsule.h \
- $(SOURCE_DIR)/Include/pyctype.h \
- $(SOURCE_DIR)/Include/pydebug.h \
- $(SOURCE_DIR)/Include/pydtrace.h \
- $(SOURCE_DIR)/Include/pyerrors.h \
- $(SOURCE_DIR)/Include/pyexpat.h \
- $(SOURCE_DIR)/Include/pyfpe.h \
- $(SOURCE_DIR)/Include/pygetopt.h \
- $(SOURCE_DIR)/Include/pyhash.h \
- $(SOURCE_DIR)/Include/pylifecycle.h \
- $(SOURCE_DIR)/Include/pymacconfig.h \
- $(SOURCE_DIR)/Include/pymacro.h \
- $(SOURCE_DIR)/Include/pymath.h \
- $(SOURCE_DIR)/Include/pymem.h \
- $(SOURCE_DIR)/Include/pyport.h \
- $(SOURCE_DIR)/Include/pystate.h \
- $(SOURCE_DIR)/Include/pystrcmp.h \
- $(SOURCE_DIR)/Include/pystrhex.h \
- $(SOURCE_DIR)/Include/pystrtod.h \
- $(SOURCE_DIR)/Include/pythonrun.h \
- $(SOURCE_DIR)/Include/pythread.h \
- $(SOURCE_DIR)/Include/pytime.h \
- $(SOURCE_DIR)/Include/rangeobject.h \
- $(SOURCE_DIR)/Include/setobject.h \
- $(SOURCE_DIR)/Include/sliceobject.h \
- $(SOURCE_DIR)/Include/structmember.h \
- $(SOURCE_DIR)/Include/structseq.h \
- $(SOURCE_DIR)/Include/symtable.h \
- $(SOURCE_DIR)/Include/sysmodule.h \
- $(SOURCE_DIR)/Include/token.h \
- $(SOURCE_DIR)/Include/traceback.h \
- $(SOURCE_DIR)/Include/tupleobject.h \
- $(SOURCE_DIR)/Include/typeslots.h \
- $(SOURCE_DIR)/Include/ucnhash.h \
- $(SOURCE_DIR)/Include/unicodeobject.h \
- $(SOURCE_DIR)/Include/warnings.h \
- $(SOURCE_DIR)/Include/weakrefobject.h \
-
-ALL_HEADERS = $(API_HEADERS) $(INTERNAL_HEADERS)
+ifneq ($(PYTHON_MAJOR),)
+include $(PROJECT_DIR)/project/variants/$(PYTHON_MAJOR).$(PYTHON_MINOR).$(PYTHON_MICRO)/headers.mk
+endif
diff --git a/project/pycompile.mk b/project/pycompile.mk
index 8cf2ac4..d221d6c 100644
--- a/project/pycompile.mk
+++ b/project/pycompile.mk
@@ -13,6 +13,7 @@ PYCOMPILE_TAGS += $(PYCOMPILE_DIR)/config.tag
PYCOMPILE_CFLAGS += -std=c99
PYCOMPILE_CFLAGS += -I$(PYCOMPILE_DIR)/build
PYCOMPILE_CFLAGS += -I$(PROJECT_DIR)/profiles
+PYCOMPILE_CFLAGS += -I$(PROJECT_DIR)/project/variants/$(PYTHON_MAJOR).$(PYTHON_MINOR).$(PYTHON_MICRO)
PYCOMPILE_CFLAGS += -I$(SOURCE_DIR)/Include
PYCOMPILE_CFLAGS += -I$(SOURCE_DIR)/Modules/_decimal/libmpdec
PYCOMPILE_CFLAGS += -DPY_FOR_PYCOMPILE
diff --git a/project/pyexts.c b/project/pyexts.c
index 71bca45..97d1724 100644
--- a/project/pyexts.c
+++ b/project/pyexts.c
@@ -14,187 +14,7 @@
#include <stdio.h>
#include <string.h>
-
-#define PYEXT_LIST(...) (const char *[]){__VA_ARGS__,0}
-#define PYEXT_SIMPLE(name,...) {name,PYEXT_LIST(__VA_ARGS__),0,0,0,0}
-
-#define PYEXT_COMMON(name,hvar,lvar,...) {name,PYEXT_LIST(__VA_ARGS__), \
- PYEXT_LIST(hvar),0, \
- PYEXT_LIST(lvar),0}
-
-#define PYEXT_ALTSTD(name,cstd,...) {name,PYEXT_LIST(__VA_ARGS__), \
- 0,PYEXT_LIST(cstd),0,0}
-
-struct pyext_meta {
- const char * name;
- const char ** srcs;
- const char ** hdrs;
- const char ** cstd;
- const char ** vars;
- const char ** deps;
-};
-
-static const struct pyext_meta pyexts[] = {
- PYEXT_SIMPLE("_multibytecodec", "cjkcodecs/multibytecodec"),
- PYEXT_SIMPLE("_codecs_cn", "cjkcodecs/_codecs_cn"),
- PYEXT_SIMPLE("_codecs_hk", "cjkcodecs/_codecs_hk"),
- PYEXT_SIMPLE("_codecs_jp", "cjkcodecs/_codecs_jp"),
- PYEXT_SIMPLE("_codecs_kr", "cjkcodecs/_codecs_kr"),
- PYEXT_SIMPLE("_codecs_tw", "cjkcodecs/_codecs_tw"),
- PYEXT_SIMPLE("_codecs_iso2022", "cjkcodecs/_codecs_iso2022"),
-
- PYEXT_SIMPLE("_asyncio", "_asynciomodule"),
- PYEXT_SIMPLE("_bisect", "_bisectmodule"),
- PYEXT_SIMPLE("_crypt", "_cryptmodule"),
- PYEXT_SIMPLE("_csv", "_csv"),
- PYEXT_SIMPLE("_ctypes_test", "_ctypes/_ctypes_test"),
- PYEXT_SIMPLE("_datetime", "_datetimemodule"),
- PYEXT_SIMPLE("_elementtree", "_elementtree"),
- PYEXT_SIMPLE("_heapq", "_heapqmodule"),
- PYEXT_SIMPLE("_json", "_json"),
- PYEXT_SIMPLE("_md5", "md5module"),
- PYEXT_SIMPLE("_opcode", "_opcode"),
- PYEXT_SIMPLE("_pickle", "_pickle"),
- PYEXT_SIMPLE("_posixsubprocess", "_posixsubprocess"),
- PYEXT_SIMPLE("_random", "_randommodule"),
- PYEXT_SIMPLE("_sha1", "sha1module"),
- PYEXT_SIMPLE("_sha256", "sha256module"),
- PYEXT_SIMPLE("_sha3", "_sha3/sha3module"),
- PYEXT_SIMPLE("_sha512", "sha512module"),
- PYEXT_SIMPLE("_socket", "socketmodule"),
- PYEXT_SIMPLE("_struct", "_struct"),
- PYEXT_SIMPLE("_testbuffer", "_testbuffer"),
- PYEXT_SIMPLE("_testcapi", "_testcapimodule"),
- PYEXT_SIMPLE("_testimportmultiple", "_testimportmultiple"),
- PYEXT_SIMPLE("_testmultiphase", "_testmultiphase"),
-
-
-
- PYEXT_SIMPLE("array", "arraymodule"),
- PYEXT_SIMPLE("audioop", "audioop"),
- PYEXT_SIMPLE("fcntl", "fcntlmodule"),
- PYEXT_SIMPLE("grp", "grpmodule"),
- PYEXT_SIMPLE("mmap", "mmapmodule"),
- PYEXT_SIMPLE("ossaudiodev", "ossaudiodev"),
- PYEXT_SIMPLE("parser", "parsermodule"),
- PYEXT_SIMPLE("resource", "resource"),
- PYEXT_SIMPLE("select", "selectmodule"),
- PYEXT_SIMPLE("spwd", "spwdmodule"),
- PYEXT_SIMPLE("syslog", "syslogmodule"),
- PYEXT_SIMPLE("termios", "termios"),
- PYEXT_SIMPLE("unicodedata", "unicodedata"),
- PYEXT_SIMPLE("xxlimited", "xxlimited"),
-
- PYEXT_SIMPLE("_blake2",
- "_blake2/blake2module",
- "_blake2/blake2b_impl",
- "_blake2/blake2s_impl"),
-
- PYEXT_SIMPLE("_lsprof",
- "_lsprof",
- "rotatingtree"),
-
- PYEXT_SIMPLE("_multiprocessing",
- "_multiprocessing/multiprocessing",
- "_multiprocessing/semaphore"),
-
- PYEXT_SIMPLE("cmath",
- "cmathmodule",
- "_math"),
-
- PYEXT_SIMPLE("math",
- "mathmodule",
- "_math"),
-
- PYEXT_COMMON("_bz2",0,"-lbz2",
- "_bz2module"),
-
- PYEXT_COMMON("_ctypes",0,"-lffi",
- "_ctypes/_ctypes",
- "_ctypes/callbacks",
- "_ctypes/callproc",
- "_ctypes/stgdict",
- "_ctypes/cfield"),
-
- PYEXT_COMMON("_curses",
- "$(CFLAGS_NCURSES)",
- "$(LDFLAGS_NCURSES)",
- "_cursesmodule"),
-
- PYEXT_COMMON("_curses_panel",
- "$(CFLAGS_NCURSES)",
- "$(LDFLAGS_NCURSES)",
- "_curses_panel"),
-
- PYEXT_COMMON("_decimal",
- "-I$(SOURCE_DIR)/Modules/_decimal/libmpdec -DUNIVERSAL",
- 0,
- "_decimal/_decimal",
- "_decimal/libmpdec/basearith",
- "_decimal/libmpdec/constants",
- "_decimal/libmpdec/context",
- "_decimal/libmpdec/convolute",
- "_decimal/libmpdec/crt",
- "_decimal/libmpdec/difradix2",
- "_decimal/libmpdec/fnt",
- "_decimal/libmpdec/fourstep",
- "_decimal/libmpdec/io",
- "_decimal/libmpdec/memory",
- "_decimal/libmpdec/mpdecimal",
- "_decimal/libmpdec/numbertheory",
- "_decimal/libmpdec/sixstep",
- "_decimal/libmpdec/transpose"),
-
- PYEXT_COMMON("_dbm",
- "$(CFLAGS_DBM)",
- "$(LDFLAGS_DBM)",
- "_dbmmodule"),
-
- PYEXT_COMMON("_gdbm",0,"-lgdbm",
- "_gdbmmodule"),
-
- PYEXT_COMMON("_hashlib",0,"-lssl -lcrypto",
- "_hashopenssl"),
-
- PYEXT_COMMON("_lzma",0,"-llzma",
- "_lzmamodule"),
-
- PYEXT_COMMON("_sqlite3",
- "$(CFLAGS_SQLITE)",
- "$(LDFLAGS_SQLITE)",
- "_sqlite/cache",
- "_sqlite/connection",
- "_sqlite/cursor",
- "_sqlite/microprotocols",
- "_sqlite/module",
- "_sqlite/prepare_protocol",
- "_sqlite/row",
- "_sqlite/statement",
- "_sqlite/util"),
-
- PYEXT_COMMON("_ssl",0,"-lssl -lcrypto",
- "_ssl"),
-
- PYEXT_COMMON("_tkinter",
- "$(CFLAGS_TCLTK)",
- "$(LDFLAGS_TCLTK)",
- "_tkinter",
- "tkappinit"),
-
- PYEXT_COMMON("binascii",0,"-lz",
- "binascii"),
-
- PYEXT_COMMON("pyexpat",0,"-lexpat",
- "pyexpat"),
-
- PYEXT_COMMON("readline",0,"-lreadline",
- "readline"),
-
- PYEXT_COMMON("zlib",0,"-lz",
- "zlibmodule"),
-
- {0,0,0,0,0,0},
-};
+#include "pyexts.h"
static void pyext_uppercase(char * buf, const char * name)
{
diff --git a/project/pyexts.mk b/project/pyexts.mk
index 4cc0eab..b29afe2 100644
--- a/project/pyexts.mk
+++ b/project/pyexts.mk
@@ -1,1924 +1,3 @@
-# _multibytecodec
-PYEXT_MULTIBYTECODEC_SRCS += pyext/obj/cjkcodecs/multibytecodec.c
-
-PYEXT_MULTIBYTECODEC_LOBJS = $(PYEXT_MULTIBYTECODEC_SRCS:.c=.lo)
-PYEXT_MULTIBYTECODEC_OBJS = $(PYEXT_MULTIBYTECODEC_SRCS:.c=.o)
-
-PYEXT_MULTIBYTECODEC_SHARED = pyext/_multibytecodec$(PYTHON_SOEXT)
-PYEXT_MULTIBYTECODEC_STATIC = pyext/_multibytecodec$(OS_ARCHIVE_EXT)
-
-$(PYEXT_MULTIBYTECODEC_SHARED): $(PYEXT_MULTIBYTECODEC_LOBJS)
-$(PYEXT_MULTIBYTECODEC_STATIC): $(PYEXT_MULTIBYTECODEC_OBJS)
-
-pyext-multibytecodec-shared: $(PYEXT_MULTIBYTECODEC_SHARED)
-pyext-multibytecodec-static: $(PYEXT_MULTIBYTECODEC_STATIC)
-
-pyext-multibytecodec-clean:
- rm -f $(PYEXT_MULTIBYTECODEC_LOBJS)
- rm -f $(PYEXT_MULTIBYTECODEC_OBJS)
- rm -f $(PYEXT_MULTIBYTECODEC_SHARED)
- rm -f $(PYEXT_MULTIBYTECODEC_STATIC)
-
-clean: pyext-multibytecodec-clean
-
-.PHONY: pyext-multibytecodec-shared
-.PHONY: pyext-multibytecodec-static
-.PHONY: pyext-multibytecodec-clean
-
-
-# _codecs_cn
-PYEXT_CODECS_CN_SRCS += pyext/obj/cjkcodecs/_codecs_cn.c
-
-PYEXT_CODECS_CN_LOBJS = $(PYEXT_CODECS_CN_SRCS:.c=.lo)
-PYEXT_CODECS_CN_OBJS = $(PYEXT_CODECS_CN_SRCS:.c=.o)
-
-PYEXT_CODECS_CN_SHARED = pyext/_codecs_cn$(PYTHON_SOEXT)
-PYEXT_CODECS_CN_STATIC = pyext/_codecs_cn$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CODECS_CN_SHARED): $(PYEXT_CODECS_CN_LOBJS)
-$(PYEXT_CODECS_CN_STATIC): $(PYEXT_CODECS_CN_OBJS)
-
-pyext-codecs_cn-shared: $(PYEXT_CODECS_CN_SHARED)
-pyext-codecs_cn-static: $(PYEXT_CODECS_CN_STATIC)
-
-pyext-codecs_cn-clean:
- rm -f $(PYEXT_CODECS_CN_LOBJS)
- rm -f $(PYEXT_CODECS_CN_OBJS)
- rm -f $(PYEXT_CODECS_CN_SHARED)
- rm -f $(PYEXT_CODECS_CN_STATIC)
-
-clean: pyext-codecs_cn-clean
-
-.PHONY: pyext-codecs_cn-shared
-.PHONY: pyext-codecs_cn-static
-.PHONY: pyext-codecs_cn-clean
-
-
-# _codecs_hk
-PYEXT_CODECS_HK_SRCS += pyext/obj/cjkcodecs/_codecs_hk.c
-
-PYEXT_CODECS_HK_LOBJS = $(PYEXT_CODECS_HK_SRCS:.c=.lo)
-PYEXT_CODECS_HK_OBJS = $(PYEXT_CODECS_HK_SRCS:.c=.o)
-
-PYEXT_CODECS_HK_SHARED = pyext/_codecs_hk$(PYTHON_SOEXT)
-PYEXT_CODECS_HK_STATIC = pyext/_codecs_hk$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CODECS_HK_SHARED): $(PYEXT_CODECS_HK_LOBJS)
-$(PYEXT_CODECS_HK_STATIC): $(PYEXT_CODECS_HK_OBJS)
-
-pyext-codecs_hk-shared: $(PYEXT_CODECS_HK_SHARED)
-pyext-codecs_hk-static: $(PYEXT_CODECS_HK_STATIC)
-
-pyext-codecs_hk-clean:
- rm -f $(PYEXT_CODECS_HK_LOBJS)
- rm -f $(PYEXT_CODECS_HK_OBJS)
- rm -f $(PYEXT_CODECS_HK_SHARED)
- rm -f $(PYEXT_CODECS_HK_STATIC)
-
-clean: pyext-codecs_hk-clean
-
-.PHONY: pyext-codecs_hk-shared
-.PHONY: pyext-codecs_hk-static
-.PHONY: pyext-codecs_hk-clean
-
-
-# _codecs_jp
-PYEXT_CODECS_JP_SRCS += pyext/obj/cjkcodecs/_codecs_jp.c
-
-PYEXT_CODECS_JP_LOBJS = $(PYEXT_CODECS_JP_SRCS:.c=.lo)
-PYEXT_CODECS_JP_OBJS = $(PYEXT_CODECS_JP_SRCS:.c=.o)
-
-PYEXT_CODECS_JP_SHARED = pyext/_codecs_jp$(PYTHON_SOEXT)
-PYEXT_CODECS_JP_STATIC = pyext/_codecs_jp$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CODECS_JP_SHARED): $(PYEXT_CODECS_JP_LOBJS)
-$(PYEXT_CODECS_JP_STATIC): $(PYEXT_CODECS_JP_OBJS)
-
-pyext-codecs_jp-shared: $(PYEXT_CODECS_JP_SHARED)
-pyext-codecs_jp-static: $(PYEXT_CODECS_JP_STATIC)
-
-pyext-codecs_jp-clean:
- rm -f $(PYEXT_CODECS_JP_LOBJS)
- rm -f $(PYEXT_CODECS_JP_OBJS)
- rm -f $(PYEXT_CODECS_JP_SHARED)
- rm -f $(PYEXT_CODECS_JP_STATIC)
-
-clean: pyext-codecs_jp-clean
-
-.PHONY: pyext-codecs_jp-shared
-.PHONY: pyext-codecs_jp-static
-.PHONY: pyext-codecs_jp-clean
-
-
-# _codecs_kr
-PYEXT_CODECS_KR_SRCS += pyext/obj/cjkcodecs/_codecs_kr.c
-
-PYEXT_CODECS_KR_LOBJS = $(PYEXT_CODECS_KR_SRCS:.c=.lo)
-PYEXT_CODECS_KR_OBJS = $(PYEXT_CODECS_KR_SRCS:.c=.o)
-
-PYEXT_CODECS_KR_SHARED = pyext/_codecs_kr$(PYTHON_SOEXT)
-PYEXT_CODECS_KR_STATIC = pyext/_codecs_kr$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CODECS_KR_SHARED): $(PYEXT_CODECS_KR_LOBJS)
-$(PYEXT_CODECS_KR_STATIC): $(PYEXT_CODECS_KR_OBJS)
-
-pyext-codecs_kr-shared: $(PYEXT_CODECS_KR_SHARED)
-pyext-codecs_kr-static: $(PYEXT_CODECS_KR_STATIC)
-
-pyext-codecs_kr-clean:
- rm -f $(PYEXT_CODECS_KR_LOBJS)
- rm -f $(PYEXT_CODECS_KR_OBJS)
- rm -f $(PYEXT_CODECS_KR_SHARED)
- rm -f $(PYEXT_CODECS_KR_STATIC)
-
-clean: pyext-codecs_kr-clean
-
-.PHONY: pyext-codecs_kr-shared
-.PHONY: pyext-codecs_kr-static
-.PHONY: pyext-codecs_kr-clean
-
-
-# _codecs_tw
-PYEXT_CODECS_TW_SRCS += pyext/obj/cjkcodecs/_codecs_tw.c
-
-PYEXT_CODECS_TW_LOBJS = $(PYEXT_CODECS_TW_SRCS:.c=.lo)
-PYEXT_CODECS_TW_OBJS = $(PYEXT_CODECS_TW_SRCS:.c=.o)
-
-PYEXT_CODECS_TW_SHARED = pyext/_codecs_tw$(PYTHON_SOEXT)
-PYEXT_CODECS_TW_STATIC = pyext/_codecs_tw$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CODECS_TW_SHARED): $(PYEXT_CODECS_TW_LOBJS)
-$(PYEXT_CODECS_TW_STATIC): $(PYEXT_CODECS_TW_OBJS)
-
-pyext-codecs_tw-shared: $(PYEXT_CODECS_TW_SHARED)
-pyext-codecs_tw-static: $(PYEXT_CODECS_TW_STATIC)
-
-pyext-codecs_tw-clean:
- rm -f $(PYEXT_CODECS_TW_LOBJS)
- rm -f $(PYEXT_CODECS_TW_OBJS)
- rm -f $(PYEXT_CODECS_TW_SHARED)
- rm -f $(PYEXT_CODECS_TW_STATIC)
-
-clean: pyext-codecs_tw-clean
-
-.PHONY: pyext-codecs_tw-shared
-.PHONY: pyext-codecs_tw-static
-.PHONY: pyext-codecs_tw-clean
-
-
-# _codecs_iso2022
-PYEXT_CODECS_ISO2022_SRCS += pyext/obj/cjkcodecs/_codecs_iso2022.c
-
-PYEXT_CODECS_ISO2022_LOBJS = $(PYEXT_CODECS_ISO2022_SRCS:.c=.lo)
-PYEXT_CODECS_ISO2022_OBJS = $(PYEXT_CODECS_ISO2022_SRCS:.c=.o)
-
-PYEXT_CODECS_ISO2022_SHARED = pyext/_codecs_iso2022$(PYTHON_SOEXT)
-PYEXT_CODECS_ISO2022_STATIC = pyext/_codecs_iso2022$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CODECS_ISO2022_SHARED): $(PYEXT_CODECS_ISO2022_LOBJS)
-$(PYEXT_CODECS_ISO2022_STATIC): $(PYEXT_CODECS_ISO2022_OBJS)
-
-pyext-codecs_iso2022-shared: $(PYEXT_CODECS_ISO2022_SHARED)
-pyext-codecs_iso2022-static: $(PYEXT_CODECS_ISO2022_STATIC)
-
-pyext-codecs_iso2022-clean:
- rm -f $(PYEXT_CODECS_ISO2022_LOBJS)
- rm -f $(PYEXT_CODECS_ISO2022_OBJS)
- rm -f $(PYEXT_CODECS_ISO2022_SHARED)
- rm -f $(PYEXT_CODECS_ISO2022_STATIC)
-
-clean: pyext-codecs_iso2022-clean
-
-.PHONY: pyext-codecs_iso2022-shared
-.PHONY: pyext-codecs_iso2022-static
-.PHONY: pyext-codecs_iso2022-clean
-
-
-# _asyncio
-PYEXT_ASYNCIO_SRCS += pyext/obj/_asynciomodule.c
-
-PYEXT_ASYNCIO_LOBJS = $(PYEXT_ASYNCIO_SRCS:.c=.lo)
-PYEXT_ASYNCIO_OBJS = $(PYEXT_ASYNCIO_SRCS:.c=.o)
-
-PYEXT_ASYNCIO_SHARED = pyext/_asyncio$(PYTHON_SOEXT)
-PYEXT_ASYNCIO_STATIC = pyext/_asyncio$(OS_ARCHIVE_EXT)
-
-$(PYEXT_ASYNCIO_SHARED): $(PYEXT_ASYNCIO_LOBJS)
-$(PYEXT_ASYNCIO_STATIC): $(PYEXT_ASYNCIO_OBJS)
-
-pyext-asyncio-shared: $(PYEXT_ASYNCIO_SHARED)
-pyext-asyncio-static: $(PYEXT_ASYNCIO_STATIC)
-
-pyext-asyncio-clean:
- rm -f $(PYEXT_ASYNCIO_LOBJS)
- rm -f $(PYEXT_ASYNCIO_OBJS)
- rm -f $(PYEXT_ASYNCIO_SHARED)
- rm -f $(PYEXT_ASYNCIO_STATIC)
-
-clean: pyext-asyncio-clean
-
-.PHONY: pyext-asyncio-shared
-.PHONY: pyext-asyncio-static
-.PHONY: pyext-asyncio-clean
-
-
-# _bisect
-PYEXT_BISECT_SRCS += pyext/obj/_bisectmodule.c
-
-PYEXT_BISECT_LOBJS = $(PYEXT_BISECT_SRCS:.c=.lo)
-PYEXT_BISECT_OBJS = $(PYEXT_BISECT_SRCS:.c=.o)
-
-PYEXT_BISECT_SHARED = pyext/_bisect$(PYTHON_SOEXT)
-PYEXT_BISECT_STATIC = pyext/_bisect$(OS_ARCHIVE_EXT)
-
-$(PYEXT_BISECT_SHARED): $(PYEXT_BISECT_LOBJS)
-$(PYEXT_BISECT_STATIC): $(PYEXT_BISECT_OBJS)
-
-pyext-bisect-shared: $(PYEXT_BISECT_SHARED)
-pyext-bisect-static: $(PYEXT_BISECT_STATIC)
-
-pyext-bisect-clean:
- rm -f $(PYEXT_BISECT_LOBJS)
- rm -f $(PYEXT_BISECT_OBJS)
- rm -f $(PYEXT_BISECT_SHARED)
- rm -f $(PYEXT_BISECT_STATIC)
-
-clean: pyext-bisect-clean
-
-.PHONY: pyext-bisect-shared
-.PHONY: pyext-bisect-static
-.PHONY: pyext-bisect-clean
-
-
-# _crypt
-PYEXT_CRYPT_SRCS += pyext/obj/_cryptmodule.c
-
-PYEXT_CRYPT_LOBJS = $(PYEXT_CRYPT_SRCS:.c=.lo)
-PYEXT_CRYPT_OBJS = $(PYEXT_CRYPT_SRCS:.c=.o)
-
-PYEXT_CRYPT_SHARED = pyext/_crypt$(PYTHON_SOEXT)
-PYEXT_CRYPT_STATIC = pyext/_crypt$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CRYPT_SHARED): $(PYEXT_CRYPT_LOBJS)
-$(PYEXT_CRYPT_STATIC): $(PYEXT_CRYPT_OBJS)
-
-pyext-crypt-shared: $(PYEXT_CRYPT_SHARED)
-pyext-crypt-static: $(PYEXT_CRYPT_STATIC)
-
-pyext-crypt-clean:
- rm -f $(PYEXT_CRYPT_LOBJS)
- rm -f $(PYEXT_CRYPT_OBJS)
- rm -f $(PYEXT_CRYPT_SHARED)
- rm -f $(PYEXT_CRYPT_STATIC)
-
-clean: pyext-crypt-clean
-
-.PHONY: pyext-crypt-shared
-.PHONY: pyext-crypt-static
-.PHONY: pyext-crypt-clean
-
-
-# _csv
-PYEXT_CSV_SRCS += pyext/obj/_csv.c
-
-PYEXT_CSV_LOBJS = $(PYEXT_CSV_SRCS:.c=.lo)
-PYEXT_CSV_OBJS = $(PYEXT_CSV_SRCS:.c=.o)
-
-PYEXT_CSV_SHARED = pyext/_csv$(PYTHON_SOEXT)
-PYEXT_CSV_STATIC = pyext/_csv$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CSV_SHARED): $(PYEXT_CSV_LOBJS)
-$(PYEXT_CSV_STATIC): $(PYEXT_CSV_OBJS)
-
-pyext-csv-shared: $(PYEXT_CSV_SHARED)
-pyext-csv-static: $(PYEXT_CSV_STATIC)
-
-pyext-csv-clean:
- rm -f $(PYEXT_CSV_LOBJS)
- rm -f $(PYEXT_CSV_OBJS)
- rm -f $(PYEXT_CSV_SHARED)
- rm -f $(PYEXT_CSV_STATIC)
-
-clean: pyext-csv-clean
-
-.PHONY: pyext-csv-shared
-.PHONY: pyext-csv-static
-.PHONY: pyext-csv-clean
-
-
-# _ctypes_test
-PYEXT_CTYPES_TEST_SRCS += pyext/obj/_ctypes/_ctypes_test.c
-
-PYEXT_CTYPES_TEST_LOBJS = $(PYEXT_CTYPES_TEST_SRCS:.c=.lo)
-PYEXT_CTYPES_TEST_OBJS = $(PYEXT_CTYPES_TEST_SRCS:.c=.o)
-
-PYEXT_CTYPES_TEST_SHARED = pyext/_ctypes_test$(PYTHON_SOEXT)
-PYEXT_CTYPES_TEST_STATIC = pyext/_ctypes_test$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CTYPES_TEST_SHARED): $(PYEXT_CTYPES_TEST_LOBJS)
-$(PYEXT_CTYPES_TEST_STATIC): $(PYEXT_CTYPES_TEST_OBJS)
-
-pyext-ctypes_test-shared: $(PYEXT_CTYPES_TEST_SHARED)
-pyext-ctypes_test-static: $(PYEXT_CTYPES_TEST_STATIC)
-
-pyext-ctypes_test-clean:
- rm -f $(PYEXT_CTYPES_TEST_LOBJS)
- rm -f $(PYEXT_CTYPES_TEST_OBJS)
- rm -f $(PYEXT_CTYPES_TEST_SHARED)
- rm -f $(PYEXT_CTYPES_TEST_STATIC)
-
-clean: pyext-ctypes_test-clean
-
-.PHONY: pyext-ctypes_test-shared
-.PHONY: pyext-ctypes_test-static
-.PHONY: pyext-ctypes_test-clean
-
-
-# _datetime
-PYEXT_DATETIME_SRCS += pyext/obj/_datetimemodule.c
-
-PYEXT_DATETIME_LOBJS = $(PYEXT_DATETIME_SRCS:.c=.lo)
-PYEXT_DATETIME_OBJS = $(PYEXT_DATETIME_SRCS:.c=.o)
-
-PYEXT_DATETIME_SHARED = pyext/_datetime$(PYTHON_SOEXT)
-PYEXT_DATETIME_STATIC = pyext/_datetime$(OS_ARCHIVE_EXT)
-
-$(PYEXT_DATETIME_SHARED): $(PYEXT_DATETIME_LOBJS)
-$(PYEXT_DATETIME_STATIC): $(PYEXT_DATETIME_OBJS)
-
-pyext-datetime-shared: $(PYEXT_DATETIME_SHARED)
-pyext-datetime-static: $(PYEXT_DATETIME_STATIC)
-
-pyext-datetime-clean:
- rm -f $(PYEXT_DATETIME_LOBJS)
- rm -f $(PYEXT_DATETIME_OBJS)
- rm -f $(PYEXT_DATETIME_SHARED)
- rm -f $(PYEXT_DATETIME_STATIC)
-
-clean: pyext-datetime-clean
-
-.PHONY: pyext-datetime-shared
-.PHONY: pyext-datetime-static
-.PHONY: pyext-datetime-clean
-
-
-# _elementtree
-PYEXT_ELEMENTTREE_SRCS += pyext/obj/_elementtree.c
-
-PYEXT_ELEMENTTREE_LOBJS = $(PYEXT_ELEMENTTREE_SRCS:.c=.lo)
-PYEXT_ELEMENTTREE_OBJS = $(PYEXT_ELEMENTTREE_SRCS:.c=.o)
-
-PYEXT_ELEMENTTREE_SHARED = pyext/_elementtree$(PYTHON_SOEXT)
-PYEXT_ELEMENTTREE_STATIC = pyext/_elementtree$(OS_ARCHIVE_EXT)
-
-$(PYEXT_ELEMENTTREE_SHARED): $(PYEXT_ELEMENTTREE_LOBJS)
-$(PYEXT_ELEMENTTREE_STATIC): $(PYEXT_ELEMENTTREE_OBJS)
-
-pyext-elementtree-shared: $(PYEXT_ELEMENTTREE_SHARED)
-pyext-elementtree-static: $(PYEXT_ELEMENTTREE_STATIC)
-
-pyext-elementtree-clean:
- rm -f $(PYEXT_ELEMENTTREE_LOBJS)
- rm -f $(PYEXT_ELEMENTTREE_OBJS)
- rm -f $(PYEXT_ELEMENTTREE_SHARED)
- rm -f $(PYEXT_ELEMENTTREE_STATIC)
-
-clean: pyext-elementtree-clean
-
-.PHONY: pyext-elementtree-shared
-.PHONY: pyext-elementtree-static
-.PHONY: pyext-elementtree-clean
-
-
-# _heapq
-PYEXT_HEAPQ_SRCS += pyext/obj/_heapqmodule.c
-
-PYEXT_HEAPQ_LOBJS = $(PYEXT_HEAPQ_SRCS:.c=.lo)
-PYEXT_HEAPQ_OBJS = $(PYEXT_HEAPQ_SRCS:.c=.o)
-
-PYEXT_HEAPQ_SHARED = pyext/_heapq$(PYTHON_SOEXT)
-PYEXT_HEAPQ_STATIC = pyext/_heapq$(OS_ARCHIVE_EXT)
-
-$(PYEXT_HEAPQ_SHARED): $(PYEXT_HEAPQ_LOBJS)
-$(PYEXT_HEAPQ_STATIC): $(PYEXT_HEAPQ_OBJS)
-
-pyext-heapq-shared: $(PYEXT_HEAPQ_SHARED)
-pyext-heapq-static: $(PYEXT_HEAPQ_STATIC)
-
-pyext-heapq-clean:
- rm -f $(PYEXT_HEAPQ_LOBJS)
- rm -f $(PYEXT_HEAPQ_OBJS)
- rm -f $(PYEXT_HEAPQ_SHARED)
- rm -f $(PYEXT_HEAPQ_STATIC)
-
-clean: pyext-heapq-clean
-
-.PHONY: pyext-heapq-shared
-.PHONY: pyext-heapq-static
-.PHONY: pyext-heapq-clean
-
-
-# _json
-PYEXT_JSON_SRCS += pyext/obj/_json.c
-
-PYEXT_JSON_LOBJS = $(PYEXT_JSON_SRCS:.c=.lo)
-PYEXT_JSON_OBJS = $(PYEXT_JSON_SRCS:.c=.o)
-
-PYEXT_JSON_SHARED = pyext/_json$(PYTHON_SOEXT)
-PYEXT_JSON_STATIC = pyext/_json$(OS_ARCHIVE_EXT)
-
-$(PYEXT_JSON_SHARED): $(PYEXT_JSON_LOBJS)
-$(PYEXT_JSON_STATIC): $(PYEXT_JSON_OBJS)
-
-pyext-json-shared: $(PYEXT_JSON_SHARED)
-pyext-json-static: $(PYEXT_JSON_STATIC)
-
-pyext-json-clean:
- rm -f $(PYEXT_JSON_LOBJS)
- rm -f $(PYEXT_JSON_OBJS)
- rm -f $(PYEXT_JSON_SHARED)
- rm -f $(PYEXT_JSON_STATIC)
-
-clean: pyext-json-clean
-
-.PHONY: pyext-json-shared
-.PHONY: pyext-json-static
-.PHONY: pyext-json-clean
-
-
-# _md5
-PYEXT_MD5_SRCS += pyext/obj/md5module.c
-
-PYEXT_MD5_LOBJS = $(PYEXT_MD5_SRCS:.c=.lo)
-PYEXT_MD5_OBJS = $(PYEXT_MD5_SRCS:.c=.o)
-
-PYEXT_MD5_SHARED = pyext/_md5$(PYTHON_SOEXT)
-PYEXT_MD5_STATIC = pyext/_md5$(OS_ARCHIVE_EXT)
-
-$(PYEXT_MD5_SHARED): $(PYEXT_MD5_LOBJS)
-$(PYEXT_MD5_STATIC): $(PYEXT_MD5_OBJS)
-
-pyext-md5-shared: $(PYEXT_MD5_SHARED)
-pyext-md5-static: $(PYEXT_MD5_STATIC)
-
-pyext-md5-clean:
- rm -f $(PYEXT_MD5_LOBJS)
- rm -f $(PYEXT_MD5_OBJS)
- rm -f $(PYEXT_MD5_SHARED)
- rm -f $(PYEXT_MD5_STATIC)
-
-clean: pyext-md5-clean
-
-.PHONY: pyext-md5-shared
-.PHONY: pyext-md5-static
-.PHONY: pyext-md5-clean
-
-
-# _opcode
-PYEXT_OPCODE_SRCS += pyext/obj/_opcode.c
-
-PYEXT_OPCODE_LOBJS = $(PYEXT_OPCODE_SRCS:.c=.lo)
-PYEXT_OPCODE_OBJS = $(PYEXT_OPCODE_SRCS:.c=.o)
-
-PYEXT_OPCODE_SHARED = pyext/_opcode$(PYTHON_SOEXT)
-PYEXT_OPCODE_STATIC = pyext/_opcode$(OS_ARCHIVE_EXT)
-
-$(PYEXT_OPCODE_SHARED): $(PYEXT_OPCODE_LOBJS)
-$(PYEXT_OPCODE_STATIC): $(PYEXT_OPCODE_OBJS)
-
-pyext-opcode-shared: $(PYEXT_OPCODE_SHARED)
-pyext-opcode-static: $(PYEXT_OPCODE_STATIC)
-
-pyext-opcode-clean:
- rm -f $(PYEXT_OPCODE_LOBJS)
- rm -f $(PYEXT_OPCODE_OBJS)
- rm -f $(PYEXT_OPCODE_SHARED)
- rm -f $(PYEXT_OPCODE_STATIC)
-
-clean: pyext-opcode-clean
-
-.PHONY: pyext-opcode-shared
-.PHONY: pyext-opcode-static
-.PHONY: pyext-opcode-clean
-
-
-# _pickle
-PYEXT_PICKLE_SRCS += pyext/obj/_pickle.c
-
-PYEXT_PICKLE_LOBJS = $(PYEXT_PICKLE_SRCS:.c=.lo)
-PYEXT_PICKLE_OBJS = $(PYEXT_PICKLE_SRCS:.c=.o)
-
-PYEXT_PICKLE_SHARED = pyext/_pickle$(PYTHON_SOEXT)
-PYEXT_PICKLE_STATIC = pyext/_pickle$(OS_ARCHIVE_EXT)
-
-$(PYEXT_PICKLE_SHARED): $(PYEXT_PICKLE_LOBJS)
-$(PYEXT_PICKLE_STATIC): $(PYEXT_PICKLE_OBJS)
-
-pyext-pickle-shared: $(PYEXT_PICKLE_SHARED)
-pyext-pickle-static: $(PYEXT_PICKLE_STATIC)
-
-pyext-pickle-clean:
- rm -f $(PYEXT_PICKLE_LOBJS)
- rm -f $(PYEXT_PICKLE_OBJS)
- rm -f $(PYEXT_PICKLE_SHARED)
- rm -f $(PYEXT_PICKLE_STATIC)
-
-clean: pyext-pickle-clean
-
-.PHONY: pyext-pickle-shared
-.PHONY: pyext-pickle-static
-.PHONY: pyext-pickle-clean
-
-
-# _posixsubprocess
-PYEXT_POSIXSUBPROCESS_SRCS += pyext/obj/_posixsubprocess.c
-
-PYEXT_POSIXSUBPROCESS_LOBJS = $(PYEXT_POSIXSUBPROCESS_SRCS:.c=.lo)
-PYEXT_POSIXSUBPROCESS_OBJS = $(PYEXT_POSIXSUBPROCESS_SRCS:.c=.o)
-
-PYEXT_POSIXSUBPROCESS_SHARED = pyext/_posixsubprocess$(PYTHON_SOEXT)
-PYEXT_POSIXSUBPROCESS_STATIC = pyext/_posixsubprocess$(OS_ARCHIVE_EXT)
-
-$(PYEXT_POSIXSUBPROCESS_SHARED):$(PYEXT_POSIXSUBPROCESS_LOBJS)
-$(PYEXT_POSIXSUBPROCESS_STATIC):$(PYEXT_POSIXSUBPROCESS_OBJS)
-
-pyext-posixsubprocess-shared: $(PYEXT_POSIXSUBPROCESS_SHARED)
-pyext-posixsubprocess-static: $(PYEXT_POSIXSUBPROCESS_STATIC)
-
-pyext-posixsubprocess-clean:
- rm -f $(PYEXT_POSIXSUBPROCESS_LOBJS)
- rm -f $(PYEXT_POSIXSUBPROCESS_OBJS)
- rm -f $(PYEXT_POSIXSUBPROCESS_SHARED)
- rm -f $(PYEXT_POSIXSUBPROCESS_STATIC)
-
-clean: pyext-posixsubprocess-clean
-
-.PHONY: pyext-posixsubprocess-shared
-.PHONY: pyext-posixsubprocess-static
-.PHONY: pyext-posixsubprocess-clean
-
-
-# _random
-PYEXT_RANDOM_SRCS += pyext/obj/_randommodule.c
-
-PYEXT_RANDOM_LOBJS = $(PYEXT_RANDOM_SRCS:.c=.lo)
-PYEXT_RANDOM_OBJS = $(PYEXT_RANDOM_SRCS:.c=.o)
-
-PYEXT_RANDOM_SHARED = pyext/_random$(PYTHON_SOEXT)
-PYEXT_RANDOM_STATIC = pyext/_random$(OS_ARCHIVE_EXT)
-
-$(PYEXT_RANDOM_SHARED): $(PYEXT_RANDOM_LOBJS)
-$(PYEXT_RANDOM_STATIC): $(PYEXT_RANDOM_OBJS)
-
-pyext-random-shared: $(PYEXT_RANDOM_SHARED)
-pyext-random-static: $(PYEXT_RANDOM_STATIC)
-
-pyext-random-clean:
- rm -f $(PYEXT_RANDOM_LOBJS)
- rm -f $(PYEXT_RANDOM_OBJS)
- rm -f $(PYEXT_RANDOM_SHARED)
- rm -f $(PYEXT_RANDOM_STATIC)
-
-clean: pyext-random-clean
-
-.PHONY: pyext-random-shared
-.PHONY: pyext-random-static
-.PHONY: pyext-random-clean
-
-
-# _sha1
-PYEXT_SHA1_SRCS += pyext/obj/sha1module.c
-
-PYEXT_SHA1_LOBJS = $(PYEXT_SHA1_SRCS:.c=.lo)
-PYEXT_SHA1_OBJS = $(PYEXT_SHA1_SRCS:.c=.o)
-
-PYEXT_SHA1_SHARED = pyext/_sha1$(PYTHON_SOEXT)
-PYEXT_SHA1_STATIC = pyext/_sha1$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SHA1_SHARED): $(PYEXT_SHA1_LOBJS)
-$(PYEXT_SHA1_STATIC): $(PYEXT_SHA1_OBJS)
-
-pyext-sha1-shared: $(PYEXT_SHA1_SHARED)
-pyext-sha1-static: $(PYEXT_SHA1_STATIC)
-
-pyext-sha1-clean:
- rm -f $(PYEXT_SHA1_LOBJS)
- rm -f $(PYEXT_SHA1_OBJS)
- rm -f $(PYEXT_SHA1_SHARED)
- rm -f $(PYEXT_SHA1_STATIC)
-
-clean: pyext-sha1-clean
-
-.PHONY: pyext-sha1-shared
-.PHONY: pyext-sha1-static
-.PHONY: pyext-sha1-clean
-
-
-# _sha256
-PYEXT_SHA256_SRCS += pyext/obj/sha256module.c
-
-PYEXT_SHA256_LOBJS = $(PYEXT_SHA256_SRCS:.c=.lo)
-PYEXT_SHA256_OBJS = $(PYEXT_SHA256_SRCS:.c=.o)
-
-PYEXT_SHA256_SHARED = pyext/_sha256$(PYTHON_SOEXT)
-PYEXT_SHA256_STATIC = pyext/_sha256$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SHA256_SHARED): $(PYEXT_SHA256_LOBJS)
-$(PYEXT_SHA256_STATIC): $(PYEXT_SHA256_OBJS)
-
-pyext-sha256-shared: $(PYEXT_SHA256_SHARED)
-pyext-sha256-static: $(PYEXT_SHA256_STATIC)
-
-pyext-sha256-clean:
- rm -f $(PYEXT_SHA256_LOBJS)
- rm -f $(PYEXT_SHA256_OBJS)
- rm -f $(PYEXT_SHA256_SHARED)
- rm -f $(PYEXT_SHA256_STATIC)
-
-clean: pyext-sha256-clean
-
-.PHONY: pyext-sha256-shared
-.PHONY: pyext-sha256-static
-.PHONY: pyext-sha256-clean
-
-
-# _sha3
-PYEXT_SHA3_SRCS += pyext/obj/_sha3/sha3module.c
-
-PYEXT_SHA3_LOBJS = $(PYEXT_SHA3_SRCS:.c=.lo)
-PYEXT_SHA3_OBJS = $(PYEXT_SHA3_SRCS:.c=.o)
-
-PYEXT_SHA3_SHARED = pyext/_sha3$(PYTHON_SOEXT)
-PYEXT_SHA3_STATIC = pyext/_sha3$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SHA3_SHARED): $(PYEXT_SHA3_LOBJS)
-$(PYEXT_SHA3_STATIC): $(PYEXT_SHA3_OBJS)
-
-pyext-sha3-shared: $(PYEXT_SHA3_SHARED)
-pyext-sha3-static: $(PYEXT_SHA3_STATIC)
-
-pyext-sha3-clean:
- rm -f $(PYEXT_SHA3_LOBJS)
- rm -f $(PYEXT_SHA3_OBJS)
- rm -f $(PYEXT_SHA3_SHARED)
- rm -f $(PYEXT_SHA3_STATIC)
-
-clean: pyext-sha3-clean
-
-.PHONY: pyext-sha3-shared
-.PHONY: pyext-sha3-static
-.PHONY: pyext-sha3-clean
-
-
-# _sha512
-PYEXT_SHA512_SRCS += pyext/obj/sha512module.c
-
-PYEXT_SHA512_LOBJS = $(PYEXT_SHA512_SRCS:.c=.lo)
-PYEXT_SHA512_OBJS = $(PYEXT_SHA512_SRCS:.c=.o)
-
-PYEXT_SHA512_SHARED = pyext/_sha512$(PYTHON_SOEXT)
-PYEXT_SHA512_STATIC = pyext/_sha512$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SHA512_SHARED): $(PYEXT_SHA512_LOBJS)
-$(PYEXT_SHA512_STATIC): $(PYEXT_SHA512_OBJS)
-
-pyext-sha512-shared: $(PYEXT_SHA512_SHARED)
-pyext-sha512-static: $(PYEXT_SHA512_STATIC)
-
-pyext-sha512-clean:
- rm -f $(PYEXT_SHA512_LOBJS)
- rm -f $(PYEXT_SHA512_OBJS)
- rm -f $(PYEXT_SHA512_SHARED)
- rm -f $(PYEXT_SHA512_STATIC)
-
-clean: pyext-sha512-clean
-
-.PHONY: pyext-sha512-shared
-.PHONY: pyext-sha512-static
-.PHONY: pyext-sha512-clean
-
-
-# _socket
-PYEXT_SOCKET_SRCS += pyext/obj/socketmodule.c
-
-PYEXT_SOCKET_LOBJS = $(PYEXT_SOCKET_SRCS:.c=.lo)
-PYEXT_SOCKET_OBJS = $(PYEXT_SOCKET_SRCS:.c=.o)
-
-PYEXT_SOCKET_SHARED = pyext/_socket$(PYTHON_SOEXT)
-PYEXT_SOCKET_STATIC = pyext/_socket$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SOCKET_SHARED): $(PYEXT_SOCKET_LOBJS)
-$(PYEXT_SOCKET_STATIC): $(PYEXT_SOCKET_OBJS)
-
-pyext-socket-shared: $(PYEXT_SOCKET_SHARED)
-pyext-socket-static: $(PYEXT_SOCKET_STATIC)
-
-pyext-socket-clean:
- rm -f $(PYEXT_SOCKET_LOBJS)
- rm -f $(PYEXT_SOCKET_OBJS)
- rm -f $(PYEXT_SOCKET_SHARED)
- rm -f $(PYEXT_SOCKET_STATIC)
-
-clean: pyext-socket-clean
-
-.PHONY: pyext-socket-shared
-.PHONY: pyext-socket-static
-.PHONY: pyext-socket-clean
-
-
-# _struct
-PYEXT_STRUCT_SRCS += pyext/obj/_struct.c
-
-PYEXT_STRUCT_LOBJS = $(PYEXT_STRUCT_SRCS:.c=.lo)
-PYEXT_STRUCT_OBJS = $(PYEXT_STRUCT_SRCS:.c=.o)
-
-PYEXT_STRUCT_SHARED = pyext/_struct$(PYTHON_SOEXT)
-PYEXT_STRUCT_STATIC = pyext/_struct$(OS_ARCHIVE_EXT)
-
-$(PYEXT_STRUCT_SHARED): $(PYEXT_STRUCT_LOBJS)
-$(PYEXT_STRUCT_STATIC): $(PYEXT_STRUCT_OBJS)
-
-pyext-struct-shared: $(PYEXT_STRUCT_SHARED)
-pyext-struct-static: $(PYEXT_STRUCT_STATIC)
-
-pyext-struct-clean:
- rm -f $(PYEXT_STRUCT_LOBJS)
- rm -f $(PYEXT_STRUCT_OBJS)
- rm -f $(PYEXT_STRUCT_SHARED)
- rm -f $(PYEXT_STRUCT_STATIC)
-
-clean: pyext-struct-clean
-
-.PHONY: pyext-struct-shared
-.PHONY: pyext-struct-static
-.PHONY: pyext-struct-clean
-
-
-# _testbuffer
-PYEXT_TESTBUFFER_SRCS += pyext/obj/_testbuffer.c
-
-PYEXT_TESTBUFFER_LOBJS = $(PYEXT_TESTBUFFER_SRCS:.c=.lo)
-PYEXT_TESTBUFFER_OBJS = $(PYEXT_TESTBUFFER_SRCS:.c=.o)
-
-PYEXT_TESTBUFFER_SHARED = pyext/_testbuffer$(PYTHON_SOEXT)
-PYEXT_TESTBUFFER_STATIC = pyext/_testbuffer$(OS_ARCHIVE_EXT)
-
-$(PYEXT_TESTBUFFER_SHARED): $(PYEXT_TESTBUFFER_LOBJS)
-$(PYEXT_TESTBUFFER_STATIC): $(PYEXT_TESTBUFFER_OBJS)
-
-pyext-testbuffer-shared: $(PYEXT_TESTBUFFER_SHARED)
-pyext-testbuffer-static: $(PYEXT_TESTBUFFER_STATIC)
-
-pyext-testbuffer-clean:
- rm -f $(PYEXT_TESTBUFFER_LOBJS)
- rm -f $(PYEXT_TESTBUFFER_OBJS)
- rm -f $(PYEXT_TESTBUFFER_SHARED)
- rm -f $(PYEXT_TESTBUFFER_STATIC)
-
-clean: pyext-testbuffer-clean
-
-.PHONY: pyext-testbuffer-shared
-.PHONY: pyext-testbuffer-static
-.PHONY: pyext-testbuffer-clean
-
-
-# _testcapi
-PYEXT_TESTCAPI_SRCS += pyext/obj/_testcapimodule.c
-
-PYEXT_TESTCAPI_LOBJS = $(PYEXT_TESTCAPI_SRCS:.c=.lo)
-PYEXT_TESTCAPI_OBJS = $(PYEXT_TESTCAPI_SRCS:.c=.o)
-
-PYEXT_TESTCAPI_SHARED = pyext/_testcapi$(PYTHON_SOEXT)
-PYEXT_TESTCAPI_STATIC = pyext/_testcapi$(OS_ARCHIVE_EXT)
-
-$(PYEXT_TESTCAPI_SHARED): $(PYEXT_TESTCAPI_LOBJS)
-$(PYEXT_TESTCAPI_STATIC): $(PYEXT_TESTCAPI_OBJS)
-
-pyext-testcapi-shared: $(PYEXT_TESTCAPI_SHARED)
-pyext-testcapi-static: $(PYEXT_TESTCAPI_STATIC)
-
-pyext-testcapi-clean:
- rm -f $(PYEXT_TESTCAPI_LOBJS)
- rm -f $(PYEXT_TESTCAPI_OBJS)
- rm -f $(PYEXT_TESTCAPI_SHARED)
- rm -f $(PYEXT_TESTCAPI_STATIC)
-
-clean: pyext-testcapi-clean
-
-.PHONY: pyext-testcapi-shared
-.PHONY: pyext-testcapi-static
-.PHONY: pyext-testcapi-clean
-
-
-# _testimportmultiple
-PYEXT_TESTIMPORTMULTIPLE_SRCS += pyext/obj/_testimportmultiple.c
-
-PYEXT_TESTIMPORTMULTIPLE_LOBJS = $(PYEXT_TESTIMPORTMULTIPLE_SRCS:.c=.lo)
-PYEXT_TESTIMPORTMULTIPLE_OBJS = $(PYEXT_TESTIMPORTMULTIPLE_SRCS:.c=.o)
-
-PYEXT_TESTIMPORTMULTIPLE_SHARED = pyext/_testimportmultiple$(PYTHON_SOEXT)
-PYEXT_TESTIMPORTMULTIPLE_STATIC = pyext/_testimportmultiple$(OS_ARCHIVE_EXT)
-
-$(PYEXT_TESTIMPORTMULTIPLE_SHARED):$(PYEXT_TESTIMPORTMULTIPLE_LOBJS)
-$(PYEXT_TESTIMPORTMULTIPLE_STATIC):$(PYEXT_TESTIMPORTMULTIPLE_OBJS)
-
-pyext-testimportmultiple-shared: $(PYEXT_TESTIMPORTMULTIPLE_SHARED)
-pyext-testimportmultiple-static: $(PYEXT_TESTIMPORTMULTIPLE_STATIC)
-
-pyext-testimportmultiple-clean:
- rm -f $(PYEXT_TESTIMPORTMULTIPLE_LOBJS)
- rm -f $(PYEXT_TESTIMPORTMULTIPLE_OBJS)
- rm -f $(PYEXT_TESTIMPORTMULTIPLE_SHARED)
- rm -f $(PYEXT_TESTIMPORTMULTIPLE_STATIC)
-
-clean: pyext-testimportmultiple-clean
-
-.PHONY: pyext-testimportmultiple-shared
-.PHONY: pyext-testimportmultiple-static
-.PHONY: pyext-testimportmultiple-clean
-
-
-# _testmultiphase
-PYEXT_TESTMULTIPHASE_SRCS += pyext/obj/_testmultiphase.c
-
-PYEXT_TESTMULTIPHASE_LOBJS = $(PYEXT_TESTMULTIPHASE_SRCS:.c=.lo)
-PYEXT_TESTMULTIPHASE_OBJS = $(PYEXT_TESTMULTIPHASE_SRCS:.c=.o)
-
-PYEXT_TESTMULTIPHASE_SHARED = pyext/_testmultiphase$(PYTHON_SOEXT)
-PYEXT_TESTMULTIPHASE_STATIC = pyext/_testmultiphase$(OS_ARCHIVE_EXT)
-
-$(PYEXT_TESTMULTIPHASE_SHARED): $(PYEXT_TESTMULTIPHASE_LOBJS)
-$(PYEXT_TESTMULTIPHASE_STATIC): $(PYEXT_TESTMULTIPHASE_OBJS)
-
-pyext-testmultiphase-shared: $(PYEXT_TESTMULTIPHASE_SHARED)
-pyext-testmultiphase-static: $(PYEXT_TESTMULTIPHASE_STATIC)
-
-pyext-testmultiphase-clean:
- rm -f $(PYEXT_TESTMULTIPHASE_LOBJS)
- rm -f $(PYEXT_TESTMULTIPHASE_OBJS)
- rm -f $(PYEXT_TESTMULTIPHASE_SHARED)
- rm -f $(PYEXT_TESTMULTIPHASE_STATIC)
-
-clean: pyext-testmultiphase-clean
-
-.PHONY: pyext-testmultiphase-shared
-.PHONY: pyext-testmultiphase-static
-.PHONY: pyext-testmultiphase-clean
-
-
-# array
-PYEXT_ARRAY_SRCS += pyext/obj/arraymodule.c
-
-PYEXT_ARRAY_LOBJS = $(PYEXT_ARRAY_SRCS:.c=.lo)
-PYEXT_ARRAY_OBJS = $(PYEXT_ARRAY_SRCS:.c=.o)
-
-PYEXT_ARRAY_SHARED = pyext/array$(PYTHON_SOEXT)
-PYEXT_ARRAY_STATIC = pyext/array$(OS_ARCHIVE_EXT)
-
-$(PYEXT_ARRAY_SHARED): $(PYEXT_ARRAY_LOBJS)
-$(PYEXT_ARRAY_STATIC): $(PYEXT_ARRAY_OBJS)
-
-pyext-array-shared: $(PYEXT_ARRAY_SHARED)
-pyext-array-static: $(PYEXT_ARRAY_STATIC)
-
-pyext-array-clean:
- rm -f $(PYEXT_ARRAY_LOBJS)
- rm -f $(PYEXT_ARRAY_OBJS)
- rm -f $(PYEXT_ARRAY_SHARED)
- rm -f $(PYEXT_ARRAY_STATIC)
-
-clean: pyext-array-clean
-
-.PHONY: pyext-array-shared
-.PHONY: pyext-array-static
-.PHONY: pyext-array-clean
-
-
-# audioop
-PYEXT_AUDIOOP_SRCS += pyext/obj/audioop.c
-
-PYEXT_AUDIOOP_LOBJS = $(PYEXT_AUDIOOP_SRCS:.c=.lo)
-PYEXT_AUDIOOP_OBJS = $(PYEXT_AUDIOOP_SRCS:.c=.o)
-
-PYEXT_AUDIOOP_SHARED = pyext/audioop$(PYTHON_SOEXT)
-PYEXT_AUDIOOP_STATIC = pyext/audioop$(OS_ARCHIVE_EXT)
-
-$(PYEXT_AUDIOOP_SHARED): $(PYEXT_AUDIOOP_LOBJS)
-$(PYEXT_AUDIOOP_STATIC): $(PYEXT_AUDIOOP_OBJS)
-
-pyext-audioop-shared: $(PYEXT_AUDIOOP_SHARED)
-pyext-audioop-static: $(PYEXT_AUDIOOP_STATIC)
-
-pyext-audioop-clean:
- rm -f $(PYEXT_AUDIOOP_LOBJS)
- rm -f $(PYEXT_AUDIOOP_OBJS)
- rm -f $(PYEXT_AUDIOOP_SHARED)
- rm -f $(PYEXT_AUDIOOP_STATIC)
-
-clean: pyext-audioop-clean
-
-.PHONY: pyext-audioop-shared
-.PHONY: pyext-audioop-static
-.PHONY: pyext-audioop-clean
-
-
-# fcntl
-PYEXT_FCNTL_SRCS += pyext/obj/fcntlmodule.c
-
-PYEXT_FCNTL_LOBJS = $(PYEXT_FCNTL_SRCS:.c=.lo)
-PYEXT_FCNTL_OBJS = $(PYEXT_FCNTL_SRCS:.c=.o)
-
-PYEXT_FCNTL_SHARED = pyext/fcntl$(PYTHON_SOEXT)
-PYEXT_FCNTL_STATIC = pyext/fcntl$(OS_ARCHIVE_EXT)
-
-$(PYEXT_FCNTL_SHARED): $(PYEXT_FCNTL_LOBJS)
-$(PYEXT_FCNTL_STATIC): $(PYEXT_FCNTL_OBJS)
-
-pyext-fcntl-shared: $(PYEXT_FCNTL_SHARED)
-pyext-fcntl-static: $(PYEXT_FCNTL_STATIC)
-
-pyext-fcntl-clean:
- rm -f $(PYEXT_FCNTL_LOBJS)
- rm -f $(PYEXT_FCNTL_OBJS)
- rm -f $(PYEXT_FCNTL_SHARED)
- rm -f $(PYEXT_FCNTL_STATIC)
-
-clean: pyext-fcntl-clean
-
-.PHONY: pyext-fcntl-shared
-.PHONY: pyext-fcntl-static
-.PHONY: pyext-fcntl-clean
-
-
-# grp
-PYEXT_GRP_SRCS += pyext/obj/grpmodule.c
-
-PYEXT_GRP_LOBJS = $(PYEXT_GRP_SRCS:.c=.lo)
-PYEXT_GRP_OBJS = $(PYEXT_GRP_SRCS:.c=.o)
-
-PYEXT_GRP_SHARED = pyext/grp$(PYTHON_SOEXT)
-PYEXT_GRP_STATIC = pyext/grp$(OS_ARCHIVE_EXT)
-
-$(PYEXT_GRP_SHARED): $(PYEXT_GRP_LOBJS)
-$(PYEXT_GRP_STATIC): $(PYEXT_GRP_OBJS)
-
-pyext-grp-shared: $(PYEXT_GRP_SHARED)
-pyext-grp-static: $(PYEXT_GRP_STATIC)
-
-pyext-grp-clean:
- rm -f $(PYEXT_GRP_LOBJS)
- rm -f $(PYEXT_GRP_OBJS)
- rm -f $(PYEXT_GRP_SHARED)
- rm -f $(PYEXT_GRP_STATIC)
-
-clean: pyext-grp-clean
-
-.PHONY: pyext-grp-shared
-.PHONY: pyext-grp-static
-.PHONY: pyext-grp-clean
-
-
-# mmap
-PYEXT_MMAP_SRCS += pyext/obj/mmapmodule.c
-
-PYEXT_MMAP_LOBJS = $(PYEXT_MMAP_SRCS:.c=.lo)
-PYEXT_MMAP_OBJS = $(PYEXT_MMAP_SRCS:.c=.o)
-
-PYEXT_MMAP_SHARED = pyext/mmap$(PYTHON_SOEXT)
-PYEXT_MMAP_STATIC = pyext/mmap$(OS_ARCHIVE_EXT)
-
-$(PYEXT_MMAP_SHARED): $(PYEXT_MMAP_LOBJS)
-$(PYEXT_MMAP_STATIC): $(PYEXT_MMAP_OBJS)
-
-pyext-mmap-shared: $(PYEXT_MMAP_SHARED)
-pyext-mmap-static: $(PYEXT_MMAP_STATIC)
-
-pyext-mmap-clean:
- rm -f $(PYEXT_MMAP_LOBJS)
- rm -f $(PYEXT_MMAP_OBJS)
- rm -f $(PYEXT_MMAP_SHARED)
- rm -f $(PYEXT_MMAP_STATIC)
-
-clean: pyext-mmap-clean
-
-.PHONY: pyext-mmap-shared
-.PHONY: pyext-mmap-static
-.PHONY: pyext-mmap-clean
-
-
-# ossaudiodev
-PYEXT_OSSAUDIODEV_SRCS += pyext/obj/ossaudiodev.c
-
-PYEXT_OSSAUDIODEV_LOBJS = $(PYEXT_OSSAUDIODEV_SRCS:.c=.lo)
-PYEXT_OSSAUDIODEV_OBJS = $(PYEXT_OSSAUDIODEV_SRCS:.c=.o)
-
-PYEXT_OSSAUDIODEV_SHARED = pyext/ossaudiodev$(PYTHON_SOEXT)
-PYEXT_OSSAUDIODEV_STATIC = pyext/ossaudiodev$(OS_ARCHIVE_EXT)
-
-$(PYEXT_OSSAUDIODEV_SHARED): $(PYEXT_OSSAUDIODEV_LOBJS)
-$(PYEXT_OSSAUDIODEV_STATIC): $(PYEXT_OSSAUDIODEV_OBJS)
-
-pyext-ossaudiodev-shared: $(PYEXT_OSSAUDIODEV_SHARED)
-pyext-ossaudiodev-static: $(PYEXT_OSSAUDIODEV_STATIC)
-
-pyext-ossaudiodev-clean:
- rm -f $(PYEXT_OSSAUDIODEV_LOBJS)
- rm -f $(PYEXT_OSSAUDIODEV_OBJS)
- rm -f $(PYEXT_OSSAUDIODEV_SHARED)
- rm -f $(PYEXT_OSSAUDIODEV_STATIC)
-
-clean: pyext-ossaudiodev-clean
-
-.PHONY: pyext-ossaudiodev-shared
-.PHONY: pyext-ossaudiodev-static
-.PHONY: pyext-ossaudiodev-clean
-
-
-# parser
-PYEXT_PARSER_SRCS += pyext/obj/parsermodule.c
-
-PYEXT_PARSER_LOBJS = $(PYEXT_PARSER_SRCS:.c=.lo)
-PYEXT_PARSER_OBJS = $(PYEXT_PARSER_SRCS:.c=.o)
-
-PYEXT_PARSER_SHARED = pyext/parser$(PYTHON_SOEXT)
-PYEXT_PARSER_STATIC = pyext/parser$(OS_ARCHIVE_EXT)
-
-$(PYEXT_PARSER_SHARED): $(PYEXT_PARSER_LOBJS)
-$(PYEXT_PARSER_STATIC): $(PYEXT_PARSER_OBJS)
-
-pyext-parser-shared: $(PYEXT_PARSER_SHARED)
-pyext-parser-static: $(PYEXT_PARSER_STATIC)
-
-pyext-parser-clean:
- rm -f $(PYEXT_PARSER_LOBJS)
- rm -f $(PYEXT_PARSER_OBJS)
- rm -f $(PYEXT_PARSER_SHARED)
- rm -f $(PYEXT_PARSER_STATIC)
-
-clean: pyext-parser-clean
-
-.PHONY: pyext-parser-shared
-.PHONY: pyext-parser-static
-.PHONY: pyext-parser-clean
-
-
-# resource
-PYEXT_RESOURCE_SRCS += pyext/obj/resource.c
-
-PYEXT_RESOURCE_LOBJS = $(PYEXT_RESOURCE_SRCS:.c=.lo)
-PYEXT_RESOURCE_OBJS = $(PYEXT_RESOURCE_SRCS:.c=.o)
-
-PYEXT_RESOURCE_SHARED = pyext/resource$(PYTHON_SOEXT)
-PYEXT_RESOURCE_STATIC = pyext/resource$(OS_ARCHIVE_EXT)
-
-$(PYEXT_RESOURCE_SHARED): $(PYEXT_RESOURCE_LOBJS)
-$(PYEXT_RESOURCE_STATIC): $(PYEXT_RESOURCE_OBJS)
-
-pyext-resource-shared: $(PYEXT_RESOURCE_SHARED)
-pyext-resource-static: $(PYEXT_RESOURCE_STATIC)
-
-pyext-resource-clean:
- rm -f $(PYEXT_RESOURCE_LOBJS)
- rm -f $(PYEXT_RESOURCE_OBJS)
- rm -f $(PYEXT_RESOURCE_SHARED)
- rm -f $(PYEXT_RESOURCE_STATIC)
-
-clean: pyext-resource-clean
-
-.PHONY: pyext-resource-shared
-.PHONY: pyext-resource-static
-.PHONY: pyext-resource-clean
-
-
-# select
-PYEXT_SELECT_SRCS += pyext/obj/selectmodule.c
-
-PYEXT_SELECT_LOBJS = $(PYEXT_SELECT_SRCS:.c=.lo)
-PYEXT_SELECT_OBJS = $(PYEXT_SELECT_SRCS:.c=.o)
-
-PYEXT_SELECT_SHARED = pyext/select$(PYTHON_SOEXT)
-PYEXT_SELECT_STATIC = pyext/select$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SELECT_SHARED): $(PYEXT_SELECT_LOBJS)
-$(PYEXT_SELECT_STATIC): $(PYEXT_SELECT_OBJS)
-
-pyext-select-shared: $(PYEXT_SELECT_SHARED)
-pyext-select-static: $(PYEXT_SELECT_STATIC)
-
-pyext-select-clean:
- rm -f $(PYEXT_SELECT_LOBJS)
- rm -f $(PYEXT_SELECT_OBJS)
- rm -f $(PYEXT_SELECT_SHARED)
- rm -f $(PYEXT_SELECT_STATIC)
-
-clean: pyext-select-clean
-
-.PHONY: pyext-select-shared
-.PHONY: pyext-select-static
-.PHONY: pyext-select-clean
-
-
-# spwd
-PYEXT_SPWD_SRCS += pyext/obj/spwdmodule.c
-
-PYEXT_SPWD_LOBJS = $(PYEXT_SPWD_SRCS:.c=.lo)
-PYEXT_SPWD_OBJS = $(PYEXT_SPWD_SRCS:.c=.o)
-
-PYEXT_SPWD_SHARED = pyext/spwd$(PYTHON_SOEXT)
-PYEXT_SPWD_STATIC = pyext/spwd$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SPWD_SHARED): $(PYEXT_SPWD_LOBJS)
-$(PYEXT_SPWD_STATIC): $(PYEXT_SPWD_OBJS)
-
-pyext-spwd-shared: $(PYEXT_SPWD_SHARED)
-pyext-spwd-static: $(PYEXT_SPWD_STATIC)
-
-pyext-spwd-clean:
- rm -f $(PYEXT_SPWD_LOBJS)
- rm -f $(PYEXT_SPWD_OBJS)
- rm -f $(PYEXT_SPWD_SHARED)
- rm -f $(PYEXT_SPWD_STATIC)
-
-clean: pyext-spwd-clean
-
-.PHONY: pyext-spwd-shared
-.PHONY: pyext-spwd-static
-.PHONY: pyext-spwd-clean
-
-
-# syslog
-PYEXT_SYSLOG_SRCS += pyext/obj/syslogmodule.c
-
-PYEXT_SYSLOG_LOBJS = $(PYEXT_SYSLOG_SRCS:.c=.lo)
-PYEXT_SYSLOG_OBJS = $(PYEXT_SYSLOG_SRCS:.c=.o)
-
-PYEXT_SYSLOG_SHARED = pyext/syslog$(PYTHON_SOEXT)
-PYEXT_SYSLOG_STATIC = pyext/syslog$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SYSLOG_SHARED): $(PYEXT_SYSLOG_LOBJS)
-$(PYEXT_SYSLOG_STATIC): $(PYEXT_SYSLOG_OBJS)
-
-pyext-syslog-shared: $(PYEXT_SYSLOG_SHARED)
-pyext-syslog-static: $(PYEXT_SYSLOG_STATIC)
-
-pyext-syslog-clean:
- rm -f $(PYEXT_SYSLOG_LOBJS)
- rm -f $(PYEXT_SYSLOG_OBJS)
- rm -f $(PYEXT_SYSLOG_SHARED)
- rm -f $(PYEXT_SYSLOG_STATIC)
-
-clean: pyext-syslog-clean
-
-.PHONY: pyext-syslog-shared
-.PHONY: pyext-syslog-static
-.PHONY: pyext-syslog-clean
-
-
-# termios
-PYEXT_TERMIOS_SRCS += pyext/obj/termios.c
-
-PYEXT_TERMIOS_LOBJS = $(PYEXT_TERMIOS_SRCS:.c=.lo)
-PYEXT_TERMIOS_OBJS = $(PYEXT_TERMIOS_SRCS:.c=.o)
-
-PYEXT_TERMIOS_SHARED = pyext/termios$(PYTHON_SOEXT)
-PYEXT_TERMIOS_STATIC = pyext/termios$(OS_ARCHIVE_EXT)
-
-$(PYEXT_TERMIOS_SHARED): $(PYEXT_TERMIOS_LOBJS)
-$(PYEXT_TERMIOS_STATIC): $(PYEXT_TERMIOS_OBJS)
-
-pyext-termios-shared: $(PYEXT_TERMIOS_SHARED)
-pyext-termios-static: $(PYEXT_TERMIOS_STATIC)
-
-pyext-termios-clean:
- rm -f $(PYEXT_TERMIOS_LOBJS)
- rm -f $(PYEXT_TERMIOS_OBJS)
- rm -f $(PYEXT_TERMIOS_SHARED)
- rm -f $(PYEXT_TERMIOS_STATIC)
-
-clean: pyext-termios-clean
-
-.PHONY: pyext-termios-shared
-.PHONY: pyext-termios-static
-.PHONY: pyext-termios-clean
-
-
-# unicodedata
-PYEXT_UNICODEDATA_SRCS += pyext/obj/unicodedata.c
-
-PYEXT_UNICODEDATA_LOBJS = $(PYEXT_UNICODEDATA_SRCS:.c=.lo)
-PYEXT_UNICODEDATA_OBJS = $(PYEXT_UNICODEDATA_SRCS:.c=.o)
-
-PYEXT_UNICODEDATA_SHARED = pyext/unicodedata$(PYTHON_SOEXT)
-PYEXT_UNICODEDATA_STATIC = pyext/unicodedata$(OS_ARCHIVE_EXT)
-
-$(PYEXT_UNICODEDATA_SHARED): $(PYEXT_UNICODEDATA_LOBJS)
-$(PYEXT_UNICODEDATA_STATIC): $(PYEXT_UNICODEDATA_OBJS)
-
-pyext-unicodedata-shared: $(PYEXT_UNICODEDATA_SHARED)
-pyext-unicodedata-static: $(PYEXT_UNICODEDATA_STATIC)
-
-pyext-unicodedata-clean:
- rm -f $(PYEXT_UNICODEDATA_LOBJS)
- rm -f $(PYEXT_UNICODEDATA_OBJS)
- rm -f $(PYEXT_UNICODEDATA_SHARED)
- rm -f $(PYEXT_UNICODEDATA_STATIC)
-
-clean: pyext-unicodedata-clean
-
-.PHONY: pyext-unicodedata-shared
-.PHONY: pyext-unicodedata-static
-.PHONY: pyext-unicodedata-clean
-
-
-# xxlimited
-PYEXT_XXLIMITED_SRCS += pyext/obj/xxlimited.c
-
-PYEXT_XXLIMITED_LOBJS = $(PYEXT_XXLIMITED_SRCS:.c=.lo)
-PYEXT_XXLIMITED_OBJS = $(PYEXT_XXLIMITED_SRCS:.c=.o)
-
-PYEXT_XXLIMITED_SHARED = pyext/xxlimited$(PYTHON_SOEXT)
-PYEXT_XXLIMITED_STATIC = pyext/xxlimited$(OS_ARCHIVE_EXT)
-
-$(PYEXT_XXLIMITED_SHARED): $(PYEXT_XXLIMITED_LOBJS)
-$(PYEXT_XXLIMITED_STATIC): $(PYEXT_XXLIMITED_OBJS)
-
-pyext-xxlimited-shared: $(PYEXT_XXLIMITED_SHARED)
-pyext-xxlimited-static: $(PYEXT_XXLIMITED_STATIC)
-
-pyext-xxlimited-clean:
- rm -f $(PYEXT_XXLIMITED_LOBJS)
- rm -f $(PYEXT_XXLIMITED_OBJS)
- rm -f $(PYEXT_XXLIMITED_SHARED)
- rm -f $(PYEXT_XXLIMITED_STATIC)
-
-clean: pyext-xxlimited-clean
-
-.PHONY: pyext-xxlimited-shared
-.PHONY: pyext-xxlimited-static
-.PHONY: pyext-xxlimited-clean
-
-
-# _blake2
-PYEXT_BLAKE2_SRCS += pyext/obj/_blake2/blake2module.c
-PYEXT_BLAKE2_SRCS += pyext/obj/_blake2/blake2b_impl.c
-PYEXT_BLAKE2_SRCS += pyext/obj/_blake2/blake2s_impl.c
-
-PYEXT_BLAKE2_LOBJS = $(PYEXT_BLAKE2_SRCS:.c=.lo)
-PYEXT_BLAKE2_OBJS = $(PYEXT_BLAKE2_SRCS:.c=.o)
-
-PYEXT_BLAKE2_SHARED = pyext/_blake2$(PYTHON_SOEXT)
-PYEXT_BLAKE2_STATIC = pyext/_blake2$(OS_ARCHIVE_EXT)
-
-$(PYEXT_BLAKE2_SHARED): $(PYEXT_BLAKE2_LOBJS)
-$(PYEXT_BLAKE2_STATIC): $(PYEXT_BLAKE2_OBJS)
-
-pyext-blake2-shared: $(PYEXT_BLAKE2_SHARED)
-pyext-blake2-static: $(PYEXT_BLAKE2_STATIC)
-
-pyext-blake2-clean:
- rm -f $(PYEXT_BLAKE2_LOBJS)
- rm -f $(PYEXT_BLAKE2_OBJS)
- rm -f $(PYEXT_BLAKE2_SHARED)
- rm -f $(PYEXT_BLAKE2_STATIC)
-
-clean: pyext-blake2-clean
-
-.PHONY: pyext-blake2-shared
-.PHONY: pyext-blake2-static
-.PHONY: pyext-blake2-clean
-
-
-# _lsprof
-PYEXT_LSPROF_SRCS += pyext/obj/_lsprof.c
-PYEXT_LSPROF_SRCS += pyext/obj/rotatingtree.c
-
-PYEXT_LSPROF_LOBJS = $(PYEXT_LSPROF_SRCS:.c=.lo)
-PYEXT_LSPROF_OBJS = $(PYEXT_LSPROF_SRCS:.c=.o)
-
-PYEXT_LSPROF_SHARED = pyext/_lsprof$(PYTHON_SOEXT)
-PYEXT_LSPROF_STATIC = pyext/_lsprof$(OS_ARCHIVE_EXT)
-
-$(PYEXT_LSPROF_SHARED): $(PYEXT_LSPROF_LOBJS)
-$(PYEXT_LSPROF_STATIC): $(PYEXT_LSPROF_OBJS)
-
-pyext-lsprof-shared: $(PYEXT_LSPROF_SHARED)
-pyext-lsprof-static: $(PYEXT_LSPROF_STATIC)
-
-pyext-lsprof-clean:
- rm -f $(PYEXT_LSPROF_LOBJS)
- rm -f $(PYEXT_LSPROF_OBJS)
- rm -f $(PYEXT_LSPROF_SHARED)
- rm -f $(PYEXT_LSPROF_STATIC)
-
-clean: pyext-lsprof-clean
-
-.PHONY: pyext-lsprof-shared
-.PHONY: pyext-lsprof-static
-.PHONY: pyext-lsprof-clean
-
-
-# _multiprocessing
-PYEXT_MULTIPROCESSING_SRCS += pyext/obj/_multiprocessing/multiprocessing.c
-PYEXT_MULTIPROCESSING_SRCS += pyext/obj/_multiprocessing/semaphore.c
-
-PYEXT_MULTIPROCESSING_LOBJS = $(PYEXT_MULTIPROCESSING_SRCS:.c=.lo)
-PYEXT_MULTIPROCESSING_OBJS = $(PYEXT_MULTIPROCESSING_SRCS:.c=.o)
-
-PYEXT_MULTIPROCESSING_SHARED = pyext/_multiprocessing$(PYTHON_SOEXT)
-PYEXT_MULTIPROCESSING_STATIC = pyext/_multiprocessing$(OS_ARCHIVE_EXT)
-
-$(PYEXT_MULTIPROCESSING_SHARED):$(PYEXT_MULTIPROCESSING_LOBJS)
-$(PYEXT_MULTIPROCESSING_STATIC):$(PYEXT_MULTIPROCESSING_OBJS)
-
-pyext-multiprocessing-shared: $(PYEXT_MULTIPROCESSING_SHARED)
-pyext-multiprocessing-static: $(PYEXT_MULTIPROCESSING_STATIC)
-
-pyext-multiprocessing-clean:
- rm -f $(PYEXT_MULTIPROCESSING_LOBJS)
- rm -f $(PYEXT_MULTIPROCESSING_OBJS)
- rm -f $(PYEXT_MULTIPROCESSING_SHARED)
- rm -f $(PYEXT_MULTIPROCESSING_STATIC)
-
-clean: pyext-multiprocessing-clean
-
-.PHONY: pyext-multiprocessing-shared
-.PHONY: pyext-multiprocessing-static
-.PHONY: pyext-multiprocessing-clean
-
-
-# cmath
-PYEXT_CMATH_SRCS += pyext/obj/cmathmodule.c
-PYEXT_CMATH_SRCS += pyext/obj/_math.c
-
-PYEXT_CMATH_LOBJS = $(PYEXT_CMATH_SRCS:.c=.lo)
-PYEXT_CMATH_OBJS = $(PYEXT_CMATH_SRCS:.c=.o)
-
-PYEXT_CMATH_SHARED = pyext/cmath$(PYTHON_SOEXT)
-PYEXT_CMATH_STATIC = pyext/cmath$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CMATH_SHARED): $(PYEXT_CMATH_LOBJS)
-$(PYEXT_CMATH_STATIC): $(PYEXT_CMATH_OBJS)
-
-pyext-cmath-shared: $(PYEXT_CMATH_SHARED)
-pyext-cmath-static: $(PYEXT_CMATH_STATIC)
-
-pyext-cmath-clean:
- rm -f $(PYEXT_CMATH_LOBJS)
- rm -f $(PYEXT_CMATH_OBJS)
- rm -f $(PYEXT_CMATH_SHARED)
- rm -f $(PYEXT_CMATH_STATIC)
-
-clean: pyext-cmath-clean
-
-.PHONY: pyext-cmath-shared
-.PHONY: pyext-cmath-static
-.PHONY: pyext-cmath-clean
-
-
-# math
-PYEXT_MATH_SRCS += pyext/obj/mathmodule.c
-PYEXT_MATH_SRCS += pyext/obj/_math.c
-
-PYEXT_MATH_LOBJS = $(PYEXT_MATH_SRCS:.c=.lo)
-PYEXT_MATH_OBJS = $(PYEXT_MATH_SRCS:.c=.o)
-
-PYEXT_MATH_SHARED = pyext/math$(PYTHON_SOEXT)
-PYEXT_MATH_STATIC = pyext/math$(OS_ARCHIVE_EXT)
-
-$(PYEXT_MATH_SHARED): $(PYEXT_MATH_LOBJS)
-$(PYEXT_MATH_STATIC): $(PYEXT_MATH_OBJS)
-
-pyext-math-shared: $(PYEXT_MATH_SHARED)
-pyext-math-static: $(PYEXT_MATH_STATIC)
-
-pyext-math-clean:
- rm -f $(PYEXT_MATH_LOBJS)
- rm -f $(PYEXT_MATH_OBJS)
- rm -f $(PYEXT_MATH_SHARED)
- rm -f $(PYEXT_MATH_STATIC)
-
-clean: pyext-math-clean
-
-.PHONY: pyext-math-shared
-.PHONY: pyext-math-static
-.PHONY: pyext-math-clean
-
-
-# _bz2
-PYEXT_BZ2_SRCS += pyext/obj/_bz2module.c
-
-PYEXT_BZ2_LOBJS = $(PYEXT_BZ2_SRCS:.c=.lo)
-PYEXT_BZ2_OBJS = $(PYEXT_BZ2_SRCS:.c=.o)
-
-
-PYEXT_BZ2_SHARED = pyext/_bz2$(PYTHON_SOEXT)
-PYEXT_BZ2_STATIC = pyext/_bz2$(OS_ARCHIVE_EXT)
-
-$(PYEXT_BZ2_SHARED): LDFLAGS_DYNEXT += -lbz2
-$(PYEXT_BZ2_SHARED): $(PYEXT_BZ2_LOBJS)
-$(PYEXT_BZ2_STATIC): $(PYEXT_BZ2_OBJS)
-
-pyext-bz2-shared: $(PYEXT_BZ2_SHARED)
-pyext-bz2-static: $(PYEXT_BZ2_STATIC)
-
-pyext-bz2-clean:
- rm -f $(PYEXT_BZ2_LOBJS)
- rm -f $(PYEXT_BZ2_OBJS)
- rm -f $(PYEXT_BZ2_SHARED)
- rm -f $(PYEXT_BZ2_STATIC)
-
-clean: pyext-bz2-clean
-
-.PHONY: pyext-bz2-shared
-.PHONY: pyext-bz2-static
-.PHONY: pyext-bz2-clean
-
-
-# _ctypes
-PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/_ctypes.c
-PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/callbacks.c
-PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/callproc.c
-PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/stgdict.c
-PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/cfield.c
-
-PYEXT_CTYPES_LOBJS = $(PYEXT_CTYPES_SRCS:.c=.lo)
-PYEXT_CTYPES_OBJS = $(PYEXT_CTYPES_SRCS:.c=.o)
-
-
-PYEXT_CTYPES_SHARED = pyext/_ctypes$(PYTHON_SOEXT)
-PYEXT_CTYPES_STATIC = pyext/_ctypes$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CTYPES_SHARED): LDFLAGS_DYNEXT += -lffi
-$(PYEXT_CTYPES_SHARED): $(PYEXT_CTYPES_LOBJS)
-$(PYEXT_CTYPES_STATIC): $(PYEXT_CTYPES_OBJS)
-
-pyext-ctypes-shared: $(PYEXT_CTYPES_SHARED)
-pyext-ctypes-static: $(PYEXT_CTYPES_STATIC)
-
-pyext-ctypes-clean:
- rm -f $(PYEXT_CTYPES_LOBJS)
- rm -f $(PYEXT_CTYPES_OBJS)
- rm -f $(PYEXT_CTYPES_SHARED)
- rm -f $(PYEXT_CTYPES_STATIC)
-
-clean: pyext-ctypes-clean
-
-.PHONY: pyext-ctypes-shared
-.PHONY: pyext-ctypes-static
-.PHONY: pyext-ctypes-clean
-
-
-# _curses
-PYEXT_CURSES_SRCS += pyext/obj/_cursesmodule.c
-
-PYEXT_CURSES_LOBJS = $(PYEXT_CURSES_SRCS:.c=.lo)
-PYEXT_CURSES_OBJS = $(PYEXT_CURSES_SRCS:.c=.o)
-
-$(PYEXT_CURSES_LOBJS): CFLAGS_CONFIG += $(CFLAGS_NCURSES)
-$(PYEXT_CURSES_OBJS): CFLAGS_CONFIG += $(CFLAGS_NCURSES)
-
-PYEXT_CURSES_SHARED = pyext/_curses$(PYTHON_SOEXT)
-PYEXT_CURSES_STATIC = pyext/_curses$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CURSES_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_NCURSES)
-$(PYEXT_CURSES_SHARED): $(PYEXT_CURSES_LOBJS)
-$(PYEXT_CURSES_STATIC): $(PYEXT_CURSES_OBJS)
-
-pyext-curses-shared: $(PYEXT_CURSES_SHARED)
-pyext-curses-static: $(PYEXT_CURSES_STATIC)
-
-pyext-curses-clean:
- rm -f $(PYEXT_CURSES_LOBJS)
- rm -f $(PYEXT_CURSES_OBJS)
- rm -f $(PYEXT_CURSES_SHARED)
- rm -f $(PYEXT_CURSES_STATIC)
-
-clean: pyext-curses-clean
-
-.PHONY: pyext-curses-shared
-.PHONY: pyext-curses-static
-.PHONY: pyext-curses-clean
-
-
-# _curses_panel
-PYEXT_CURSES_PANEL_SRCS += pyext/obj/_curses_panel.c
-
-PYEXT_CURSES_PANEL_LOBJS = $(PYEXT_CURSES_PANEL_SRCS:.c=.lo)
-PYEXT_CURSES_PANEL_OBJS = $(PYEXT_CURSES_PANEL_SRCS:.c=.o)
-
-$(PYEXT_CURSES_PANEL_LOBJS): CFLAGS_CONFIG += $(CFLAGS_NCURSES)
-$(PYEXT_CURSES_PANEL_OBJS): CFLAGS_CONFIG += $(CFLAGS_NCURSES)
-
-PYEXT_CURSES_PANEL_SHARED = pyext/_curses_panel$(PYTHON_SOEXT)
-PYEXT_CURSES_PANEL_STATIC = pyext/_curses_panel$(OS_ARCHIVE_EXT)
-
-$(PYEXT_CURSES_PANEL_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_NCURSES)
-$(PYEXT_CURSES_PANEL_SHARED): $(PYEXT_CURSES_PANEL_LOBJS)
-$(PYEXT_CURSES_PANEL_STATIC): $(PYEXT_CURSES_PANEL_OBJS)
-
-pyext-curses_panel-shared: $(PYEXT_CURSES_PANEL_SHARED)
-pyext-curses_panel-static: $(PYEXT_CURSES_PANEL_STATIC)
-
-pyext-curses_panel-clean:
- rm -f $(PYEXT_CURSES_PANEL_LOBJS)
- rm -f $(PYEXT_CURSES_PANEL_OBJS)
- rm -f $(PYEXT_CURSES_PANEL_SHARED)
- rm -f $(PYEXT_CURSES_PANEL_STATIC)
-
-clean: pyext-curses_panel-clean
-
-.PHONY: pyext-curses_panel-shared
-.PHONY: pyext-curses_panel-static
-.PHONY: pyext-curses_panel-clean
-
-
-# _decimal
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/_decimal.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/basearith.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/constants.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/context.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/convolute.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/crt.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/difradix2.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/fnt.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/fourstep.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/io.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/memory.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/mpdecimal.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/numbertheory.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/sixstep.c
-PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/transpose.c
-
-PYEXT_DECIMAL_LOBJS = $(PYEXT_DECIMAL_SRCS:.c=.lo)
-PYEXT_DECIMAL_OBJS = $(PYEXT_DECIMAL_SRCS:.c=.o)
-
-$(PYEXT_DECIMAL_LOBJS): CFLAGS_CONFIG += -I$(SOURCE_DIR)/Modules/_decimal/libmpdec -DUNIVERSAL
-$(PYEXT_DECIMAL_OBJS): CFLAGS_CONFIG += -I$(SOURCE_DIR)/Modules/_decimal/libmpdec -DUNIVERSAL
-
-PYEXT_DECIMAL_SHARED = pyext/_decimal$(PYTHON_SOEXT)
-PYEXT_DECIMAL_STATIC = pyext/_decimal$(OS_ARCHIVE_EXT)
-
-$(PYEXT_DECIMAL_SHARED): $(PYEXT_DECIMAL_LOBJS)
-$(PYEXT_DECIMAL_STATIC): $(PYEXT_DECIMAL_OBJS)
-
-pyext-decimal-shared: $(PYEXT_DECIMAL_SHARED)
-pyext-decimal-static: $(PYEXT_DECIMAL_STATIC)
-
-pyext-decimal-clean:
- rm -f $(PYEXT_DECIMAL_LOBJS)
- rm -f $(PYEXT_DECIMAL_OBJS)
- rm -f $(PYEXT_DECIMAL_SHARED)
- rm -f $(PYEXT_DECIMAL_STATIC)
-
-clean: pyext-decimal-clean
-
-.PHONY: pyext-decimal-shared
-.PHONY: pyext-decimal-static
-.PHONY: pyext-decimal-clean
-
-
-# _dbm
-PYEXT_DBM_SRCS += pyext/obj/_dbmmodule.c
-
-PYEXT_DBM_LOBJS = $(PYEXT_DBM_SRCS:.c=.lo)
-PYEXT_DBM_OBJS = $(PYEXT_DBM_SRCS:.c=.o)
-
-$(PYEXT_DBM_LOBJS): CFLAGS_CONFIG += $(CFLAGS_DBM)
-$(PYEXT_DBM_OBJS): CFLAGS_CONFIG += $(CFLAGS_DBM)
-
-PYEXT_DBM_SHARED = pyext/_dbm$(PYTHON_SOEXT)
-PYEXT_DBM_STATIC = pyext/_dbm$(OS_ARCHIVE_EXT)
-
-$(PYEXT_DBM_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_DBM)
-$(PYEXT_DBM_SHARED): $(PYEXT_DBM_LOBJS)
-$(PYEXT_DBM_STATIC): $(PYEXT_DBM_OBJS)
-
-pyext-dbm-shared: $(PYEXT_DBM_SHARED)
-pyext-dbm-static: $(PYEXT_DBM_STATIC)
-
-pyext-dbm-clean:
- rm -f $(PYEXT_DBM_LOBJS)
- rm -f $(PYEXT_DBM_OBJS)
- rm -f $(PYEXT_DBM_SHARED)
- rm -f $(PYEXT_DBM_STATIC)
-
-clean: pyext-dbm-clean
-
-.PHONY: pyext-dbm-shared
-.PHONY: pyext-dbm-static
-.PHONY: pyext-dbm-clean
-
-
-# _gdbm
-PYEXT_GDBM_SRCS += pyext/obj/_gdbmmodule.c
-
-PYEXT_GDBM_LOBJS = $(PYEXT_GDBM_SRCS:.c=.lo)
-PYEXT_GDBM_OBJS = $(PYEXT_GDBM_SRCS:.c=.o)
-
-
-PYEXT_GDBM_SHARED = pyext/_gdbm$(PYTHON_SOEXT)
-PYEXT_GDBM_STATIC = pyext/_gdbm$(OS_ARCHIVE_EXT)
-
-$(PYEXT_GDBM_SHARED): LDFLAGS_DYNEXT += -lgdbm
-$(PYEXT_GDBM_SHARED): $(PYEXT_GDBM_LOBJS)
-$(PYEXT_GDBM_STATIC): $(PYEXT_GDBM_OBJS)
-
-pyext-gdbm-shared: $(PYEXT_GDBM_SHARED)
-pyext-gdbm-static: $(PYEXT_GDBM_STATIC)
-
-pyext-gdbm-clean:
- rm -f $(PYEXT_GDBM_LOBJS)
- rm -f $(PYEXT_GDBM_OBJS)
- rm -f $(PYEXT_GDBM_SHARED)
- rm -f $(PYEXT_GDBM_STATIC)
-
-clean: pyext-gdbm-clean
-
-.PHONY: pyext-gdbm-shared
-.PHONY: pyext-gdbm-static
-.PHONY: pyext-gdbm-clean
-
-
-# _hashlib
-PYEXT_HASHLIB_SRCS += pyext/obj/_hashopenssl.c
-
-PYEXT_HASHLIB_LOBJS = $(PYEXT_HASHLIB_SRCS:.c=.lo)
-PYEXT_HASHLIB_OBJS = $(PYEXT_HASHLIB_SRCS:.c=.o)
-
-
-PYEXT_HASHLIB_SHARED = pyext/_hashlib$(PYTHON_SOEXT)
-PYEXT_HASHLIB_STATIC = pyext/_hashlib$(OS_ARCHIVE_EXT)
-
-$(PYEXT_HASHLIB_SHARED): LDFLAGS_DYNEXT += -lssl -lcrypto
-$(PYEXT_HASHLIB_SHARED): $(PYEXT_HASHLIB_LOBJS)
-$(PYEXT_HASHLIB_STATIC): $(PYEXT_HASHLIB_OBJS)
-
-pyext-hashlib-shared: $(PYEXT_HASHLIB_SHARED)
-pyext-hashlib-static: $(PYEXT_HASHLIB_STATIC)
-
-pyext-hashlib-clean:
- rm -f $(PYEXT_HASHLIB_LOBJS)
- rm -f $(PYEXT_HASHLIB_OBJS)
- rm -f $(PYEXT_HASHLIB_SHARED)
- rm -f $(PYEXT_HASHLIB_STATIC)
-
-clean: pyext-hashlib-clean
-
-.PHONY: pyext-hashlib-shared
-.PHONY: pyext-hashlib-static
-.PHONY: pyext-hashlib-clean
-
-
-# _lzma
-PYEXT_LZMA_SRCS += pyext/obj/_lzmamodule.c
-
-PYEXT_LZMA_LOBJS = $(PYEXT_LZMA_SRCS:.c=.lo)
-PYEXT_LZMA_OBJS = $(PYEXT_LZMA_SRCS:.c=.o)
-
-
-PYEXT_LZMA_SHARED = pyext/_lzma$(PYTHON_SOEXT)
-PYEXT_LZMA_STATIC = pyext/_lzma$(OS_ARCHIVE_EXT)
-
-$(PYEXT_LZMA_SHARED): LDFLAGS_DYNEXT += -llzma
-$(PYEXT_LZMA_SHARED): $(PYEXT_LZMA_LOBJS)
-$(PYEXT_LZMA_STATIC): $(PYEXT_LZMA_OBJS)
-
-pyext-lzma-shared: $(PYEXT_LZMA_SHARED)
-pyext-lzma-static: $(PYEXT_LZMA_STATIC)
-
-pyext-lzma-clean:
- rm -f $(PYEXT_LZMA_LOBJS)
- rm -f $(PYEXT_LZMA_OBJS)
- rm -f $(PYEXT_LZMA_SHARED)
- rm -f $(PYEXT_LZMA_STATIC)
-
-clean: pyext-lzma-clean
-
-.PHONY: pyext-lzma-shared
-.PHONY: pyext-lzma-static
-.PHONY: pyext-lzma-clean
-
-
-# _sqlite3
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/cache.c
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/connection.c
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/cursor.c
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/microprotocols.c
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/module.c
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/prepare_protocol.c
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/row.c
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/statement.c
-PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/util.c
-
-PYEXT_SQLITE3_LOBJS = $(PYEXT_SQLITE3_SRCS:.c=.lo)
-PYEXT_SQLITE3_OBJS = $(PYEXT_SQLITE3_SRCS:.c=.o)
-
-$(PYEXT_SQLITE3_LOBJS): CFLAGS_CONFIG += $(CFLAGS_SQLITE)
-$(PYEXT_SQLITE3_OBJS): CFLAGS_CONFIG += $(CFLAGS_SQLITE)
-
-PYEXT_SQLITE3_SHARED = pyext/_sqlite3$(PYTHON_SOEXT)
-PYEXT_SQLITE3_STATIC = pyext/_sqlite3$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SQLITE3_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_SQLITE)
-$(PYEXT_SQLITE3_SHARED): $(PYEXT_SQLITE3_LOBJS)
-$(PYEXT_SQLITE3_STATIC): $(PYEXT_SQLITE3_OBJS)
-
-pyext-sqlite3-shared: $(PYEXT_SQLITE3_SHARED)
-pyext-sqlite3-static: $(PYEXT_SQLITE3_STATIC)
-
-pyext-sqlite3-clean:
- rm -f $(PYEXT_SQLITE3_LOBJS)
- rm -f $(PYEXT_SQLITE3_OBJS)
- rm -f $(PYEXT_SQLITE3_SHARED)
- rm -f $(PYEXT_SQLITE3_STATIC)
-
-clean: pyext-sqlite3-clean
-
-.PHONY: pyext-sqlite3-shared
-.PHONY: pyext-sqlite3-static
-.PHONY: pyext-sqlite3-clean
-
-
-# _ssl
-PYEXT_SSL_SRCS += pyext/obj/_ssl.c
-
-PYEXT_SSL_LOBJS = $(PYEXT_SSL_SRCS:.c=.lo)
-PYEXT_SSL_OBJS = $(PYEXT_SSL_SRCS:.c=.o)
-
-
-PYEXT_SSL_SHARED = pyext/_ssl$(PYTHON_SOEXT)
-PYEXT_SSL_STATIC = pyext/_ssl$(OS_ARCHIVE_EXT)
-
-$(PYEXT_SSL_SHARED): LDFLAGS_DYNEXT += -lssl -lcrypto
-$(PYEXT_SSL_SHARED): $(PYEXT_SSL_LOBJS)
-$(PYEXT_SSL_STATIC): $(PYEXT_SSL_OBJS)
-
-pyext-ssl-shared: $(PYEXT_SSL_SHARED)
-pyext-ssl-static: $(PYEXT_SSL_STATIC)
-
-pyext-ssl-clean:
- rm -f $(PYEXT_SSL_LOBJS)
- rm -f $(PYEXT_SSL_OBJS)
- rm -f $(PYEXT_SSL_SHARED)
- rm -f $(PYEXT_SSL_STATIC)
-
-clean: pyext-ssl-clean
-
-.PHONY: pyext-ssl-shared
-.PHONY: pyext-ssl-static
-.PHONY: pyext-ssl-clean
-
-
-# _tkinter
-PYEXT_TKINTER_SRCS += pyext/obj/_tkinter.c
-PYEXT_TKINTER_SRCS += pyext/obj/tkappinit.c
-
-PYEXT_TKINTER_LOBJS = $(PYEXT_TKINTER_SRCS:.c=.lo)
-PYEXT_TKINTER_OBJS = $(PYEXT_TKINTER_SRCS:.c=.o)
-
-$(PYEXT_TKINTER_LOBJS): CFLAGS_CONFIG += $(CFLAGS_TCLTK)
-$(PYEXT_TKINTER_OBJS): CFLAGS_CONFIG += $(CFLAGS_TCLTK)
-
-PYEXT_TKINTER_SHARED = pyext/_tkinter$(PYTHON_SOEXT)
-PYEXT_TKINTER_STATIC = pyext/_tkinter$(OS_ARCHIVE_EXT)
-
-$(PYEXT_TKINTER_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_TCLTK)
-$(PYEXT_TKINTER_SHARED): $(PYEXT_TKINTER_LOBJS)
-$(PYEXT_TKINTER_STATIC): $(PYEXT_TKINTER_OBJS)
-
-pyext-tkinter-shared: $(PYEXT_TKINTER_SHARED)
-pyext-tkinter-static: $(PYEXT_TKINTER_STATIC)
-
-pyext-tkinter-clean:
- rm -f $(PYEXT_TKINTER_LOBJS)
- rm -f $(PYEXT_TKINTER_OBJS)
- rm -f $(PYEXT_TKINTER_SHARED)
- rm -f $(PYEXT_TKINTER_STATIC)
-
-clean: pyext-tkinter-clean
-
-.PHONY: pyext-tkinter-shared
-.PHONY: pyext-tkinter-static
-.PHONY: pyext-tkinter-clean
-
-
-# binascii
-PYEXT_BINASCII_SRCS += pyext/obj/binascii.c
-
-PYEXT_BINASCII_LOBJS = $(PYEXT_BINASCII_SRCS:.c=.lo)
-PYEXT_BINASCII_OBJS = $(PYEXT_BINASCII_SRCS:.c=.o)
-
-
-PYEXT_BINASCII_SHARED = pyext/binascii$(PYTHON_SOEXT)
-PYEXT_BINASCII_STATIC = pyext/binascii$(OS_ARCHIVE_EXT)
-
-$(PYEXT_BINASCII_SHARED): LDFLAGS_DYNEXT += -lz
-$(PYEXT_BINASCII_SHARED): $(PYEXT_BINASCII_LOBJS)
-$(PYEXT_BINASCII_STATIC): $(PYEXT_BINASCII_OBJS)
-
-pyext-binascii-shared: $(PYEXT_BINASCII_SHARED)
-pyext-binascii-static: $(PYEXT_BINASCII_STATIC)
-
-pyext-binascii-clean:
- rm -f $(PYEXT_BINASCII_LOBJS)
- rm -f $(PYEXT_BINASCII_OBJS)
- rm -f $(PYEXT_BINASCII_SHARED)
- rm -f $(PYEXT_BINASCII_STATIC)
-
-clean: pyext-binascii-clean
-
-.PHONY: pyext-binascii-shared
-.PHONY: pyext-binascii-static
-.PHONY: pyext-binascii-clean
-
-
-# pyexpat
-PYEXT_PYEXPAT_SRCS += pyext/obj/pyexpat.c
-
-PYEXT_PYEXPAT_LOBJS = $(PYEXT_PYEXPAT_SRCS:.c=.lo)
-PYEXT_PYEXPAT_OBJS = $(PYEXT_PYEXPAT_SRCS:.c=.o)
-
-
-PYEXT_PYEXPAT_SHARED = pyext/pyexpat$(PYTHON_SOEXT)
-PYEXT_PYEXPAT_STATIC = pyext/pyexpat$(OS_ARCHIVE_EXT)
-
-$(PYEXT_PYEXPAT_SHARED): LDFLAGS_DYNEXT += -lexpat
-$(PYEXT_PYEXPAT_SHARED): $(PYEXT_PYEXPAT_LOBJS)
-$(PYEXT_PYEXPAT_STATIC): $(PYEXT_PYEXPAT_OBJS)
-
-pyext-pyexpat-shared: $(PYEXT_PYEXPAT_SHARED)
-pyext-pyexpat-static: $(PYEXT_PYEXPAT_STATIC)
-
-pyext-pyexpat-clean:
- rm -f $(PYEXT_PYEXPAT_LOBJS)
- rm -f $(PYEXT_PYEXPAT_OBJS)
- rm -f $(PYEXT_PYEXPAT_SHARED)
- rm -f $(PYEXT_PYEXPAT_STATIC)
-
-clean: pyext-pyexpat-clean
-
-.PHONY: pyext-pyexpat-shared
-.PHONY: pyext-pyexpat-static
-.PHONY: pyext-pyexpat-clean
-
-
-# readline
-PYEXT_READLINE_SRCS += pyext/obj/readline.c
-
-PYEXT_READLINE_LOBJS = $(PYEXT_READLINE_SRCS:.c=.lo)
-PYEXT_READLINE_OBJS = $(PYEXT_READLINE_SRCS:.c=.o)
-
-
-PYEXT_READLINE_SHARED = pyext/readline$(PYTHON_SOEXT)
-PYEXT_READLINE_STATIC = pyext/readline$(OS_ARCHIVE_EXT)
-
-$(PYEXT_READLINE_SHARED): LDFLAGS_DYNEXT += -lreadline
-$(PYEXT_READLINE_SHARED): $(PYEXT_READLINE_LOBJS)
-$(PYEXT_READLINE_STATIC): $(PYEXT_READLINE_OBJS)
-
-pyext-readline-shared: $(PYEXT_READLINE_SHARED)
-pyext-readline-static: $(PYEXT_READLINE_STATIC)
-
-pyext-readline-clean:
- rm -f $(PYEXT_READLINE_LOBJS)
- rm -f $(PYEXT_READLINE_OBJS)
- rm -f $(PYEXT_READLINE_SHARED)
- rm -f $(PYEXT_READLINE_STATIC)
-
-clean: pyext-readline-clean
-
-.PHONY: pyext-readline-shared
-.PHONY: pyext-readline-static
-.PHONY: pyext-readline-clean
-
-
-# zlib
-PYEXT_ZLIB_SRCS += pyext/obj/zlibmodule.c
-
-PYEXT_ZLIB_LOBJS = $(PYEXT_ZLIB_SRCS:.c=.lo)
-PYEXT_ZLIB_OBJS = $(PYEXT_ZLIB_SRCS:.c=.o)
-
-
-PYEXT_ZLIB_SHARED = pyext/zlib$(PYTHON_SOEXT)
-PYEXT_ZLIB_STATIC = pyext/zlib$(OS_ARCHIVE_EXT)
-
-$(PYEXT_ZLIB_SHARED): LDFLAGS_DYNEXT += -lz
-$(PYEXT_ZLIB_SHARED): $(PYEXT_ZLIB_LOBJS)
-$(PYEXT_ZLIB_STATIC): $(PYEXT_ZLIB_OBJS)
-
-pyext-zlib-shared: $(PYEXT_ZLIB_SHARED)
-pyext-zlib-static: $(PYEXT_ZLIB_STATIC)
-
-pyext-zlib-clean:
- rm -f $(PYEXT_ZLIB_LOBJS)
- rm -f $(PYEXT_ZLIB_OBJS)
- rm -f $(PYEXT_ZLIB_SHARED)
- rm -f $(PYEXT_ZLIB_STATIC)
-
-clean: pyext-zlib-clean
-
-.PHONY: pyext-zlib-shared
-.PHONY: pyext-zlib-static
-.PHONY: pyext-zlib-clean
-
-
+ifneq ($(PYTHON_MAJOR),)
+include $(PROJECT_DIR)/project/variants/$(PYTHON_MAJOR).$(PYTHON_MINOR).$(PYTHON_MICRO)/pyexts.mk
+endif
diff --git a/project/variants/3.6.3/common.mk b/project/variants/3.6.3/common.mk
new file mode 100644
index 0000000..b68c998
--- /dev/null
+++ b/project/variants/3.6.3/common.mk
@@ -0,0 +1,167 @@
+core/%.lo: CFLAGS_SHARED += -DPy_BUILD_CORE
+core/%.o: CFLAGS_STATIC += -DPy_BUILD_CORE
+
+core/Modules/config.lo: build/config.c $(ALL_HEADERS) host.tag tree.tag config.tag
+ $(CC) -c -o $@ $< $(CFLAGS_SHARED)
+
+core/Modules/config.o: build/config.c $(ALL_HEADERS) host.tag tree.tag config.tag
+ $(CC) -c -o $@ $< $(CFLAGS_STATIC)
+
+core/%.lo: $(SOURCE_DIR)/%.c $(ALL_HEADERS) host.tag tree.tag config.tag
+ $(CC) -c -o $@ $< $(CFLAGS_SHARED)
+
+core/%.o: $(SOURCE_DIR)/%.c $(ALL_HEADERS) host.tag tree.tag config.tag
+ $(CC) -c -o $@ $< $(CFLAGS_STATIC)
+
+
+MODULE_SRCS = \
+ core/Modules/_codecsmodule.c \
+ core/Modules/_collectionsmodule.c \
+ core/Modules/_functoolsmodule.c \
+ core/Modules/_localemodule.c \
+ core/Modules/_operator.c \
+ core/Modules/_sre.c \
+ core/Modules/_stat.c \
+ core/Modules/_threadmodule.c \
+ core/Modules/_tracemalloc.c \
+ core/Modules/_weakref.c \
+ core/Modules/atexitmodule.c \
+ core/Modules/config.c \
+ core/Modules/errnomodule.c \
+ core/Modules/faulthandler.c \
+ core/Modules/gcmodule.c \
+ core/Modules/getbuildinfo.c \
+ core/Modules/getpath.c \
+ core/Modules/hashtable.c \
+ core/Modules/itertoolsmodule.c \
+ core/Modules/main.c \
+ core/Modules/posixmodule.c \
+ core/Modules/pwdmodule.c \
+ core/Modules/signalmodule.c \
+ core/Modules/symtablemodule.c \
+ core/Modules/timemodule.c \
+ core/Modules/xxsubtype.c \
+ core/Modules/zipimport.c \
+ core/Modules/_io/_iomodule.c \
+ core/Modules/_io/bufferedio.c \
+ core/Modules/_io/bytesio.c \
+ core/Modules/_io/fileio.c \
+ core/Modules/_io/iobase.c \
+ core/Modules/_io/stringio.c \
+ core/Modules/_io/textio.c \
+
+OBJECT_SRCS = \
+ core/Objects/abstract.c \
+ core/Objects/accu.c \
+ core/Objects/boolobject.c \
+ core/Objects/bytearrayobject.c \
+ core/Objects/bytes_methods.c \
+ core/Objects/bytesobject.c \
+ core/Objects/capsule.c \
+ core/Objects/cellobject.c \
+ core/Objects/classobject.c \
+ core/Objects/codeobject.c \
+ core/Objects/complexobject.c \
+ core/Objects/descrobject.c \
+ core/Objects/dictobject.c \
+ core/Objects/enumobject.c \
+ core/Objects/exceptions.c \
+ core/Objects/fileobject.c \
+ core/Objects/floatobject.c \
+ core/Objects/frameobject.c \
+ core/Objects/funcobject.c \
+ core/Objects/genobject.c \
+ core/Objects/iterobject.c \
+ core/Objects/listobject.c \
+ core/Objects/longobject.c \
+ core/Objects/memoryobject.c \
+ core/Objects/methodobject.c \
+ core/Objects/moduleobject.c \
+ core/Objects/namespaceobject.c \
+ core/Objects/object.c \
+ core/Objects/obmalloc.c \
+ core/Objects/odictobject.c \
+ core/Objects/rangeobject.c \
+ core/Objects/setobject.c \
+ core/Objects/sliceobject.c \
+ core/Objects/structseq.c \
+ core/Objects/tupleobject.c \
+ core/Objects/typeobject.c \
+ core/Objects/unicodectype.c \
+ core/Objects/unicodeobject.c \
+ core/Objects/weakrefobject.c \
+
+PARSER_SRCS = \
+ core/Parser/acceler.c \
+ core/Parser/bitset.c \
+ core/Parser/firstsets.c \
+ core/Parser/grammar.c \
+ core/Parser/grammar1.c \
+ core/Parser/listnode.c \
+ core/Parser/metagrammar.c \
+ core/Parser/myreadline.c \
+ core/Parser/node.c \
+ core/Parser/parser.c \
+ core/Parser/parsetok.c \
+ core/Parser/pgen.c \
+ core/Parser/tokenizer.c \
+
+PYTHON_SRCS = \
+ core/Python/Python-ast.c \
+ core/Python/_warnings.c \
+ core/Python/asdl.c \
+ core/Python/ast.c \
+ core/Python/bltinmodule.c \
+ core/Python/ceval.c \
+ core/Python/codecs.c \
+ core/Python/compile.c \
+ core/Python/dtoa.c \
+ core/Python/dynamic_annotations.c \
+ core/Python/errors.c \
+ core/Python/fileutils.c \
+ core/Python/formatter_unicode.c \
+ core/Python/frozen.c \
+ core/Python/frozenmain.c \
+ core/Python/future.c \
+ core/Python/getargs.c \
+ core/Python/getcompiler.c \
+ core/Python/getcopyright.c \
+ core/Python/getopt.c \
+ core/Python/getplatform.c \
+ core/Python/getversion.c \
+ core/Python/graminit.c \
+ core/Python/import.c \
+ core/Python/importdl.c \
+ core/Python/marshal.c \
+ core/Python/modsupport.c \
+ core/Python/mysnprintf.c \
+ core/Python/mystrtoul.c \
+ core/Python/peephole.c \
+ core/Python/pyarena.c \
+ core/Python/pyctype.c \
+ core/Python/pyfpe.c \
+ core/Python/pyhash.c \
+ core/Python/pylifecycle.c \
+ core/Python/pymath.c \
+ core/Python/pystate.c \
+ core/Python/pystrcmp.c \
+ core/Python/pystrhex.c \
+ core/Python/pystrtod.c \
+ core/Python/pythonrun.c \
+ core/Python/pytime.c \
+ core/Python/random.c \
+ core/Python/structmember.c \
+ core/Python/symtable.c \
+ core/Python/sysmodule.c \
+ core/Python/thread.c \
+ core/Python/traceback.c \
+
+APP_SRCS = \
+ core/Programs/python.c \
+
+COMMON_SRCS = \
+ $(CONFIG_SRCS) \
+ $(MODULE_SRCS) \
+ $(OBJECT_SRCS) \
+ $(PARSER_SRCS) \
+ $(PYTHON_SRCS) \
diff --git a/project/variants/3.6.3/headers.mk b/project/variants/3.6.3/headers.mk
new file mode 100644
index 0000000..67865bc
--- /dev/null
+++ b/project/variants/3.6.3/headers.mk
@@ -0,0 +1,103 @@
+API_HEADERS = \
+ build/pyconfig.h \
+ $(SOURCE_DIR)/Include/Python-ast.h \
+ $(SOURCE_DIR)/Include/Python.h \
+ $(SOURCE_DIR)/Include/abstract.h \
+ $(SOURCE_DIR)/Include/accu.h \
+ $(SOURCE_DIR)/Include/asdl.h \
+ $(SOURCE_DIR)/Include/ast.h \
+ $(SOURCE_DIR)/Include/bitset.h \
+ $(SOURCE_DIR)/Include/bltinmodule.h \
+ $(SOURCE_DIR)/Include/boolobject.h \
+ $(SOURCE_DIR)/Include/bytearrayobject.h \
+ $(SOURCE_DIR)/Include/bytes_methods.h \
+ $(SOURCE_DIR)/Include/bytesobject.h \
+ $(SOURCE_DIR)/Include/cellobject.h \
+ $(SOURCE_DIR)/Include/ceval.h \
+ $(SOURCE_DIR)/Include/classobject.h \
+ $(SOURCE_DIR)/Include/code.h \
+ $(SOURCE_DIR)/Include/codecs.h \
+ $(SOURCE_DIR)/Include/compile.h \
+ $(SOURCE_DIR)/Include/complexobject.h \
+ $(SOURCE_DIR)/Include/datetime.h \
+ $(SOURCE_DIR)/Include/descrobject.h \
+ $(SOURCE_DIR)/Include/dictobject.h \
+ $(SOURCE_DIR)/Include/dtoa.h \
+ $(SOURCE_DIR)/Include/dynamic_annotations.h \
+ $(SOURCE_DIR)/Include/enumobject.h \
+ $(SOURCE_DIR)/Include/errcode.h \
+ $(SOURCE_DIR)/Include/eval.h \
+ $(SOURCE_DIR)/Include/fileobject.h \
+ $(SOURCE_DIR)/Include/fileutils.h \
+ $(SOURCE_DIR)/Include/floatobject.h \
+ $(SOURCE_DIR)/Include/frameobject.h \
+ $(SOURCE_DIR)/Include/funcobject.h \
+ $(SOURCE_DIR)/Include/genobject.h \
+ $(SOURCE_DIR)/Include/graminit.h \
+ $(SOURCE_DIR)/Include/grammar.h \
+ $(SOURCE_DIR)/Include/import.h \
+ $(SOURCE_DIR)/Include/intrcheck.h \
+ $(SOURCE_DIR)/Include/iterobject.h \
+ $(SOURCE_DIR)/Include/listobject.h \
+ $(SOURCE_DIR)/Include/longintrepr.h \
+ $(SOURCE_DIR)/Include/longobject.h \
+ $(SOURCE_DIR)/Include/marshal.h \
+ $(SOURCE_DIR)/Include/memoryobject.h \
+ $(SOURCE_DIR)/Include/metagrammar.h \
+ $(SOURCE_DIR)/Include/methodobject.h \
+ $(SOURCE_DIR)/Include/modsupport.h \
+ $(SOURCE_DIR)/Include/moduleobject.h \
+ $(SOURCE_DIR)/Include/namespaceobject.h \
+ $(SOURCE_DIR)/Include/node.h \
+ $(SOURCE_DIR)/Include/object.h \
+ $(SOURCE_DIR)/Include/objimpl.h \
+ $(SOURCE_DIR)/Include/odictobject.h \
+ $(SOURCE_DIR)/Include/opcode.h \
+ $(SOURCE_DIR)/Include/osdefs.h \
+ $(SOURCE_DIR)/Include/osmodule.h \
+ $(SOURCE_DIR)/Include/parsetok.h \
+ $(SOURCE_DIR)/Include/patchlevel.h \
+ $(SOURCE_DIR)/Include/pgen.h \
+ $(SOURCE_DIR)/Include/pgenheaders.h \
+ $(SOURCE_DIR)/Include/py_curses.h \
+ $(SOURCE_DIR)/Include/pyarena.h \
+ $(SOURCE_DIR)/Include/pyatomic.h \
+ $(SOURCE_DIR)/Include/pycapsule.h \
+ $(SOURCE_DIR)/Include/pyctype.h \
+ $(SOURCE_DIR)/Include/pydebug.h \
+ $(SOURCE_DIR)/Include/pydtrace.h \
+ $(SOURCE_DIR)/Include/pyerrors.h \
+ $(SOURCE_DIR)/Include/pyexpat.h \
+ $(SOURCE_DIR)/Include/pyfpe.h \
+ $(SOURCE_DIR)/Include/pygetopt.h \
+ $(SOURCE_DIR)/Include/pyhash.h \
+ $(SOURCE_DIR)/Include/pylifecycle.h \
+ $(SOURCE_DIR)/Include/pymacconfig.h \
+ $(SOURCE_DIR)/Include/pymacro.h \
+ $(SOURCE_DIR)/Include/pymath.h \
+ $(SOURCE_DIR)/Include/pymem.h \
+ $(SOURCE_DIR)/Include/pyport.h \
+ $(SOURCE_DIR)/Include/pystate.h \
+ $(SOURCE_DIR)/Include/pystrcmp.h \
+ $(SOURCE_DIR)/Include/pystrhex.h \
+ $(SOURCE_DIR)/Include/pystrtod.h \
+ $(SOURCE_DIR)/Include/pythonrun.h \
+ $(SOURCE_DIR)/Include/pythread.h \
+ $(SOURCE_DIR)/Include/pytime.h \
+ $(SOURCE_DIR)/Include/rangeobject.h \
+ $(SOURCE_DIR)/Include/setobject.h \
+ $(SOURCE_DIR)/Include/sliceobject.h \
+ $(SOURCE_DIR)/Include/structmember.h \
+ $(SOURCE_DIR)/Include/structseq.h \
+ $(SOURCE_DIR)/Include/symtable.h \
+ $(SOURCE_DIR)/Include/sysmodule.h \
+ $(SOURCE_DIR)/Include/token.h \
+ $(SOURCE_DIR)/Include/traceback.h \
+ $(SOURCE_DIR)/Include/tupleobject.h \
+ $(SOURCE_DIR)/Include/typeslots.h \
+ $(SOURCE_DIR)/Include/ucnhash.h \
+ $(SOURCE_DIR)/Include/unicodeobject.h \
+ $(SOURCE_DIR)/Include/warnings.h \
+ $(SOURCE_DIR)/Include/weakrefobject.h \
+
+ALL_HEADERS = $(API_HEADERS) $(INTERNAL_HEADERS)
diff --git a/profiles/linkage/inittab.h b/project/variants/3.6.3/linkage/inittab.h
index d49c4cb..d49c4cb 100644
--- a/profiles/linkage/inittab.h
+++ b/project/variants/3.6.3/linkage/inittab.h
diff --git a/profiles/linkage/pycompile.h b/project/variants/3.6.3/linkage/pycompile.h
index ad74185..ad74185 100644
--- a/profiles/linkage/pycompile.h
+++ b/project/variants/3.6.3/linkage/pycompile.h
diff --git a/profiles/linkage/static.h b/project/variants/3.6.3/linkage/static.h
index 1290a95..1290a95 100644
--- a/profiles/linkage/static.h
+++ b/project/variants/3.6.3/linkage/static.h
diff --git a/project/variants/3.6.3/pyexts.h b/project/variants/3.6.3/pyexts.h
new file mode 100644
index 0000000..0cd5a7e
--- /dev/null
+++ b/project/variants/3.6.3/pyexts.h
@@ -0,0 +1,194 @@
+/*******************************************************************/
+/* sbpython3: external configurable build project for Python-3.x. */
+/* Copyright (C) 2018 Z. Gilboa */
+/* Released under the Standard MIT License; see COPYING.SBPYTHON3.*/
+/*******************************************************************/
+
+/*******************************************************************/
+/* pyexts.c: a simple development-time utility for generating */
+/* make rules for python's extension modules. The utility is */
+/* included with the sbpython3 project for reference only. */
+/* */
+/* cc -std=c99 -D_XOPEN_SOURCE=700 pyexts.c */
+/*******************************************************************/
+
+#define PYEXT_LIST(...) (const char *[]){__VA_ARGS__,0}
+#define PYEXT_SIMPLE(name,...) {name,PYEXT_LIST(__VA_ARGS__),0,0,0,0}
+
+#define PYEXT_COMMON(name,hvar,lvar,...) {name,PYEXT_LIST(__VA_ARGS__), \
+ PYEXT_LIST(hvar),0, \
+ PYEXT_LIST(lvar),0}
+
+#define PYEXT_ALTSTD(name,cstd,...) {name,PYEXT_LIST(__VA_ARGS__), \
+ 0,PYEXT_LIST(cstd),0,0}
+
+struct pyext_meta {
+ const char * name;
+ const char ** srcs;
+ const char ** hdrs;
+ const char ** cstd;
+ const char ** vars;
+ const char ** deps;
+};
+
+static const struct pyext_meta pyexts[] = {
+ PYEXT_SIMPLE("_multibytecodec", "cjkcodecs/multibytecodec"),
+ PYEXT_SIMPLE("_codecs_cn", "cjkcodecs/_codecs_cn"),
+ PYEXT_SIMPLE("_codecs_hk", "cjkcodecs/_codecs_hk"),
+ PYEXT_SIMPLE("_codecs_jp", "cjkcodecs/_codecs_jp"),
+ PYEXT_SIMPLE("_codecs_kr", "cjkcodecs/_codecs_kr"),
+ PYEXT_SIMPLE("_codecs_tw", "cjkcodecs/_codecs_tw"),
+ PYEXT_SIMPLE("_codecs_iso2022", "cjkcodecs/_codecs_iso2022"),
+
+ PYEXT_SIMPLE("_asyncio", "_asynciomodule"),
+ PYEXT_SIMPLE("_bisect", "_bisectmodule"),
+ PYEXT_SIMPLE("_crypt", "_cryptmodule"),
+ PYEXT_SIMPLE("_csv", "_csv"),
+ PYEXT_SIMPLE("_ctypes_test", "_ctypes/_ctypes_test"),
+ PYEXT_SIMPLE("_datetime", "_datetimemodule"),
+ PYEXT_SIMPLE("_elementtree", "_elementtree"),
+ PYEXT_SIMPLE("_heapq", "_heapqmodule"),
+ PYEXT_SIMPLE("_json", "_json"),
+ PYEXT_SIMPLE("_md5", "md5module"),
+ PYEXT_SIMPLE("_opcode", "_opcode"),
+ PYEXT_SIMPLE("_pickle", "_pickle"),
+ PYEXT_SIMPLE("_posixsubprocess", "_posixsubprocess"),
+ PYEXT_SIMPLE("_random", "_randommodule"),
+ PYEXT_SIMPLE("_sha1", "sha1module"),
+ PYEXT_SIMPLE("_sha256", "sha256module"),
+ PYEXT_SIMPLE("_sha3", "_sha3/sha3module"),
+ PYEXT_SIMPLE("_sha512", "sha512module"),
+ PYEXT_SIMPLE("_socket", "socketmodule"),
+ PYEXT_SIMPLE("_struct", "_struct"),
+ PYEXT_SIMPLE("_testbuffer", "_testbuffer"),
+ PYEXT_SIMPLE("_testcapi", "_testcapimodule"),
+ PYEXT_SIMPLE("_testimportmultiple", "_testimportmultiple"),
+ PYEXT_SIMPLE("_testmultiphase", "_testmultiphase"),
+
+
+
+ PYEXT_SIMPLE("array", "arraymodule"),
+ PYEXT_SIMPLE("audioop", "audioop"),
+ PYEXT_SIMPLE("fcntl", "fcntlmodule"),
+ PYEXT_SIMPLE("grp", "grpmodule"),
+ PYEXT_SIMPLE("mmap", "mmapmodule"),
+ PYEXT_SIMPLE("ossaudiodev", "ossaudiodev"),
+ PYEXT_SIMPLE("parser", "parsermodule"),
+ PYEXT_SIMPLE("resource", "resource"),
+ PYEXT_SIMPLE("select", "selectmodule"),
+ PYEXT_SIMPLE("spwd", "spwdmodule"),
+ PYEXT_SIMPLE("syslog", "syslogmodule"),
+ PYEXT_SIMPLE("termios", "termios"),
+ PYEXT_SIMPLE("unicodedata", "unicodedata"),
+ PYEXT_SIMPLE("xxlimited", "xxlimited"),
+
+ PYEXT_SIMPLE("_blake2",
+ "_blake2/blake2module",
+ "_blake2/blake2b_impl",
+ "_blake2/blake2s_impl"),
+
+ PYEXT_SIMPLE("_lsprof",
+ "_lsprof",
+ "rotatingtree"),
+
+ PYEXT_SIMPLE("_multiprocessing",
+ "_multiprocessing/multiprocessing",
+ "_multiprocessing/semaphore"),
+
+ PYEXT_SIMPLE("cmath",
+ "cmathmodule",
+ "_math"),
+
+ PYEXT_SIMPLE("math",
+ "mathmodule",
+ "_math"),
+
+ PYEXT_COMMON("_bz2",0,"-lbz2",
+ "_bz2module"),
+
+ PYEXT_COMMON("_ctypes",0,"-lffi",
+ "_ctypes/_ctypes",
+ "_ctypes/callbacks",
+ "_ctypes/callproc",
+ "_ctypes/stgdict",
+ "_ctypes/cfield"),
+
+ PYEXT_COMMON("_curses",
+ "$(CFLAGS_NCURSES)",
+ "$(LDFLAGS_NCURSES)",
+ "_cursesmodule"),
+
+ PYEXT_COMMON("_curses_panel",
+ "$(CFLAGS_NCURSES)",
+ "$(LDFLAGS_NCURSES)",
+ "_curses_panel"),
+
+ PYEXT_COMMON("_decimal",
+ "-I$(SOURCE_DIR)/Modules/_decimal/libmpdec -DUNIVERSAL",
+ 0,
+ "_decimal/_decimal",
+ "_decimal/libmpdec/basearith",
+ "_decimal/libmpdec/constants",
+ "_decimal/libmpdec/context",
+ "_decimal/libmpdec/convolute",
+ "_decimal/libmpdec/crt",
+ "_decimal/libmpdec/difradix2",
+ "_decimal/libmpdec/fnt",
+ "_decimal/libmpdec/fourstep",
+ "_decimal/libmpdec/io",
+ "_decimal/libmpdec/memory",
+ "_decimal/libmpdec/mpdecimal",
+ "_decimal/libmpdec/numbertheory",
+ "_decimal/libmpdec/sixstep",
+ "_decimal/libmpdec/transpose"),
+
+ PYEXT_COMMON("_dbm",
+ "$(CFLAGS_DBM)",
+ "$(LDFLAGS_DBM)",
+ "_dbmmodule"),
+
+ PYEXT_COMMON("_gdbm",0,"-lgdbm",
+ "_gdbmmodule"),
+
+ PYEXT_COMMON("_hashlib",0,"-lssl -lcrypto",
+ "_hashopenssl"),
+
+ PYEXT_COMMON("_lzma",0,"-llzma",
+ "_lzmamodule"),
+
+ PYEXT_COMMON("_sqlite3",
+ "$(CFLAGS_SQLITE)",
+ "$(LDFLAGS_SQLITE)",
+ "_sqlite/cache",
+ "_sqlite/connection",
+ "_sqlite/cursor",
+ "_sqlite/microprotocols",
+ "_sqlite/module",
+ "_sqlite/prepare_protocol",
+ "_sqlite/row",
+ "_sqlite/statement",
+ "_sqlite/util"),
+
+ PYEXT_COMMON("_ssl",0,"-lssl -lcrypto",
+ "_ssl"),
+
+ PYEXT_COMMON("_tkinter",
+ "$(CFLAGS_TCLTK)",
+ "$(LDFLAGS_TCLTK)",
+ "_tkinter",
+ "tkappinit"),
+
+ PYEXT_COMMON("binascii",0,"-lz",
+ "binascii"),
+
+ PYEXT_COMMON("pyexpat",0,"-lexpat",
+ "pyexpat"),
+
+ PYEXT_COMMON("readline",0,"-lreadline",
+ "readline"),
+
+ PYEXT_COMMON("zlib",0,"-lz",
+ "zlibmodule"),
+
+ {0,0,0,0,0,0},
+};
diff --git a/project/variants/3.6.3/pyexts.mk b/project/variants/3.6.3/pyexts.mk
new file mode 100644
index 0000000..4cc0eab
--- /dev/null
+++ b/project/variants/3.6.3/pyexts.mk
@@ -0,0 +1,1924 @@
+# _multibytecodec
+PYEXT_MULTIBYTECODEC_SRCS += pyext/obj/cjkcodecs/multibytecodec.c
+
+PYEXT_MULTIBYTECODEC_LOBJS = $(PYEXT_MULTIBYTECODEC_SRCS:.c=.lo)
+PYEXT_MULTIBYTECODEC_OBJS = $(PYEXT_MULTIBYTECODEC_SRCS:.c=.o)
+
+PYEXT_MULTIBYTECODEC_SHARED = pyext/_multibytecodec$(PYTHON_SOEXT)
+PYEXT_MULTIBYTECODEC_STATIC = pyext/_multibytecodec$(OS_ARCHIVE_EXT)
+
+$(PYEXT_MULTIBYTECODEC_SHARED): $(PYEXT_MULTIBYTECODEC_LOBJS)
+$(PYEXT_MULTIBYTECODEC_STATIC): $(PYEXT_MULTIBYTECODEC_OBJS)
+
+pyext-multibytecodec-shared: $(PYEXT_MULTIBYTECODEC_SHARED)
+pyext-multibytecodec-static: $(PYEXT_MULTIBYTECODEC_STATIC)
+
+pyext-multibytecodec-clean:
+ rm -f $(PYEXT_MULTIBYTECODEC_LOBJS)
+ rm -f $(PYEXT_MULTIBYTECODEC_OBJS)
+ rm -f $(PYEXT_MULTIBYTECODEC_SHARED)
+ rm -f $(PYEXT_MULTIBYTECODEC_STATIC)
+
+clean: pyext-multibytecodec-clean
+
+.PHONY: pyext-multibytecodec-shared
+.PHONY: pyext-multibytecodec-static
+.PHONY: pyext-multibytecodec-clean
+
+
+# _codecs_cn
+PYEXT_CODECS_CN_SRCS += pyext/obj/cjkcodecs/_codecs_cn.c
+
+PYEXT_CODECS_CN_LOBJS = $(PYEXT_CODECS_CN_SRCS:.c=.lo)
+PYEXT_CODECS_CN_OBJS = $(PYEXT_CODECS_CN_SRCS:.c=.o)
+
+PYEXT_CODECS_CN_SHARED = pyext/_codecs_cn$(PYTHON_SOEXT)
+PYEXT_CODECS_CN_STATIC = pyext/_codecs_cn$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CODECS_CN_SHARED): $(PYEXT_CODECS_CN_LOBJS)
+$(PYEXT_CODECS_CN_STATIC): $(PYEXT_CODECS_CN_OBJS)
+
+pyext-codecs_cn-shared: $(PYEXT_CODECS_CN_SHARED)
+pyext-codecs_cn-static: $(PYEXT_CODECS_CN_STATIC)
+
+pyext-codecs_cn-clean:
+ rm -f $(PYEXT_CODECS_CN_LOBJS)
+ rm -f $(PYEXT_CODECS_CN_OBJS)
+ rm -f $(PYEXT_CODECS_CN_SHARED)
+ rm -f $(PYEXT_CODECS_CN_STATIC)
+
+clean: pyext-codecs_cn-clean
+
+.PHONY: pyext-codecs_cn-shared
+.PHONY: pyext-codecs_cn-static
+.PHONY: pyext-codecs_cn-clean
+
+
+# _codecs_hk
+PYEXT_CODECS_HK_SRCS += pyext/obj/cjkcodecs/_codecs_hk.c
+
+PYEXT_CODECS_HK_LOBJS = $(PYEXT_CODECS_HK_SRCS:.c=.lo)
+PYEXT_CODECS_HK_OBJS = $(PYEXT_CODECS_HK_SRCS:.c=.o)
+
+PYEXT_CODECS_HK_SHARED = pyext/_codecs_hk$(PYTHON_SOEXT)
+PYEXT_CODECS_HK_STATIC = pyext/_codecs_hk$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CODECS_HK_SHARED): $(PYEXT_CODECS_HK_LOBJS)
+$(PYEXT_CODECS_HK_STATIC): $(PYEXT_CODECS_HK_OBJS)
+
+pyext-codecs_hk-shared: $(PYEXT_CODECS_HK_SHARED)
+pyext-codecs_hk-static: $(PYEXT_CODECS_HK_STATIC)
+
+pyext-codecs_hk-clean:
+ rm -f $(PYEXT_CODECS_HK_LOBJS)
+ rm -f $(PYEXT_CODECS_HK_OBJS)
+ rm -f $(PYEXT_CODECS_HK_SHARED)
+ rm -f $(PYEXT_CODECS_HK_STATIC)
+
+clean: pyext-codecs_hk-clean
+
+.PHONY: pyext-codecs_hk-shared
+.PHONY: pyext-codecs_hk-static
+.PHONY: pyext-codecs_hk-clean
+
+
+# _codecs_jp
+PYEXT_CODECS_JP_SRCS += pyext/obj/cjkcodecs/_codecs_jp.c
+
+PYEXT_CODECS_JP_LOBJS = $(PYEXT_CODECS_JP_SRCS:.c=.lo)
+PYEXT_CODECS_JP_OBJS = $(PYEXT_CODECS_JP_SRCS:.c=.o)
+
+PYEXT_CODECS_JP_SHARED = pyext/_codecs_jp$(PYTHON_SOEXT)
+PYEXT_CODECS_JP_STATIC = pyext/_codecs_jp$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CODECS_JP_SHARED): $(PYEXT_CODECS_JP_LOBJS)
+$(PYEXT_CODECS_JP_STATIC): $(PYEXT_CODECS_JP_OBJS)
+
+pyext-codecs_jp-shared: $(PYEXT_CODECS_JP_SHARED)
+pyext-codecs_jp-static: $(PYEXT_CODECS_JP_STATIC)
+
+pyext-codecs_jp-clean:
+ rm -f $(PYEXT_CODECS_JP_LOBJS)
+ rm -f $(PYEXT_CODECS_JP_OBJS)
+ rm -f $(PYEXT_CODECS_JP_SHARED)
+ rm -f $(PYEXT_CODECS_JP_STATIC)
+
+clean: pyext-codecs_jp-clean
+
+.PHONY: pyext-codecs_jp-shared
+.PHONY: pyext-codecs_jp-static
+.PHONY: pyext-codecs_jp-clean
+
+
+# _codecs_kr
+PYEXT_CODECS_KR_SRCS += pyext/obj/cjkcodecs/_codecs_kr.c
+
+PYEXT_CODECS_KR_LOBJS = $(PYEXT_CODECS_KR_SRCS:.c=.lo)
+PYEXT_CODECS_KR_OBJS = $(PYEXT_CODECS_KR_SRCS:.c=.o)
+
+PYEXT_CODECS_KR_SHARED = pyext/_codecs_kr$(PYTHON_SOEXT)
+PYEXT_CODECS_KR_STATIC = pyext/_codecs_kr$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CODECS_KR_SHARED): $(PYEXT_CODECS_KR_LOBJS)
+$(PYEXT_CODECS_KR_STATIC): $(PYEXT_CODECS_KR_OBJS)
+
+pyext-codecs_kr-shared: $(PYEXT_CODECS_KR_SHARED)
+pyext-codecs_kr-static: $(PYEXT_CODECS_KR_STATIC)
+
+pyext-codecs_kr-clean:
+ rm -f $(PYEXT_CODECS_KR_LOBJS)
+ rm -f $(PYEXT_CODECS_KR_OBJS)
+ rm -f $(PYEXT_CODECS_KR_SHARED)
+ rm -f $(PYEXT_CODECS_KR_STATIC)
+
+clean: pyext-codecs_kr-clean
+
+.PHONY: pyext-codecs_kr-shared
+.PHONY: pyext-codecs_kr-static
+.PHONY: pyext-codecs_kr-clean
+
+
+# _codecs_tw
+PYEXT_CODECS_TW_SRCS += pyext/obj/cjkcodecs/_codecs_tw.c
+
+PYEXT_CODECS_TW_LOBJS = $(PYEXT_CODECS_TW_SRCS:.c=.lo)
+PYEXT_CODECS_TW_OBJS = $(PYEXT_CODECS_TW_SRCS:.c=.o)
+
+PYEXT_CODECS_TW_SHARED = pyext/_codecs_tw$(PYTHON_SOEXT)
+PYEXT_CODECS_TW_STATIC = pyext/_codecs_tw$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CODECS_TW_SHARED): $(PYEXT_CODECS_TW_LOBJS)
+$(PYEXT_CODECS_TW_STATIC): $(PYEXT_CODECS_TW_OBJS)
+
+pyext-codecs_tw-shared: $(PYEXT_CODECS_TW_SHARED)
+pyext-codecs_tw-static: $(PYEXT_CODECS_TW_STATIC)
+
+pyext-codecs_tw-clean:
+ rm -f $(PYEXT_CODECS_TW_LOBJS)
+ rm -f $(PYEXT_CODECS_TW_OBJS)
+ rm -f $(PYEXT_CODECS_TW_SHARED)
+ rm -f $(PYEXT_CODECS_TW_STATIC)
+
+clean: pyext-codecs_tw-clean
+
+.PHONY: pyext-codecs_tw-shared
+.PHONY: pyext-codecs_tw-static
+.PHONY: pyext-codecs_tw-clean
+
+
+# _codecs_iso2022
+PYEXT_CODECS_ISO2022_SRCS += pyext/obj/cjkcodecs/_codecs_iso2022.c
+
+PYEXT_CODECS_ISO2022_LOBJS = $(PYEXT_CODECS_ISO2022_SRCS:.c=.lo)
+PYEXT_CODECS_ISO2022_OBJS = $(PYEXT_CODECS_ISO2022_SRCS:.c=.o)
+
+PYEXT_CODECS_ISO2022_SHARED = pyext/_codecs_iso2022$(PYTHON_SOEXT)
+PYEXT_CODECS_ISO2022_STATIC = pyext/_codecs_iso2022$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CODECS_ISO2022_SHARED): $(PYEXT_CODECS_ISO2022_LOBJS)
+$(PYEXT_CODECS_ISO2022_STATIC): $(PYEXT_CODECS_ISO2022_OBJS)
+
+pyext-codecs_iso2022-shared: $(PYEXT_CODECS_ISO2022_SHARED)
+pyext-codecs_iso2022-static: $(PYEXT_CODECS_ISO2022_STATIC)
+
+pyext-codecs_iso2022-clean:
+ rm -f $(PYEXT_CODECS_ISO2022_LOBJS)
+ rm -f $(PYEXT_CODECS_ISO2022_OBJS)
+ rm -f $(PYEXT_CODECS_ISO2022_SHARED)
+ rm -f $(PYEXT_CODECS_ISO2022_STATIC)
+
+clean: pyext-codecs_iso2022-clean
+
+.PHONY: pyext-codecs_iso2022-shared
+.PHONY: pyext-codecs_iso2022-static
+.PHONY: pyext-codecs_iso2022-clean
+
+
+# _asyncio
+PYEXT_ASYNCIO_SRCS += pyext/obj/_asynciomodule.c
+
+PYEXT_ASYNCIO_LOBJS = $(PYEXT_ASYNCIO_SRCS:.c=.lo)
+PYEXT_ASYNCIO_OBJS = $(PYEXT_ASYNCIO_SRCS:.c=.o)
+
+PYEXT_ASYNCIO_SHARED = pyext/_asyncio$(PYTHON_SOEXT)
+PYEXT_ASYNCIO_STATIC = pyext/_asyncio$(OS_ARCHIVE_EXT)
+
+$(PYEXT_ASYNCIO_SHARED): $(PYEXT_ASYNCIO_LOBJS)
+$(PYEXT_ASYNCIO_STATIC): $(PYEXT_ASYNCIO_OBJS)
+
+pyext-asyncio-shared: $(PYEXT_ASYNCIO_SHARED)
+pyext-asyncio-static: $(PYEXT_ASYNCIO_STATIC)
+
+pyext-asyncio-clean:
+ rm -f $(PYEXT_ASYNCIO_LOBJS)
+ rm -f $(PYEXT_ASYNCIO_OBJS)
+ rm -f $(PYEXT_ASYNCIO_SHARED)
+ rm -f $(PYEXT_ASYNCIO_STATIC)
+
+clean: pyext-asyncio-clean
+
+.PHONY: pyext-asyncio-shared
+.PHONY: pyext-asyncio-static
+.PHONY: pyext-asyncio-clean
+
+
+# _bisect
+PYEXT_BISECT_SRCS += pyext/obj/_bisectmodule.c
+
+PYEXT_BISECT_LOBJS = $(PYEXT_BISECT_SRCS:.c=.lo)
+PYEXT_BISECT_OBJS = $(PYEXT_BISECT_SRCS:.c=.o)
+
+PYEXT_BISECT_SHARED = pyext/_bisect$(PYTHON_SOEXT)
+PYEXT_BISECT_STATIC = pyext/_bisect$(OS_ARCHIVE_EXT)
+
+$(PYEXT_BISECT_SHARED): $(PYEXT_BISECT_LOBJS)
+$(PYEXT_BISECT_STATIC): $(PYEXT_BISECT_OBJS)
+
+pyext-bisect-shared: $(PYEXT_BISECT_SHARED)
+pyext-bisect-static: $(PYEXT_BISECT_STATIC)
+
+pyext-bisect-clean:
+ rm -f $(PYEXT_BISECT_LOBJS)
+ rm -f $(PYEXT_BISECT_OBJS)
+ rm -f $(PYEXT_BISECT_SHARED)
+ rm -f $(PYEXT_BISECT_STATIC)
+
+clean: pyext-bisect-clean
+
+.PHONY: pyext-bisect-shared
+.PHONY: pyext-bisect-static
+.PHONY: pyext-bisect-clean
+
+
+# _crypt
+PYEXT_CRYPT_SRCS += pyext/obj/_cryptmodule.c
+
+PYEXT_CRYPT_LOBJS = $(PYEXT_CRYPT_SRCS:.c=.lo)
+PYEXT_CRYPT_OBJS = $(PYEXT_CRYPT_SRCS:.c=.o)
+
+PYEXT_CRYPT_SHARED = pyext/_crypt$(PYTHON_SOEXT)
+PYEXT_CRYPT_STATIC = pyext/_crypt$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CRYPT_SHARED): $(PYEXT_CRYPT_LOBJS)
+$(PYEXT_CRYPT_STATIC): $(PYEXT_CRYPT_OBJS)
+
+pyext-crypt-shared: $(PYEXT_CRYPT_SHARED)
+pyext-crypt-static: $(PYEXT_CRYPT_STATIC)
+
+pyext-crypt-clean:
+ rm -f $(PYEXT_CRYPT_LOBJS)
+ rm -f $(PYEXT_CRYPT_OBJS)
+ rm -f $(PYEXT_CRYPT_SHARED)
+ rm -f $(PYEXT_CRYPT_STATIC)
+
+clean: pyext-crypt-clean
+
+.PHONY: pyext-crypt-shared
+.PHONY: pyext-crypt-static
+.PHONY: pyext-crypt-clean
+
+
+# _csv
+PYEXT_CSV_SRCS += pyext/obj/_csv.c
+
+PYEXT_CSV_LOBJS = $(PYEXT_CSV_SRCS:.c=.lo)
+PYEXT_CSV_OBJS = $(PYEXT_CSV_SRCS:.c=.o)
+
+PYEXT_CSV_SHARED = pyext/_csv$(PYTHON_SOEXT)
+PYEXT_CSV_STATIC = pyext/_csv$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CSV_SHARED): $(PYEXT_CSV_LOBJS)
+$(PYEXT_CSV_STATIC): $(PYEXT_CSV_OBJS)
+
+pyext-csv-shared: $(PYEXT_CSV_SHARED)
+pyext-csv-static: $(PYEXT_CSV_STATIC)
+
+pyext-csv-clean:
+ rm -f $(PYEXT_CSV_LOBJS)
+ rm -f $(PYEXT_CSV_OBJS)
+ rm -f $(PYEXT_CSV_SHARED)
+ rm -f $(PYEXT_CSV_STATIC)
+
+clean: pyext-csv-clean
+
+.PHONY: pyext-csv-shared
+.PHONY: pyext-csv-static
+.PHONY: pyext-csv-clean
+
+
+# _ctypes_test
+PYEXT_CTYPES_TEST_SRCS += pyext/obj/_ctypes/_ctypes_test.c
+
+PYEXT_CTYPES_TEST_LOBJS = $(PYEXT_CTYPES_TEST_SRCS:.c=.lo)
+PYEXT_CTYPES_TEST_OBJS = $(PYEXT_CTYPES_TEST_SRCS:.c=.o)
+
+PYEXT_CTYPES_TEST_SHARED = pyext/_ctypes_test$(PYTHON_SOEXT)
+PYEXT_CTYPES_TEST_STATIC = pyext/_ctypes_test$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CTYPES_TEST_SHARED): $(PYEXT_CTYPES_TEST_LOBJS)
+$(PYEXT_CTYPES_TEST_STATIC): $(PYEXT_CTYPES_TEST_OBJS)
+
+pyext-ctypes_test-shared: $(PYEXT_CTYPES_TEST_SHARED)
+pyext-ctypes_test-static: $(PYEXT_CTYPES_TEST_STATIC)
+
+pyext-ctypes_test-clean:
+ rm -f $(PYEXT_CTYPES_TEST_LOBJS)
+ rm -f $(PYEXT_CTYPES_TEST_OBJS)
+ rm -f $(PYEXT_CTYPES_TEST_SHARED)
+ rm -f $(PYEXT_CTYPES_TEST_STATIC)
+
+clean: pyext-ctypes_test-clean
+
+.PHONY: pyext-ctypes_test-shared
+.PHONY: pyext-ctypes_test-static
+.PHONY: pyext-ctypes_test-clean
+
+
+# _datetime
+PYEXT_DATETIME_SRCS += pyext/obj/_datetimemodule.c
+
+PYEXT_DATETIME_LOBJS = $(PYEXT_DATETIME_SRCS:.c=.lo)
+PYEXT_DATETIME_OBJS = $(PYEXT_DATETIME_SRCS:.c=.o)
+
+PYEXT_DATETIME_SHARED = pyext/_datetime$(PYTHON_SOEXT)
+PYEXT_DATETIME_STATIC = pyext/_datetime$(OS_ARCHIVE_EXT)
+
+$(PYEXT_DATETIME_SHARED): $(PYEXT_DATETIME_LOBJS)
+$(PYEXT_DATETIME_STATIC): $(PYEXT_DATETIME_OBJS)
+
+pyext-datetime-shared: $(PYEXT_DATETIME_SHARED)
+pyext-datetime-static: $(PYEXT_DATETIME_STATIC)
+
+pyext-datetime-clean:
+ rm -f $(PYEXT_DATETIME_LOBJS)
+ rm -f $(PYEXT_DATETIME_OBJS)
+ rm -f $(PYEXT_DATETIME_SHARED)
+ rm -f $(PYEXT_DATETIME_STATIC)
+
+clean: pyext-datetime-clean
+
+.PHONY: pyext-datetime-shared
+.PHONY: pyext-datetime-static
+.PHONY: pyext-datetime-clean
+
+
+# _elementtree
+PYEXT_ELEMENTTREE_SRCS += pyext/obj/_elementtree.c
+
+PYEXT_ELEMENTTREE_LOBJS = $(PYEXT_ELEMENTTREE_SRCS:.c=.lo)
+PYEXT_ELEMENTTREE_OBJS = $(PYEXT_ELEMENTTREE_SRCS:.c=.o)
+
+PYEXT_ELEMENTTREE_SHARED = pyext/_elementtree$(PYTHON_SOEXT)
+PYEXT_ELEMENTTREE_STATIC = pyext/_elementtree$(OS_ARCHIVE_EXT)
+
+$(PYEXT_ELEMENTTREE_SHARED): $(PYEXT_ELEMENTTREE_LOBJS)
+$(PYEXT_ELEMENTTREE_STATIC): $(PYEXT_ELEMENTTREE_OBJS)
+
+pyext-elementtree-shared: $(PYEXT_ELEMENTTREE_SHARED)
+pyext-elementtree-static: $(PYEXT_ELEMENTTREE_STATIC)
+
+pyext-elementtree-clean:
+ rm -f $(PYEXT_ELEMENTTREE_LOBJS)
+ rm -f $(PYEXT_ELEMENTTREE_OBJS)
+ rm -f $(PYEXT_ELEMENTTREE_SHARED)
+ rm -f $(PYEXT_ELEMENTTREE_STATIC)
+
+clean: pyext-elementtree-clean
+
+.PHONY: pyext-elementtree-shared
+.PHONY: pyext-elementtree-static
+.PHONY: pyext-elementtree-clean
+
+
+# _heapq
+PYEXT_HEAPQ_SRCS += pyext/obj/_heapqmodule.c
+
+PYEXT_HEAPQ_LOBJS = $(PYEXT_HEAPQ_SRCS:.c=.lo)
+PYEXT_HEAPQ_OBJS = $(PYEXT_HEAPQ_SRCS:.c=.o)
+
+PYEXT_HEAPQ_SHARED = pyext/_heapq$(PYTHON_SOEXT)
+PYEXT_HEAPQ_STATIC = pyext/_heapq$(OS_ARCHIVE_EXT)
+
+$(PYEXT_HEAPQ_SHARED): $(PYEXT_HEAPQ_LOBJS)
+$(PYEXT_HEAPQ_STATIC): $(PYEXT_HEAPQ_OBJS)
+
+pyext-heapq-shared: $(PYEXT_HEAPQ_SHARED)
+pyext-heapq-static: $(PYEXT_HEAPQ_STATIC)
+
+pyext-heapq-clean:
+ rm -f $(PYEXT_HEAPQ_LOBJS)
+ rm -f $(PYEXT_HEAPQ_OBJS)
+ rm -f $(PYEXT_HEAPQ_SHARED)
+ rm -f $(PYEXT_HEAPQ_STATIC)
+
+clean: pyext-heapq-clean
+
+.PHONY: pyext-heapq-shared
+.PHONY: pyext-heapq-static
+.PHONY: pyext-heapq-clean
+
+
+# _json
+PYEXT_JSON_SRCS += pyext/obj/_json.c
+
+PYEXT_JSON_LOBJS = $(PYEXT_JSON_SRCS:.c=.lo)
+PYEXT_JSON_OBJS = $(PYEXT_JSON_SRCS:.c=.o)
+
+PYEXT_JSON_SHARED = pyext/_json$(PYTHON_SOEXT)
+PYEXT_JSON_STATIC = pyext/_json$(OS_ARCHIVE_EXT)
+
+$(PYEXT_JSON_SHARED): $(PYEXT_JSON_LOBJS)
+$(PYEXT_JSON_STATIC): $(PYEXT_JSON_OBJS)
+
+pyext-json-shared: $(PYEXT_JSON_SHARED)
+pyext-json-static: $(PYEXT_JSON_STATIC)
+
+pyext-json-clean:
+ rm -f $(PYEXT_JSON_LOBJS)
+ rm -f $(PYEXT_JSON_OBJS)
+ rm -f $(PYEXT_JSON_SHARED)
+ rm -f $(PYEXT_JSON_STATIC)
+
+clean: pyext-json-clean
+
+.PHONY: pyext-json-shared
+.PHONY: pyext-json-static
+.PHONY: pyext-json-clean
+
+
+# _md5
+PYEXT_MD5_SRCS += pyext/obj/md5module.c
+
+PYEXT_MD5_LOBJS = $(PYEXT_MD5_SRCS:.c=.lo)
+PYEXT_MD5_OBJS = $(PYEXT_MD5_SRCS:.c=.o)
+
+PYEXT_MD5_SHARED = pyext/_md5$(PYTHON_SOEXT)
+PYEXT_MD5_STATIC = pyext/_md5$(OS_ARCHIVE_EXT)
+
+$(PYEXT_MD5_SHARED): $(PYEXT_MD5_LOBJS)
+$(PYEXT_MD5_STATIC): $(PYEXT_MD5_OBJS)
+
+pyext-md5-shared: $(PYEXT_MD5_SHARED)
+pyext-md5-static: $(PYEXT_MD5_STATIC)
+
+pyext-md5-clean:
+ rm -f $(PYEXT_MD5_LOBJS)
+ rm -f $(PYEXT_MD5_OBJS)
+ rm -f $(PYEXT_MD5_SHARED)
+ rm -f $(PYEXT_MD5_STATIC)
+
+clean: pyext-md5-clean
+
+.PHONY: pyext-md5-shared
+.PHONY: pyext-md5-static
+.PHONY: pyext-md5-clean
+
+
+# _opcode
+PYEXT_OPCODE_SRCS += pyext/obj/_opcode.c
+
+PYEXT_OPCODE_LOBJS = $(PYEXT_OPCODE_SRCS:.c=.lo)
+PYEXT_OPCODE_OBJS = $(PYEXT_OPCODE_SRCS:.c=.o)
+
+PYEXT_OPCODE_SHARED = pyext/_opcode$(PYTHON_SOEXT)
+PYEXT_OPCODE_STATIC = pyext/_opcode$(OS_ARCHIVE_EXT)
+
+$(PYEXT_OPCODE_SHARED): $(PYEXT_OPCODE_LOBJS)
+$(PYEXT_OPCODE_STATIC): $(PYEXT_OPCODE_OBJS)
+
+pyext-opcode-shared: $(PYEXT_OPCODE_SHARED)
+pyext-opcode-static: $(PYEXT_OPCODE_STATIC)
+
+pyext-opcode-clean:
+ rm -f $(PYEXT_OPCODE_LOBJS)
+ rm -f $(PYEXT_OPCODE_OBJS)
+ rm -f $(PYEXT_OPCODE_SHARED)
+ rm -f $(PYEXT_OPCODE_STATIC)
+
+clean: pyext-opcode-clean
+
+.PHONY: pyext-opcode-shared
+.PHONY: pyext-opcode-static
+.PHONY: pyext-opcode-clean
+
+
+# _pickle
+PYEXT_PICKLE_SRCS += pyext/obj/_pickle.c
+
+PYEXT_PICKLE_LOBJS = $(PYEXT_PICKLE_SRCS:.c=.lo)
+PYEXT_PICKLE_OBJS = $(PYEXT_PICKLE_SRCS:.c=.o)
+
+PYEXT_PICKLE_SHARED = pyext/_pickle$(PYTHON_SOEXT)
+PYEXT_PICKLE_STATIC = pyext/_pickle$(OS_ARCHIVE_EXT)
+
+$(PYEXT_PICKLE_SHARED): $(PYEXT_PICKLE_LOBJS)
+$(PYEXT_PICKLE_STATIC): $(PYEXT_PICKLE_OBJS)
+
+pyext-pickle-shared: $(PYEXT_PICKLE_SHARED)
+pyext-pickle-static: $(PYEXT_PICKLE_STATIC)
+
+pyext-pickle-clean:
+ rm -f $(PYEXT_PICKLE_LOBJS)
+ rm -f $(PYEXT_PICKLE_OBJS)
+ rm -f $(PYEXT_PICKLE_SHARED)
+ rm -f $(PYEXT_PICKLE_STATIC)
+
+clean: pyext-pickle-clean
+
+.PHONY: pyext-pickle-shared
+.PHONY: pyext-pickle-static
+.PHONY: pyext-pickle-clean
+
+
+# _posixsubprocess
+PYEXT_POSIXSUBPROCESS_SRCS += pyext/obj/_posixsubprocess.c
+
+PYEXT_POSIXSUBPROCESS_LOBJS = $(PYEXT_POSIXSUBPROCESS_SRCS:.c=.lo)
+PYEXT_POSIXSUBPROCESS_OBJS = $(PYEXT_POSIXSUBPROCESS_SRCS:.c=.o)
+
+PYEXT_POSIXSUBPROCESS_SHARED = pyext/_posixsubprocess$(PYTHON_SOEXT)
+PYEXT_POSIXSUBPROCESS_STATIC = pyext/_posixsubprocess$(OS_ARCHIVE_EXT)
+
+$(PYEXT_POSIXSUBPROCESS_SHARED):$(PYEXT_POSIXSUBPROCESS_LOBJS)
+$(PYEXT_POSIXSUBPROCESS_STATIC):$(PYEXT_POSIXSUBPROCESS_OBJS)
+
+pyext-posixsubprocess-shared: $(PYEXT_POSIXSUBPROCESS_SHARED)
+pyext-posixsubprocess-static: $(PYEXT_POSIXSUBPROCESS_STATIC)
+
+pyext-posixsubprocess-clean:
+ rm -f $(PYEXT_POSIXSUBPROCESS_LOBJS)
+ rm -f $(PYEXT_POSIXSUBPROCESS_OBJS)
+ rm -f $(PYEXT_POSIXSUBPROCESS_SHARED)
+ rm -f $(PYEXT_POSIXSUBPROCESS_STATIC)
+
+clean: pyext-posixsubprocess-clean
+
+.PHONY: pyext-posixsubprocess-shared
+.PHONY: pyext-posixsubprocess-static
+.PHONY: pyext-posixsubprocess-clean
+
+
+# _random
+PYEXT_RANDOM_SRCS += pyext/obj/_randommodule.c
+
+PYEXT_RANDOM_LOBJS = $(PYEXT_RANDOM_SRCS:.c=.lo)
+PYEXT_RANDOM_OBJS = $(PYEXT_RANDOM_SRCS:.c=.o)
+
+PYEXT_RANDOM_SHARED = pyext/_random$(PYTHON_SOEXT)
+PYEXT_RANDOM_STATIC = pyext/_random$(OS_ARCHIVE_EXT)
+
+$(PYEXT_RANDOM_SHARED): $(PYEXT_RANDOM_LOBJS)
+$(PYEXT_RANDOM_STATIC): $(PYEXT_RANDOM_OBJS)
+
+pyext-random-shared: $(PYEXT_RANDOM_SHARED)
+pyext-random-static: $(PYEXT_RANDOM_STATIC)
+
+pyext-random-clean:
+ rm -f $(PYEXT_RANDOM_LOBJS)
+ rm -f $(PYEXT_RANDOM_OBJS)
+ rm -f $(PYEXT_RANDOM_SHARED)
+ rm -f $(PYEXT_RANDOM_STATIC)
+
+clean: pyext-random-clean
+
+.PHONY: pyext-random-shared
+.PHONY: pyext-random-static
+.PHONY: pyext-random-clean
+
+
+# _sha1
+PYEXT_SHA1_SRCS += pyext/obj/sha1module.c
+
+PYEXT_SHA1_LOBJS = $(PYEXT_SHA1_SRCS:.c=.lo)
+PYEXT_SHA1_OBJS = $(PYEXT_SHA1_SRCS:.c=.o)
+
+PYEXT_SHA1_SHARED = pyext/_sha1$(PYTHON_SOEXT)
+PYEXT_SHA1_STATIC = pyext/_sha1$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SHA1_SHARED): $(PYEXT_SHA1_LOBJS)
+$(PYEXT_SHA1_STATIC): $(PYEXT_SHA1_OBJS)
+
+pyext-sha1-shared: $(PYEXT_SHA1_SHARED)
+pyext-sha1-static: $(PYEXT_SHA1_STATIC)
+
+pyext-sha1-clean:
+ rm -f $(PYEXT_SHA1_LOBJS)
+ rm -f $(PYEXT_SHA1_OBJS)
+ rm -f $(PYEXT_SHA1_SHARED)
+ rm -f $(PYEXT_SHA1_STATIC)
+
+clean: pyext-sha1-clean
+
+.PHONY: pyext-sha1-shared
+.PHONY: pyext-sha1-static
+.PHONY: pyext-sha1-clean
+
+
+# _sha256
+PYEXT_SHA256_SRCS += pyext/obj/sha256module.c
+
+PYEXT_SHA256_LOBJS = $(PYEXT_SHA256_SRCS:.c=.lo)
+PYEXT_SHA256_OBJS = $(PYEXT_SHA256_SRCS:.c=.o)
+
+PYEXT_SHA256_SHARED = pyext/_sha256$(PYTHON_SOEXT)
+PYEXT_SHA256_STATIC = pyext/_sha256$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SHA256_SHARED): $(PYEXT_SHA256_LOBJS)
+$(PYEXT_SHA256_STATIC): $(PYEXT_SHA256_OBJS)
+
+pyext-sha256-shared: $(PYEXT_SHA256_SHARED)
+pyext-sha256-static: $(PYEXT_SHA256_STATIC)
+
+pyext-sha256-clean:
+ rm -f $(PYEXT_SHA256_LOBJS)
+ rm -f $(PYEXT_SHA256_OBJS)
+ rm -f $(PYEXT_SHA256_SHARED)
+ rm -f $(PYEXT_SHA256_STATIC)
+
+clean: pyext-sha256-clean
+
+.PHONY: pyext-sha256-shared
+.PHONY: pyext-sha256-static
+.PHONY: pyext-sha256-clean
+
+
+# _sha3
+PYEXT_SHA3_SRCS += pyext/obj/_sha3/sha3module.c
+
+PYEXT_SHA3_LOBJS = $(PYEXT_SHA3_SRCS:.c=.lo)
+PYEXT_SHA3_OBJS = $(PYEXT_SHA3_SRCS:.c=.o)
+
+PYEXT_SHA3_SHARED = pyext/_sha3$(PYTHON_SOEXT)
+PYEXT_SHA3_STATIC = pyext/_sha3$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SHA3_SHARED): $(PYEXT_SHA3_LOBJS)
+$(PYEXT_SHA3_STATIC): $(PYEXT_SHA3_OBJS)
+
+pyext-sha3-shared: $(PYEXT_SHA3_SHARED)
+pyext-sha3-static: $(PYEXT_SHA3_STATIC)
+
+pyext-sha3-clean:
+ rm -f $(PYEXT_SHA3_LOBJS)
+ rm -f $(PYEXT_SHA3_OBJS)
+ rm -f $(PYEXT_SHA3_SHARED)
+ rm -f $(PYEXT_SHA3_STATIC)
+
+clean: pyext-sha3-clean
+
+.PHONY: pyext-sha3-shared
+.PHONY: pyext-sha3-static
+.PHONY: pyext-sha3-clean
+
+
+# _sha512
+PYEXT_SHA512_SRCS += pyext/obj/sha512module.c
+
+PYEXT_SHA512_LOBJS = $(PYEXT_SHA512_SRCS:.c=.lo)
+PYEXT_SHA512_OBJS = $(PYEXT_SHA512_SRCS:.c=.o)
+
+PYEXT_SHA512_SHARED = pyext/_sha512$(PYTHON_SOEXT)
+PYEXT_SHA512_STATIC = pyext/_sha512$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SHA512_SHARED): $(PYEXT_SHA512_LOBJS)
+$(PYEXT_SHA512_STATIC): $(PYEXT_SHA512_OBJS)
+
+pyext-sha512-shared: $(PYEXT_SHA512_SHARED)
+pyext-sha512-static: $(PYEXT_SHA512_STATIC)
+
+pyext-sha512-clean:
+ rm -f $(PYEXT_SHA512_LOBJS)
+ rm -f $(PYEXT_SHA512_OBJS)
+ rm -f $(PYEXT_SHA512_SHARED)
+ rm -f $(PYEXT_SHA512_STATIC)
+
+clean: pyext-sha512-clean
+
+.PHONY: pyext-sha512-shared
+.PHONY: pyext-sha512-static
+.PHONY: pyext-sha512-clean
+
+
+# _socket
+PYEXT_SOCKET_SRCS += pyext/obj/socketmodule.c
+
+PYEXT_SOCKET_LOBJS = $(PYEXT_SOCKET_SRCS:.c=.lo)
+PYEXT_SOCKET_OBJS = $(PYEXT_SOCKET_SRCS:.c=.o)
+
+PYEXT_SOCKET_SHARED = pyext/_socket$(PYTHON_SOEXT)
+PYEXT_SOCKET_STATIC = pyext/_socket$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SOCKET_SHARED): $(PYEXT_SOCKET_LOBJS)
+$(PYEXT_SOCKET_STATIC): $(PYEXT_SOCKET_OBJS)
+
+pyext-socket-shared: $(PYEXT_SOCKET_SHARED)
+pyext-socket-static: $(PYEXT_SOCKET_STATIC)
+
+pyext-socket-clean:
+ rm -f $(PYEXT_SOCKET_LOBJS)
+ rm -f $(PYEXT_SOCKET_OBJS)
+ rm -f $(PYEXT_SOCKET_SHARED)
+ rm -f $(PYEXT_SOCKET_STATIC)
+
+clean: pyext-socket-clean
+
+.PHONY: pyext-socket-shared
+.PHONY: pyext-socket-static
+.PHONY: pyext-socket-clean
+
+
+# _struct
+PYEXT_STRUCT_SRCS += pyext/obj/_struct.c
+
+PYEXT_STRUCT_LOBJS = $(PYEXT_STRUCT_SRCS:.c=.lo)
+PYEXT_STRUCT_OBJS = $(PYEXT_STRUCT_SRCS:.c=.o)
+
+PYEXT_STRUCT_SHARED = pyext/_struct$(PYTHON_SOEXT)
+PYEXT_STRUCT_STATIC = pyext/_struct$(OS_ARCHIVE_EXT)
+
+$(PYEXT_STRUCT_SHARED): $(PYEXT_STRUCT_LOBJS)
+$(PYEXT_STRUCT_STATIC): $(PYEXT_STRUCT_OBJS)
+
+pyext-struct-shared: $(PYEXT_STRUCT_SHARED)
+pyext-struct-static: $(PYEXT_STRUCT_STATIC)
+
+pyext-struct-clean:
+ rm -f $(PYEXT_STRUCT_LOBJS)
+ rm -f $(PYEXT_STRUCT_OBJS)
+ rm -f $(PYEXT_STRUCT_SHARED)
+ rm -f $(PYEXT_STRUCT_STATIC)
+
+clean: pyext-struct-clean
+
+.PHONY: pyext-struct-shared
+.PHONY: pyext-struct-static
+.PHONY: pyext-struct-clean
+
+
+# _testbuffer
+PYEXT_TESTBUFFER_SRCS += pyext/obj/_testbuffer.c
+
+PYEXT_TESTBUFFER_LOBJS = $(PYEXT_TESTBUFFER_SRCS:.c=.lo)
+PYEXT_TESTBUFFER_OBJS = $(PYEXT_TESTBUFFER_SRCS:.c=.o)
+
+PYEXT_TESTBUFFER_SHARED = pyext/_testbuffer$(PYTHON_SOEXT)
+PYEXT_TESTBUFFER_STATIC = pyext/_testbuffer$(OS_ARCHIVE_EXT)
+
+$(PYEXT_TESTBUFFER_SHARED): $(PYEXT_TESTBUFFER_LOBJS)
+$(PYEXT_TESTBUFFER_STATIC): $(PYEXT_TESTBUFFER_OBJS)
+
+pyext-testbuffer-shared: $(PYEXT_TESTBUFFER_SHARED)
+pyext-testbuffer-static: $(PYEXT_TESTBUFFER_STATIC)
+
+pyext-testbuffer-clean:
+ rm -f $(PYEXT_TESTBUFFER_LOBJS)
+ rm -f $(PYEXT_TESTBUFFER_OBJS)
+ rm -f $(PYEXT_TESTBUFFER_SHARED)
+ rm -f $(PYEXT_TESTBUFFER_STATIC)
+
+clean: pyext-testbuffer-clean
+
+.PHONY: pyext-testbuffer-shared
+.PHONY: pyext-testbuffer-static
+.PHONY: pyext-testbuffer-clean
+
+
+# _testcapi
+PYEXT_TESTCAPI_SRCS += pyext/obj/_testcapimodule.c
+
+PYEXT_TESTCAPI_LOBJS = $(PYEXT_TESTCAPI_SRCS:.c=.lo)
+PYEXT_TESTCAPI_OBJS = $(PYEXT_TESTCAPI_SRCS:.c=.o)
+
+PYEXT_TESTCAPI_SHARED = pyext/_testcapi$(PYTHON_SOEXT)
+PYEXT_TESTCAPI_STATIC = pyext/_testcapi$(OS_ARCHIVE_EXT)
+
+$(PYEXT_TESTCAPI_SHARED): $(PYEXT_TESTCAPI_LOBJS)
+$(PYEXT_TESTCAPI_STATIC): $(PYEXT_TESTCAPI_OBJS)
+
+pyext-testcapi-shared: $(PYEXT_TESTCAPI_SHARED)
+pyext-testcapi-static: $(PYEXT_TESTCAPI_STATIC)
+
+pyext-testcapi-clean:
+ rm -f $(PYEXT_TESTCAPI_LOBJS)
+ rm -f $(PYEXT_TESTCAPI_OBJS)
+ rm -f $(PYEXT_TESTCAPI_SHARED)
+ rm -f $(PYEXT_TESTCAPI_STATIC)
+
+clean: pyext-testcapi-clean
+
+.PHONY: pyext-testcapi-shared
+.PHONY: pyext-testcapi-static
+.PHONY: pyext-testcapi-clean
+
+
+# _testimportmultiple
+PYEXT_TESTIMPORTMULTIPLE_SRCS += pyext/obj/_testimportmultiple.c
+
+PYEXT_TESTIMPORTMULTIPLE_LOBJS = $(PYEXT_TESTIMPORTMULTIPLE_SRCS:.c=.lo)
+PYEXT_TESTIMPORTMULTIPLE_OBJS = $(PYEXT_TESTIMPORTMULTIPLE_SRCS:.c=.o)
+
+PYEXT_TESTIMPORTMULTIPLE_SHARED = pyext/_testimportmultiple$(PYTHON_SOEXT)
+PYEXT_TESTIMPORTMULTIPLE_STATIC = pyext/_testimportmultiple$(OS_ARCHIVE_EXT)
+
+$(PYEXT_TESTIMPORTMULTIPLE_SHARED):$(PYEXT_TESTIMPORTMULTIPLE_LOBJS)
+$(PYEXT_TESTIMPORTMULTIPLE_STATIC):$(PYEXT_TESTIMPORTMULTIPLE_OBJS)
+
+pyext-testimportmultiple-shared: $(PYEXT_TESTIMPORTMULTIPLE_SHARED)
+pyext-testimportmultiple-static: $(PYEXT_TESTIMPORTMULTIPLE_STATIC)
+
+pyext-testimportmultiple-clean:
+ rm -f $(PYEXT_TESTIMPORTMULTIPLE_LOBJS)
+ rm -f $(PYEXT_TESTIMPORTMULTIPLE_OBJS)
+ rm -f $(PYEXT_TESTIMPORTMULTIPLE_SHARED)
+ rm -f $(PYEXT_TESTIMPORTMULTIPLE_STATIC)
+
+clean: pyext-testimportmultiple-clean
+
+.PHONY: pyext-testimportmultiple-shared
+.PHONY: pyext-testimportmultiple-static
+.PHONY: pyext-testimportmultiple-clean
+
+
+# _testmultiphase
+PYEXT_TESTMULTIPHASE_SRCS += pyext/obj/_testmultiphase.c
+
+PYEXT_TESTMULTIPHASE_LOBJS = $(PYEXT_TESTMULTIPHASE_SRCS:.c=.lo)
+PYEXT_TESTMULTIPHASE_OBJS = $(PYEXT_TESTMULTIPHASE_SRCS:.c=.o)
+
+PYEXT_TESTMULTIPHASE_SHARED = pyext/_testmultiphase$(PYTHON_SOEXT)
+PYEXT_TESTMULTIPHASE_STATIC = pyext/_testmultiphase$(OS_ARCHIVE_EXT)
+
+$(PYEXT_TESTMULTIPHASE_SHARED): $(PYEXT_TESTMULTIPHASE_LOBJS)
+$(PYEXT_TESTMULTIPHASE_STATIC): $(PYEXT_TESTMULTIPHASE_OBJS)
+
+pyext-testmultiphase-shared: $(PYEXT_TESTMULTIPHASE_SHARED)
+pyext-testmultiphase-static: $(PYEXT_TESTMULTIPHASE_STATIC)
+
+pyext-testmultiphase-clean:
+ rm -f $(PYEXT_TESTMULTIPHASE_LOBJS)
+ rm -f $(PYEXT_TESTMULTIPHASE_OBJS)
+ rm -f $(PYEXT_TESTMULTIPHASE_SHARED)
+ rm -f $(PYEXT_TESTMULTIPHASE_STATIC)
+
+clean: pyext-testmultiphase-clean
+
+.PHONY: pyext-testmultiphase-shared
+.PHONY: pyext-testmultiphase-static
+.PHONY: pyext-testmultiphase-clean
+
+
+# array
+PYEXT_ARRAY_SRCS += pyext/obj/arraymodule.c
+
+PYEXT_ARRAY_LOBJS = $(PYEXT_ARRAY_SRCS:.c=.lo)
+PYEXT_ARRAY_OBJS = $(PYEXT_ARRAY_SRCS:.c=.o)
+
+PYEXT_ARRAY_SHARED = pyext/array$(PYTHON_SOEXT)
+PYEXT_ARRAY_STATIC = pyext/array$(OS_ARCHIVE_EXT)
+
+$(PYEXT_ARRAY_SHARED): $(PYEXT_ARRAY_LOBJS)
+$(PYEXT_ARRAY_STATIC): $(PYEXT_ARRAY_OBJS)
+
+pyext-array-shared: $(PYEXT_ARRAY_SHARED)
+pyext-array-static: $(PYEXT_ARRAY_STATIC)
+
+pyext-array-clean:
+ rm -f $(PYEXT_ARRAY_LOBJS)
+ rm -f $(PYEXT_ARRAY_OBJS)
+ rm -f $(PYEXT_ARRAY_SHARED)
+ rm -f $(PYEXT_ARRAY_STATIC)
+
+clean: pyext-array-clean
+
+.PHONY: pyext-array-shared
+.PHONY: pyext-array-static
+.PHONY: pyext-array-clean
+
+
+# audioop
+PYEXT_AUDIOOP_SRCS += pyext/obj/audioop.c
+
+PYEXT_AUDIOOP_LOBJS = $(PYEXT_AUDIOOP_SRCS:.c=.lo)
+PYEXT_AUDIOOP_OBJS = $(PYEXT_AUDIOOP_SRCS:.c=.o)
+
+PYEXT_AUDIOOP_SHARED = pyext/audioop$(PYTHON_SOEXT)
+PYEXT_AUDIOOP_STATIC = pyext/audioop$(OS_ARCHIVE_EXT)
+
+$(PYEXT_AUDIOOP_SHARED): $(PYEXT_AUDIOOP_LOBJS)
+$(PYEXT_AUDIOOP_STATIC): $(PYEXT_AUDIOOP_OBJS)
+
+pyext-audioop-shared: $(PYEXT_AUDIOOP_SHARED)
+pyext-audioop-static: $(PYEXT_AUDIOOP_STATIC)
+
+pyext-audioop-clean:
+ rm -f $(PYEXT_AUDIOOP_LOBJS)
+ rm -f $(PYEXT_AUDIOOP_OBJS)
+ rm -f $(PYEXT_AUDIOOP_SHARED)
+ rm -f $(PYEXT_AUDIOOP_STATIC)
+
+clean: pyext-audioop-clean
+
+.PHONY: pyext-audioop-shared
+.PHONY: pyext-audioop-static
+.PHONY: pyext-audioop-clean
+
+
+# fcntl
+PYEXT_FCNTL_SRCS += pyext/obj/fcntlmodule.c
+
+PYEXT_FCNTL_LOBJS = $(PYEXT_FCNTL_SRCS:.c=.lo)
+PYEXT_FCNTL_OBJS = $(PYEXT_FCNTL_SRCS:.c=.o)
+
+PYEXT_FCNTL_SHARED = pyext/fcntl$(PYTHON_SOEXT)
+PYEXT_FCNTL_STATIC = pyext/fcntl$(OS_ARCHIVE_EXT)
+
+$(PYEXT_FCNTL_SHARED): $(PYEXT_FCNTL_LOBJS)
+$(PYEXT_FCNTL_STATIC): $(PYEXT_FCNTL_OBJS)
+
+pyext-fcntl-shared: $(PYEXT_FCNTL_SHARED)
+pyext-fcntl-static: $(PYEXT_FCNTL_STATIC)
+
+pyext-fcntl-clean:
+ rm -f $(PYEXT_FCNTL_LOBJS)
+ rm -f $(PYEXT_FCNTL_OBJS)
+ rm -f $(PYEXT_FCNTL_SHARED)
+ rm -f $(PYEXT_FCNTL_STATIC)
+
+clean: pyext-fcntl-clean
+
+.PHONY: pyext-fcntl-shared
+.PHONY: pyext-fcntl-static
+.PHONY: pyext-fcntl-clean
+
+
+# grp
+PYEXT_GRP_SRCS += pyext/obj/grpmodule.c
+
+PYEXT_GRP_LOBJS = $(PYEXT_GRP_SRCS:.c=.lo)
+PYEXT_GRP_OBJS = $(PYEXT_GRP_SRCS:.c=.o)
+
+PYEXT_GRP_SHARED = pyext/grp$(PYTHON_SOEXT)
+PYEXT_GRP_STATIC = pyext/grp$(OS_ARCHIVE_EXT)
+
+$(PYEXT_GRP_SHARED): $(PYEXT_GRP_LOBJS)
+$(PYEXT_GRP_STATIC): $(PYEXT_GRP_OBJS)
+
+pyext-grp-shared: $(PYEXT_GRP_SHARED)
+pyext-grp-static: $(PYEXT_GRP_STATIC)
+
+pyext-grp-clean:
+ rm -f $(PYEXT_GRP_LOBJS)
+ rm -f $(PYEXT_GRP_OBJS)
+ rm -f $(PYEXT_GRP_SHARED)
+ rm -f $(PYEXT_GRP_STATIC)
+
+clean: pyext-grp-clean
+
+.PHONY: pyext-grp-shared
+.PHONY: pyext-grp-static
+.PHONY: pyext-grp-clean
+
+
+# mmap
+PYEXT_MMAP_SRCS += pyext/obj/mmapmodule.c
+
+PYEXT_MMAP_LOBJS = $(PYEXT_MMAP_SRCS:.c=.lo)
+PYEXT_MMAP_OBJS = $(PYEXT_MMAP_SRCS:.c=.o)
+
+PYEXT_MMAP_SHARED = pyext/mmap$(PYTHON_SOEXT)
+PYEXT_MMAP_STATIC = pyext/mmap$(OS_ARCHIVE_EXT)
+
+$(PYEXT_MMAP_SHARED): $(PYEXT_MMAP_LOBJS)
+$(PYEXT_MMAP_STATIC): $(PYEXT_MMAP_OBJS)
+
+pyext-mmap-shared: $(PYEXT_MMAP_SHARED)
+pyext-mmap-static: $(PYEXT_MMAP_STATIC)
+
+pyext-mmap-clean:
+ rm -f $(PYEXT_MMAP_LOBJS)
+ rm -f $(PYEXT_MMAP_OBJS)
+ rm -f $(PYEXT_MMAP_SHARED)
+ rm -f $(PYEXT_MMAP_STATIC)
+
+clean: pyext-mmap-clean
+
+.PHONY: pyext-mmap-shared
+.PHONY: pyext-mmap-static
+.PHONY: pyext-mmap-clean
+
+
+# ossaudiodev
+PYEXT_OSSAUDIODEV_SRCS += pyext/obj/ossaudiodev.c
+
+PYEXT_OSSAUDIODEV_LOBJS = $(PYEXT_OSSAUDIODEV_SRCS:.c=.lo)
+PYEXT_OSSAUDIODEV_OBJS = $(PYEXT_OSSAUDIODEV_SRCS:.c=.o)
+
+PYEXT_OSSAUDIODEV_SHARED = pyext/ossaudiodev$(PYTHON_SOEXT)
+PYEXT_OSSAUDIODEV_STATIC = pyext/ossaudiodev$(OS_ARCHIVE_EXT)
+
+$(PYEXT_OSSAUDIODEV_SHARED): $(PYEXT_OSSAUDIODEV_LOBJS)
+$(PYEXT_OSSAUDIODEV_STATIC): $(PYEXT_OSSAUDIODEV_OBJS)
+
+pyext-ossaudiodev-shared: $(PYEXT_OSSAUDIODEV_SHARED)
+pyext-ossaudiodev-static: $(PYEXT_OSSAUDIODEV_STATIC)
+
+pyext-ossaudiodev-clean:
+ rm -f $(PYEXT_OSSAUDIODEV_LOBJS)
+ rm -f $(PYEXT_OSSAUDIODEV_OBJS)
+ rm -f $(PYEXT_OSSAUDIODEV_SHARED)
+ rm -f $(PYEXT_OSSAUDIODEV_STATIC)
+
+clean: pyext-ossaudiodev-clean
+
+.PHONY: pyext-ossaudiodev-shared
+.PHONY: pyext-ossaudiodev-static
+.PHONY: pyext-ossaudiodev-clean
+
+
+# parser
+PYEXT_PARSER_SRCS += pyext/obj/parsermodule.c
+
+PYEXT_PARSER_LOBJS = $(PYEXT_PARSER_SRCS:.c=.lo)
+PYEXT_PARSER_OBJS = $(PYEXT_PARSER_SRCS:.c=.o)
+
+PYEXT_PARSER_SHARED = pyext/parser$(PYTHON_SOEXT)
+PYEXT_PARSER_STATIC = pyext/parser$(OS_ARCHIVE_EXT)
+
+$(PYEXT_PARSER_SHARED): $(PYEXT_PARSER_LOBJS)
+$(PYEXT_PARSER_STATIC): $(PYEXT_PARSER_OBJS)
+
+pyext-parser-shared: $(PYEXT_PARSER_SHARED)
+pyext-parser-static: $(PYEXT_PARSER_STATIC)
+
+pyext-parser-clean:
+ rm -f $(PYEXT_PARSER_LOBJS)
+ rm -f $(PYEXT_PARSER_OBJS)
+ rm -f $(PYEXT_PARSER_SHARED)
+ rm -f $(PYEXT_PARSER_STATIC)
+
+clean: pyext-parser-clean
+
+.PHONY: pyext-parser-shared
+.PHONY: pyext-parser-static
+.PHONY: pyext-parser-clean
+
+
+# resource
+PYEXT_RESOURCE_SRCS += pyext/obj/resource.c
+
+PYEXT_RESOURCE_LOBJS = $(PYEXT_RESOURCE_SRCS:.c=.lo)
+PYEXT_RESOURCE_OBJS = $(PYEXT_RESOURCE_SRCS:.c=.o)
+
+PYEXT_RESOURCE_SHARED = pyext/resource$(PYTHON_SOEXT)
+PYEXT_RESOURCE_STATIC = pyext/resource$(OS_ARCHIVE_EXT)
+
+$(PYEXT_RESOURCE_SHARED): $(PYEXT_RESOURCE_LOBJS)
+$(PYEXT_RESOURCE_STATIC): $(PYEXT_RESOURCE_OBJS)
+
+pyext-resource-shared: $(PYEXT_RESOURCE_SHARED)
+pyext-resource-static: $(PYEXT_RESOURCE_STATIC)
+
+pyext-resource-clean:
+ rm -f $(PYEXT_RESOURCE_LOBJS)
+ rm -f $(PYEXT_RESOURCE_OBJS)
+ rm -f $(PYEXT_RESOURCE_SHARED)
+ rm -f $(PYEXT_RESOURCE_STATIC)
+
+clean: pyext-resource-clean
+
+.PHONY: pyext-resource-shared
+.PHONY: pyext-resource-static
+.PHONY: pyext-resource-clean
+
+
+# select
+PYEXT_SELECT_SRCS += pyext/obj/selectmodule.c
+
+PYEXT_SELECT_LOBJS = $(PYEXT_SELECT_SRCS:.c=.lo)
+PYEXT_SELECT_OBJS = $(PYEXT_SELECT_SRCS:.c=.o)
+
+PYEXT_SELECT_SHARED = pyext/select$(PYTHON_SOEXT)
+PYEXT_SELECT_STATIC = pyext/select$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SELECT_SHARED): $(PYEXT_SELECT_LOBJS)
+$(PYEXT_SELECT_STATIC): $(PYEXT_SELECT_OBJS)
+
+pyext-select-shared: $(PYEXT_SELECT_SHARED)
+pyext-select-static: $(PYEXT_SELECT_STATIC)
+
+pyext-select-clean:
+ rm -f $(PYEXT_SELECT_LOBJS)
+ rm -f $(PYEXT_SELECT_OBJS)
+ rm -f $(PYEXT_SELECT_SHARED)
+ rm -f $(PYEXT_SELECT_STATIC)
+
+clean: pyext-select-clean
+
+.PHONY: pyext-select-shared
+.PHONY: pyext-select-static
+.PHONY: pyext-select-clean
+
+
+# spwd
+PYEXT_SPWD_SRCS += pyext/obj/spwdmodule.c
+
+PYEXT_SPWD_LOBJS = $(PYEXT_SPWD_SRCS:.c=.lo)
+PYEXT_SPWD_OBJS = $(PYEXT_SPWD_SRCS:.c=.o)
+
+PYEXT_SPWD_SHARED = pyext/spwd$(PYTHON_SOEXT)
+PYEXT_SPWD_STATIC = pyext/spwd$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SPWD_SHARED): $(PYEXT_SPWD_LOBJS)
+$(PYEXT_SPWD_STATIC): $(PYEXT_SPWD_OBJS)
+
+pyext-spwd-shared: $(PYEXT_SPWD_SHARED)
+pyext-spwd-static: $(PYEXT_SPWD_STATIC)
+
+pyext-spwd-clean:
+ rm -f $(PYEXT_SPWD_LOBJS)
+ rm -f $(PYEXT_SPWD_OBJS)
+ rm -f $(PYEXT_SPWD_SHARED)
+ rm -f $(PYEXT_SPWD_STATIC)
+
+clean: pyext-spwd-clean
+
+.PHONY: pyext-spwd-shared
+.PHONY: pyext-spwd-static
+.PHONY: pyext-spwd-clean
+
+
+# syslog
+PYEXT_SYSLOG_SRCS += pyext/obj/syslogmodule.c
+
+PYEXT_SYSLOG_LOBJS = $(PYEXT_SYSLOG_SRCS:.c=.lo)
+PYEXT_SYSLOG_OBJS = $(PYEXT_SYSLOG_SRCS:.c=.o)
+
+PYEXT_SYSLOG_SHARED = pyext/syslog$(PYTHON_SOEXT)
+PYEXT_SYSLOG_STATIC = pyext/syslog$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SYSLOG_SHARED): $(PYEXT_SYSLOG_LOBJS)
+$(PYEXT_SYSLOG_STATIC): $(PYEXT_SYSLOG_OBJS)
+
+pyext-syslog-shared: $(PYEXT_SYSLOG_SHARED)
+pyext-syslog-static: $(PYEXT_SYSLOG_STATIC)
+
+pyext-syslog-clean:
+ rm -f $(PYEXT_SYSLOG_LOBJS)
+ rm -f $(PYEXT_SYSLOG_OBJS)
+ rm -f $(PYEXT_SYSLOG_SHARED)
+ rm -f $(PYEXT_SYSLOG_STATIC)
+
+clean: pyext-syslog-clean
+
+.PHONY: pyext-syslog-shared
+.PHONY: pyext-syslog-static
+.PHONY: pyext-syslog-clean
+
+
+# termios
+PYEXT_TERMIOS_SRCS += pyext/obj/termios.c
+
+PYEXT_TERMIOS_LOBJS = $(PYEXT_TERMIOS_SRCS:.c=.lo)
+PYEXT_TERMIOS_OBJS = $(PYEXT_TERMIOS_SRCS:.c=.o)
+
+PYEXT_TERMIOS_SHARED = pyext/termios$(PYTHON_SOEXT)
+PYEXT_TERMIOS_STATIC = pyext/termios$(OS_ARCHIVE_EXT)
+
+$(PYEXT_TERMIOS_SHARED): $(PYEXT_TERMIOS_LOBJS)
+$(PYEXT_TERMIOS_STATIC): $(PYEXT_TERMIOS_OBJS)
+
+pyext-termios-shared: $(PYEXT_TERMIOS_SHARED)
+pyext-termios-static: $(PYEXT_TERMIOS_STATIC)
+
+pyext-termios-clean:
+ rm -f $(PYEXT_TERMIOS_LOBJS)
+ rm -f $(PYEXT_TERMIOS_OBJS)
+ rm -f $(PYEXT_TERMIOS_SHARED)
+ rm -f $(PYEXT_TERMIOS_STATIC)
+
+clean: pyext-termios-clean
+
+.PHONY: pyext-termios-shared
+.PHONY: pyext-termios-static
+.PHONY: pyext-termios-clean
+
+
+# unicodedata
+PYEXT_UNICODEDATA_SRCS += pyext/obj/unicodedata.c
+
+PYEXT_UNICODEDATA_LOBJS = $(PYEXT_UNICODEDATA_SRCS:.c=.lo)
+PYEXT_UNICODEDATA_OBJS = $(PYEXT_UNICODEDATA_SRCS:.c=.o)
+
+PYEXT_UNICODEDATA_SHARED = pyext/unicodedata$(PYTHON_SOEXT)
+PYEXT_UNICODEDATA_STATIC = pyext/unicodedata$(OS_ARCHIVE_EXT)
+
+$(PYEXT_UNICODEDATA_SHARED): $(PYEXT_UNICODEDATA_LOBJS)
+$(PYEXT_UNICODEDATA_STATIC): $(PYEXT_UNICODEDATA_OBJS)
+
+pyext-unicodedata-shared: $(PYEXT_UNICODEDATA_SHARED)
+pyext-unicodedata-static: $(PYEXT_UNICODEDATA_STATIC)
+
+pyext-unicodedata-clean:
+ rm -f $(PYEXT_UNICODEDATA_LOBJS)
+ rm -f $(PYEXT_UNICODEDATA_OBJS)
+ rm -f $(PYEXT_UNICODEDATA_SHARED)
+ rm -f $(PYEXT_UNICODEDATA_STATIC)
+
+clean: pyext-unicodedata-clean
+
+.PHONY: pyext-unicodedata-shared
+.PHONY: pyext-unicodedata-static
+.PHONY: pyext-unicodedata-clean
+
+
+# xxlimited
+PYEXT_XXLIMITED_SRCS += pyext/obj/xxlimited.c
+
+PYEXT_XXLIMITED_LOBJS = $(PYEXT_XXLIMITED_SRCS:.c=.lo)
+PYEXT_XXLIMITED_OBJS = $(PYEXT_XXLIMITED_SRCS:.c=.o)
+
+PYEXT_XXLIMITED_SHARED = pyext/xxlimited$(PYTHON_SOEXT)
+PYEXT_XXLIMITED_STATIC = pyext/xxlimited$(OS_ARCHIVE_EXT)
+
+$(PYEXT_XXLIMITED_SHARED): $(PYEXT_XXLIMITED_LOBJS)
+$(PYEXT_XXLIMITED_STATIC): $(PYEXT_XXLIMITED_OBJS)
+
+pyext-xxlimited-shared: $(PYEXT_XXLIMITED_SHARED)
+pyext-xxlimited-static: $(PYEXT_XXLIMITED_STATIC)
+
+pyext-xxlimited-clean:
+ rm -f $(PYEXT_XXLIMITED_LOBJS)
+ rm -f $(PYEXT_XXLIMITED_OBJS)
+ rm -f $(PYEXT_XXLIMITED_SHARED)
+ rm -f $(PYEXT_XXLIMITED_STATIC)
+
+clean: pyext-xxlimited-clean
+
+.PHONY: pyext-xxlimited-shared
+.PHONY: pyext-xxlimited-static
+.PHONY: pyext-xxlimited-clean
+
+
+# _blake2
+PYEXT_BLAKE2_SRCS += pyext/obj/_blake2/blake2module.c
+PYEXT_BLAKE2_SRCS += pyext/obj/_blake2/blake2b_impl.c
+PYEXT_BLAKE2_SRCS += pyext/obj/_blake2/blake2s_impl.c
+
+PYEXT_BLAKE2_LOBJS = $(PYEXT_BLAKE2_SRCS:.c=.lo)
+PYEXT_BLAKE2_OBJS = $(PYEXT_BLAKE2_SRCS:.c=.o)
+
+PYEXT_BLAKE2_SHARED = pyext/_blake2$(PYTHON_SOEXT)
+PYEXT_BLAKE2_STATIC = pyext/_blake2$(OS_ARCHIVE_EXT)
+
+$(PYEXT_BLAKE2_SHARED): $(PYEXT_BLAKE2_LOBJS)
+$(PYEXT_BLAKE2_STATIC): $(PYEXT_BLAKE2_OBJS)
+
+pyext-blake2-shared: $(PYEXT_BLAKE2_SHARED)
+pyext-blake2-static: $(PYEXT_BLAKE2_STATIC)
+
+pyext-blake2-clean:
+ rm -f $(PYEXT_BLAKE2_LOBJS)
+ rm -f $(PYEXT_BLAKE2_OBJS)
+ rm -f $(PYEXT_BLAKE2_SHARED)
+ rm -f $(PYEXT_BLAKE2_STATIC)
+
+clean: pyext-blake2-clean
+
+.PHONY: pyext-blake2-shared
+.PHONY: pyext-blake2-static
+.PHONY: pyext-blake2-clean
+
+
+# _lsprof
+PYEXT_LSPROF_SRCS += pyext/obj/_lsprof.c
+PYEXT_LSPROF_SRCS += pyext/obj/rotatingtree.c
+
+PYEXT_LSPROF_LOBJS = $(PYEXT_LSPROF_SRCS:.c=.lo)
+PYEXT_LSPROF_OBJS = $(PYEXT_LSPROF_SRCS:.c=.o)
+
+PYEXT_LSPROF_SHARED = pyext/_lsprof$(PYTHON_SOEXT)
+PYEXT_LSPROF_STATIC = pyext/_lsprof$(OS_ARCHIVE_EXT)
+
+$(PYEXT_LSPROF_SHARED): $(PYEXT_LSPROF_LOBJS)
+$(PYEXT_LSPROF_STATIC): $(PYEXT_LSPROF_OBJS)
+
+pyext-lsprof-shared: $(PYEXT_LSPROF_SHARED)
+pyext-lsprof-static: $(PYEXT_LSPROF_STATIC)
+
+pyext-lsprof-clean:
+ rm -f $(PYEXT_LSPROF_LOBJS)
+ rm -f $(PYEXT_LSPROF_OBJS)
+ rm -f $(PYEXT_LSPROF_SHARED)
+ rm -f $(PYEXT_LSPROF_STATIC)
+
+clean: pyext-lsprof-clean
+
+.PHONY: pyext-lsprof-shared
+.PHONY: pyext-lsprof-static
+.PHONY: pyext-lsprof-clean
+
+
+# _multiprocessing
+PYEXT_MULTIPROCESSING_SRCS += pyext/obj/_multiprocessing/multiprocessing.c
+PYEXT_MULTIPROCESSING_SRCS += pyext/obj/_multiprocessing/semaphore.c
+
+PYEXT_MULTIPROCESSING_LOBJS = $(PYEXT_MULTIPROCESSING_SRCS:.c=.lo)
+PYEXT_MULTIPROCESSING_OBJS = $(PYEXT_MULTIPROCESSING_SRCS:.c=.o)
+
+PYEXT_MULTIPROCESSING_SHARED = pyext/_multiprocessing$(PYTHON_SOEXT)
+PYEXT_MULTIPROCESSING_STATIC = pyext/_multiprocessing$(OS_ARCHIVE_EXT)
+
+$(PYEXT_MULTIPROCESSING_SHARED):$(PYEXT_MULTIPROCESSING_LOBJS)
+$(PYEXT_MULTIPROCESSING_STATIC):$(PYEXT_MULTIPROCESSING_OBJS)
+
+pyext-multiprocessing-shared: $(PYEXT_MULTIPROCESSING_SHARED)
+pyext-multiprocessing-static: $(PYEXT_MULTIPROCESSING_STATIC)
+
+pyext-multiprocessing-clean:
+ rm -f $(PYEXT_MULTIPROCESSING_LOBJS)
+ rm -f $(PYEXT_MULTIPROCESSING_OBJS)
+ rm -f $(PYEXT_MULTIPROCESSING_SHARED)
+ rm -f $(PYEXT_MULTIPROCESSING_STATIC)
+
+clean: pyext-multiprocessing-clean
+
+.PHONY: pyext-multiprocessing-shared
+.PHONY: pyext-multiprocessing-static
+.PHONY: pyext-multiprocessing-clean
+
+
+# cmath
+PYEXT_CMATH_SRCS += pyext/obj/cmathmodule.c
+PYEXT_CMATH_SRCS += pyext/obj/_math.c
+
+PYEXT_CMATH_LOBJS = $(PYEXT_CMATH_SRCS:.c=.lo)
+PYEXT_CMATH_OBJS = $(PYEXT_CMATH_SRCS:.c=.o)
+
+PYEXT_CMATH_SHARED = pyext/cmath$(PYTHON_SOEXT)
+PYEXT_CMATH_STATIC = pyext/cmath$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CMATH_SHARED): $(PYEXT_CMATH_LOBJS)
+$(PYEXT_CMATH_STATIC): $(PYEXT_CMATH_OBJS)
+
+pyext-cmath-shared: $(PYEXT_CMATH_SHARED)
+pyext-cmath-static: $(PYEXT_CMATH_STATIC)
+
+pyext-cmath-clean:
+ rm -f $(PYEXT_CMATH_LOBJS)
+ rm -f $(PYEXT_CMATH_OBJS)
+ rm -f $(PYEXT_CMATH_SHARED)
+ rm -f $(PYEXT_CMATH_STATIC)
+
+clean: pyext-cmath-clean
+
+.PHONY: pyext-cmath-shared
+.PHONY: pyext-cmath-static
+.PHONY: pyext-cmath-clean
+
+
+# math
+PYEXT_MATH_SRCS += pyext/obj/mathmodule.c
+PYEXT_MATH_SRCS += pyext/obj/_math.c
+
+PYEXT_MATH_LOBJS = $(PYEXT_MATH_SRCS:.c=.lo)
+PYEXT_MATH_OBJS = $(PYEXT_MATH_SRCS:.c=.o)
+
+PYEXT_MATH_SHARED = pyext/math$(PYTHON_SOEXT)
+PYEXT_MATH_STATIC = pyext/math$(OS_ARCHIVE_EXT)
+
+$(PYEXT_MATH_SHARED): $(PYEXT_MATH_LOBJS)
+$(PYEXT_MATH_STATIC): $(PYEXT_MATH_OBJS)
+
+pyext-math-shared: $(PYEXT_MATH_SHARED)
+pyext-math-static: $(PYEXT_MATH_STATIC)
+
+pyext-math-clean:
+ rm -f $(PYEXT_MATH_LOBJS)
+ rm -f $(PYEXT_MATH_OBJS)
+ rm -f $(PYEXT_MATH_SHARED)
+ rm -f $(PYEXT_MATH_STATIC)
+
+clean: pyext-math-clean
+
+.PHONY: pyext-math-shared
+.PHONY: pyext-math-static
+.PHONY: pyext-math-clean
+
+
+# _bz2
+PYEXT_BZ2_SRCS += pyext/obj/_bz2module.c
+
+PYEXT_BZ2_LOBJS = $(PYEXT_BZ2_SRCS:.c=.lo)
+PYEXT_BZ2_OBJS = $(PYEXT_BZ2_SRCS:.c=.o)
+
+
+PYEXT_BZ2_SHARED = pyext/_bz2$(PYTHON_SOEXT)
+PYEXT_BZ2_STATIC = pyext/_bz2$(OS_ARCHIVE_EXT)
+
+$(PYEXT_BZ2_SHARED): LDFLAGS_DYNEXT += -lbz2
+$(PYEXT_BZ2_SHARED): $(PYEXT_BZ2_LOBJS)
+$(PYEXT_BZ2_STATIC): $(PYEXT_BZ2_OBJS)
+
+pyext-bz2-shared: $(PYEXT_BZ2_SHARED)
+pyext-bz2-static: $(PYEXT_BZ2_STATIC)
+
+pyext-bz2-clean:
+ rm -f $(PYEXT_BZ2_LOBJS)
+ rm -f $(PYEXT_BZ2_OBJS)
+ rm -f $(PYEXT_BZ2_SHARED)
+ rm -f $(PYEXT_BZ2_STATIC)
+
+clean: pyext-bz2-clean
+
+.PHONY: pyext-bz2-shared
+.PHONY: pyext-bz2-static
+.PHONY: pyext-bz2-clean
+
+
+# _ctypes
+PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/_ctypes.c
+PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/callbacks.c
+PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/callproc.c
+PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/stgdict.c
+PYEXT_CTYPES_SRCS += pyext/obj/_ctypes/cfield.c
+
+PYEXT_CTYPES_LOBJS = $(PYEXT_CTYPES_SRCS:.c=.lo)
+PYEXT_CTYPES_OBJS = $(PYEXT_CTYPES_SRCS:.c=.o)
+
+
+PYEXT_CTYPES_SHARED = pyext/_ctypes$(PYTHON_SOEXT)
+PYEXT_CTYPES_STATIC = pyext/_ctypes$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CTYPES_SHARED): LDFLAGS_DYNEXT += -lffi
+$(PYEXT_CTYPES_SHARED): $(PYEXT_CTYPES_LOBJS)
+$(PYEXT_CTYPES_STATIC): $(PYEXT_CTYPES_OBJS)
+
+pyext-ctypes-shared: $(PYEXT_CTYPES_SHARED)
+pyext-ctypes-static: $(PYEXT_CTYPES_STATIC)
+
+pyext-ctypes-clean:
+ rm -f $(PYEXT_CTYPES_LOBJS)
+ rm -f $(PYEXT_CTYPES_OBJS)
+ rm -f $(PYEXT_CTYPES_SHARED)
+ rm -f $(PYEXT_CTYPES_STATIC)
+
+clean: pyext-ctypes-clean
+
+.PHONY: pyext-ctypes-shared
+.PHONY: pyext-ctypes-static
+.PHONY: pyext-ctypes-clean
+
+
+# _curses
+PYEXT_CURSES_SRCS += pyext/obj/_cursesmodule.c
+
+PYEXT_CURSES_LOBJS = $(PYEXT_CURSES_SRCS:.c=.lo)
+PYEXT_CURSES_OBJS = $(PYEXT_CURSES_SRCS:.c=.o)
+
+$(PYEXT_CURSES_LOBJS): CFLAGS_CONFIG += $(CFLAGS_NCURSES)
+$(PYEXT_CURSES_OBJS): CFLAGS_CONFIG += $(CFLAGS_NCURSES)
+
+PYEXT_CURSES_SHARED = pyext/_curses$(PYTHON_SOEXT)
+PYEXT_CURSES_STATIC = pyext/_curses$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CURSES_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_NCURSES)
+$(PYEXT_CURSES_SHARED): $(PYEXT_CURSES_LOBJS)
+$(PYEXT_CURSES_STATIC): $(PYEXT_CURSES_OBJS)
+
+pyext-curses-shared: $(PYEXT_CURSES_SHARED)
+pyext-curses-static: $(PYEXT_CURSES_STATIC)
+
+pyext-curses-clean:
+ rm -f $(PYEXT_CURSES_LOBJS)
+ rm -f $(PYEXT_CURSES_OBJS)
+ rm -f $(PYEXT_CURSES_SHARED)
+ rm -f $(PYEXT_CURSES_STATIC)
+
+clean: pyext-curses-clean
+
+.PHONY: pyext-curses-shared
+.PHONY: pyext-curses-static
+.PHONY: pyext-curses-clean
+
+
+# _curses_panel
+PYEXT_CURSES_PANEL_SRCS += pyext/obj/_curses_panel.c
+
+PYEXT_CURSES_PANEL_LOBJS = $(PYEXT_CURSES_PANEL_SRCS:.c=.lo)
+PYEXT_CURSES_PANEL_OBJS = $(PYEXT_CURSES_PANEL_SRCS:.c=.o)
+
+$(PYEXT_CURSES_PANEL_LOBJS): CFLAGS_CONFIG += $(CFLAGS_NCURSES)
+$(PYEXT_CURSES_PANEL_OBJS): CFLAGS_CONFIG += $(CFLAGS_NCURSES)
+
+PYEXT_CURSES_PANEL_SHARED = pyext/_curses_panel$(PYTHON_SOEXT)
+PYEXT_CURSES_PANEL_STATIC = pyext/_curses_panel$(OS_ARCHIVE_EXT)
+
+$(PYEXT_CURSES_PANEL_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_NCURSES)
+$(PYEXT_CURSES_PANEL_SHARED): $(PYEXT_CURSES_PANEL_LOBJS)
+$(PYEXT_CURSES_PANEL_STATIC): $(PYEXT_CURSES_PANEL_OBJS)
+
+pyext-curses_panel-shared: $(PYEXT_CURSES_PANEL_SHARED)
+pyext-curses_panel-static: $(PYEXT_CURSES_PANEL_STATIC)
+
+pyext-curses_panel-clean:
+ rm -f $(PYEXT_CURSES_PANEL_LOBJS)
+ rm -f $(PYEXT_CURSES_PANEL_OBJS)
+ rm -f $(PYEXT_CURSES_PANEL_SHARED)
+ rm -f $(PYEXT_CURSES_PANEL_STATIC)
+
+clean: pyext-curses_panel-clean
+
+.PHONY: pyext-curses_panel-shared
+.PHONY: pyext-curses_panel-static
+.PHONY: pyext-curses_panel-clean
+
+
+# _decimal
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/_decimal.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/basearith.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/constants.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/context.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/convolute.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/crt.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/difradix2.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/fnt.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/fourstep.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/io.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/memory.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/mpdecimal.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/numbertheory.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/sixstep.c
+PYEXT_DECIMAL_SRCS += pyext/obj/_decimal/libmpdec/transpose.c
+
+PYEXT_DECIMAL_LOBJS = $(PYEXT_DECIMAL_SRCS:.c=.lo)
+PYEXT_DECIMAL_OBJS = $(PYEXT_DECIMAL_SRCS:.c=.o)
+
+$(PYEXT_DECIMAL_LOBJS): CFLAGS_CONFIG += -I$(SOURCE_DIR)/Modules/_decimal/libmpdec -DUNIVERSAL
+$(PYEXT_DECIMAL_OBJS): CFLAGS_CONFIG += -I$(SOURCE_DIR)/Modules/_decimal/libmpdec -DUNIVERSAL
+
+PYEXT_DECIMAL_SHARED = pyext/_decimal$(PYTHON_SOEXT)
+PYEXT_DECIMAL_STATIC = pyext/_decimal$(OS_ARCHIVE_EXT)
+
+$(PYEXT_DECIMAL_SHARED): $(PYEXT_DECIMAL_LOBJS)
+$(PYEXT_DECIMAL_STATIC): $(PYEXT_DECIMAL_OBJS)
+
+pyext-decimal-shared: $(PYEXT_DECIMAL_SHARED)
+pyext-decimal-static: $(PYEXT_DECIMAL_STATIC)
+
+pyext-decimal-clean:
+ rm -f $(PYEXT_DECIMAL_LOBJS)
+ rm -f $(PYEXT_DECIMAL_OBJS)
+ rm -f $(PYEXT_DECIMAL_SHARED)
+ rm -f $(PYEXT_DECIMAL_STATIC)
+
+clean: pyext-decimal-clean
+
+.PHONY: pyext-decimal-shared
+.PHONY: pyext-decimal-static
+.PHONY: pyext-decimal-clean
+
+
+# _dbm
+PYEXT_DBM_SRCS += pyext/obj/_dbmmodule.c
+
+PYEXT_DBM_LOBJS = $(PYEXT_DBM_SRCS:.c=.lo)
+PYEXT_DBM_OBJS = $(PYEXT_DBM_SRCS:.c=.o)
+
+$(PYEXT_DBM_LOBJS): CFLAGS_CONFIG += $(CFLAGS_DBM)
+$(PYEXT_DBM_OBJS): CFLAGS_CONFIG += $(CFLAGS_DBM)
+
+PYEXT_DBM_SHARED = pyext/_dbm$(PYTHON_SOEXT)
+PYEXT_DBM_STATIC = pyext/_dbm$(OS_ARCHIVE_EXT)
+
+$(PYEXT_DBM_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_DBM)
+$(PYEXT_DBM_SHARED): $(PYEXT_DBM_LOBJS)
+$(PYEXT_DBM_STATIC): $(PYEXT_DBM_OBJS)
+
+pyext-dbm-shared: $(PYEXT_DBM_SHARED)
+pyext-dbm-static: $(PYEXT_DBM_STATIC)
+
+pyext-dbm-clean:
+ rm -f $(PYEXT_DBM_LOBJS)
+ rm -f $(PYEXT_DBM_OBJS)
+ rm -f $(PYEXT_DBM_SHARED)
+ rm -f $(PYEXT_DBM_STATIC)
+
+clean: pyext-dbm-clean
+
+.PHONY: pyext-dbm-shared
+.PHONY: pyext-dbm-static
+.PHONY: pyext-dbm-clean
+
+
+# _gdbm
+PYEXT_GDBM_SRCS += pyext/obj/_gdbmmodule.c
+
+PYEXT_GDBM_LOBJS = $(PYEXT_GDBM_SRCS:.c=.lo)
+PYEXT_GDBM_OBJS = $(PYEXT_GDBM_SRCS:.c=.o)
+
+
+PYEXT_GDBM_SHARED = pyext/_gdbm$(PYTHON_SOEXT)
+PYEXT_GDBM_STATIC = pyext/_gdbm$(OS_ARCHIVE_EXT)
+
+$(PYEXT_GDBM_SHARED): LDFLAGS_DYNEXT += -lgdbm
+$(PYEXT_GDBM_SHARED): $(PYEXT_GDBM_LOBJS)
+$(PYEXT_GDBM_STATIC): $(PYEXT_GDBM_OBJS)
+
+pyext-gdbm-shared: $(PYEXT_GDBM_SHARED)
+pyext-gdbm-static: $(PYEXT_GDBM_STATIC)
+
+pyext-gdbm-clean:
+ rm -f $(PYEXT_GDBM_LOBJS)
+ rm -f $(PYEXT_GDBM_OBJS)
+ rm -f $(PYEXT_GDBM_SHARED)
+ rm -f $(PYEXT_GDBM_STATIC)
+
+clean: pyext-gdbm-clean
+
+.PHONY: pyext-gdbm-shared
+.PHONY: pyext-gdbm-static
+.PHONY: pyext-gdbm-clean
+
+
+# _hashlib
+PYEXT_HASHLIB_SRCS += pyext/obj/_hashopenssl.c
+
+PYEXT_HASHLIB_LOBJS = $(PYEXT_HASHLIB_SRCS:.c=.lo)
+PYEXT_HASHLIB_OBJS = $(PYEXT_HASHLIB_SRCS:.c=.o)
+
+
+PYEXT_HASHLIB_SHARED = pyext/_hashlib$(PYTHON_SOEXT)
+PYEXT_HASHLIB_STATIC = pyext/_hashlib$(OS_ARCHIVE_EXT)
+
+$(PYEXT_HASHLIB_SHARED): LDFLAGS_DYNEXT += -lssl -lcrypto
+$(PYEXT_HASHLIB_SHARED): $(PYEXT_HASHLIB_LOBJS)
+$(PYEXT_HASHLIB_STATIC): $(PYEXT_HASHLIB_OBJS)
+
+pyext-hashlib-shared: $(PYEXT_HASHLIB_SHARED)
+pyext-hashlib-static: $(PYEXT_HASHLIB_STATIC)
+
+pyext-hashlib-clean:
+ rm -f $(PYEXT_HASHLIB_LOBJS)
+ rm -f $(PYEXT_HASHLIB_OBJS)
+ rm -f $(PYEXT_HASHLIB_SHARED)
+ rm -f $(PYEXT_HASHLIB_STATIC)
+
+clean: pyext-hashlib-clean
+
+.PHONY: pyext-hashlib-shared
+.PHONY: pyext-hashlib-static
+.PHONY: pyext-hashlib-clean
+
+
+# _lzma
+PYEXT_LZMA_SRCS += pyext/obj/_lzmamodule.c
+
+PYEXT_LZMA_LOBJS = $(PYEXT_LZMA_SRCS:.c=.lo)
+PYEXT_LZMA_OBJS = $(PYEXT_LZMA_SRCS:.c=.o)
+
+
+PYEXT_LZMA_SHARED = pyext/_lzma$(PYTHON_SOEXT)
+PYEXT_LZMA_STATIC = pyext/_lzma$(OS_ARCHIVE_EXT)
+
+$(PYEXT_LZMA_SHARED): LDFLAGS_DYNEXT += -llzma
+$(PYEXT_LZMA_SHARED): $(PYEXT_LZMA_LOBJS)
+$(PYEXT_LZMA_STATIC): $(PYEXT_LZMA_OBJS)
+
+pyext-lzma-shared: $(PYEXT_LZMA_SHARED)
+pyext-lzma-static: $(PYEXT_LZMA_STATIC)
+
+pyext-lzma-clean:
+ rm -f $(PYEXT_LZMA_LOBJS)
+ rm -f $(PYEXT_LZMA_OBJS)
+ rm -f $(PYEXT_LZMA_SHARED)
+ rm -f $(PYEXT_LZMA_STATIC)
+
+clean: pyext-lzma-clean
+
+.PHONY: pyext-lzma-shared
+.PHONY: pyext-lzma-static
+.PHONY: pyext-lzma-clean
+
+
+# _sqlite3
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/cache.c
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/connection.c
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/cursor.c
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/microprotocols.c
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/module.c
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/prepare_protocol.c
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/row.c
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/statement.c
+PYEXT_SQLITE3_SRCS += pyext/obj/_sqlite/util.c
+
+PYEXT_SQLITE3_LOBJS = $(PYEXT_SQLITE3_SRCS:.c=.lo)
+PYEXT_SQLITE3_OBJS = $(PYEXT_SQLITE3_SRCS:.c=.o)
+
+$(PYEXT_SQLITE3_LOBJS): CFLAGS_CONFIG += $(CFLAGS_SQLITE)
+$(PYEXT_SQLITE3_OBJS): CFLAGS_CONFIG += $(CFLAGS_SQLITE)
+
+PYEXT_SQLITE3_SHARED = pyext/_sqlite3$(PYTHON_SOEXT)
+PYEXT_SQLITE3_STATIC = pyext/_sqlite3$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SQLITE3_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_SQLITE)
+$(PYEXT_SQLITE3_SHARED): $(PYEXT_SQLITE3_LOBJS)
+$(PYEXT_SQLITE3_STATIC): $(PYEXT_SQLITE3_OBJS)
+
+pyext-sqlite3-shared: $(PYEXT_SQLITE3_SHARED)
+pyext-sqlite3-static: $(PYEXT_SQLITE3_STATIC)
+
+pyext-sqlite3-clean:
+ rm -f $(PYEXT_SQLITE3_LOBJS)
+ rm -f $(PYEXT_SQLITE3_OBJS)
+ rm -f $(PYEXT_SQLITE3_SHARED)
+ rm -f $(PYEXT_SQLITE3_STATIC)
+
+clean: pyext-sqlite3-clean
+
+.PHONY: pyext-sqlite3-shared
+.PHONY: pyext-sqlite3-static
+.PHONY: pyext-sqlite3-clean
+
+
+# _ssl
+PYEXT_SSL_SRCS += pyext/obj/_ssl.c
+
+PYEXT_SSL_LOBJS = $(PYEXT_SSL_SRCS:.c=.lo)
+PYEXT_SSL_OBJS = $(PYEXT_SSL_SRCS:.c=.o)
+
+
+PYEXT_SSL_SHARED = pyext/_ssl$(PYTHON_SOEXT)
+PYEXT_SSL_STATIC = pyext/_ssl$(OS_ARCHIVE_EXT)
+
+$(PYEXT_SSL_SHARED): LDFLAGS_DYNEXT += -lssl -lcrypto
+$(PYEXT_SSL_SHARED): $(PYEXT_SSL_LOBJS)
+$(PYEXT_SSL_STATIC): $(PYEXT_SSL_OBJS)
+
+pyext-ssl-shared: $(PYEXT_SSL_SHARED)
+pyext-ssl-static: $(PYEXT_SSL_STATIC)
+
+pyext-ssl-clean:
+ rm -f $(PYEXT_SSL_LOBJS)
+ rm -f $(PYEXT_SSL_OBJS)
+ rm -f $(PYEXT_SSL_SHARED)
+ rm -f $(PYEXT_SSL_STATIC)
+
+clean: pyext-ssl-clean
+
+.PHONY: pyext-ssl-shared
+.PHONY: pyext-ssl-static
+.PHONY: pyext-ssl-clean
+
+
+# _tkinter
+PYEXT_TKINTER_SRCS += pyext/obj/_tkinter.c
+PYEXT_TKINTER_SRCS += pyext/obj/tkappinit.c
+
+PYEXT_TKINTER_LOBJS = $(PYEXT_TKINTER_SRCS:.c=.lo)
+PYEXT_TKINTER_OBJS = $(PYEXT_TKINTER_SRCS:.c=.o)
+
+$(PYEXT_TKINTER_LOBJS): CFLAGS_CONFIG += $(CFLAGS_TCLTK)
+$(PYEXT_TKINTER_OBJS): CFLAGS_CONFIG += $(CFLAGS_TCLTK)
+
+PYEXT_TKINTER_SHARED = pyext/_tkinter$(PYTHON_SOEXT)
+PYEXT_TKINTER_STATIC = pyext/_tkinter$(OS_ARCHIVE_EXT)
+
+$(PYEXT_TKINTER_SHARED): LDFLAGS_DYNEXT += $(LDFLAGS_TCLTK)
+$(PYEXT_TKINTER_SHARED): $(PYEXT_TKINTER_LOBJS)
+$(PYEXT_TKINTER_STATIC): $(PYEXT_TKINTER_OBJS)
+
+pyext-tkinter-shared: $(PYEXT_TKINTER_SHARED)
+pyext-tkinter-static: $(PYEXT_TKINTER_STATIC)
+
+pyext-tkinter-clean:
+ rm -f $(PYEXT_TKINTER_LOBJS)
+ rm -f $(PYEXT_TKINTER_OBJS)
+ rm -f $(PYEXT_TKINTER_SHARED)
+ rm -f $(PYEXT_TKINTER_STATIC)
+
+clean: pyext-tkinter-clean
+
+.PHONY: pyext-tkinter-shared
+.PHONY: pyext-tkinter-static
+.PHONY: pyext-tkinter-clean
+
+
+# binascii
+PYEXT_BINASCII_SRCS += pyext/obj/binascii.c
+
+PYEXT_BINASCII_LOBJS = $(PYEXT_BINASCII_SRCS:.c=.lo)
+PYEXT_BINASCII_OBJS = $(PYEXT_BINASCII_SRCS:.c=.o)
+
+
+PYEXT_BINASCII_SHARED = pyext/binascii$(PYTHON_SOEXT)
+PYEXT_BINASCII_STATIC = pyext/binascii$(OS_ARCHIVE_EXT)
+
+$(PYEXT_BINASCII_SHARED): LDFLAGS_DYNEXT += -lz
+$(PYEXT_BINASCII_SHARED): $(PYEXT_BINASCII_LOBJS)
+$(PYEXT_BINASCII_STATIC): $(PYEXT_BINASCII_OBJS)
+
+pyext-binascii-shared: $(PYEXT_BINASCII_SHARED)
+pyext-binascii-static: $(PYEXT_BINASCII_STATIC)
+
+pyext-binascii-clean:
+ rm -f $(PYEXT_BINASCII_LOBJS)
+ rm -f $(PYEXT_BINASCII_OBJS)
+ rm -f $(PYEXT_BINASCII_SHARED)
+ rm -f $(PYEXT_BINASCII_STATIC)
+
+clean: pyext-binascii-clean
+
+.PHONY: pyext-binascii-shared
+.PHONY: pyext-binascii-static
+.PHONY: pyext-binascii-clean
+
+
+# pyexpat
+PYEXT_PYEXPAT_SRCS += pyext/obj/pyexpat.c
+
+PYEXT_PYEXPAT_LOBJS = $(PYEXT_PYEXPAT_SRCS:.c=.lo)
+PYEXT_PYEXPAT_OBJS = $(PYEXT_PYEXPAT_SRCS:.c=.o)
+
+
+PYEXT_PYEXPAT_SHARED = pyext/pyexpat$(PYTHON_SOEXT)
+PYEXT_PYEXPAT_STATIC = pyext/pyexpat$(OS_ARCHIVE_EXT)
+
+$(PYEXT_PYEXPAT_SHARED): LDFLAGS_DYNEXT += -lexpat
+$(PYEXT_PYEXPAT_SHARED): $(PYEXT_PYEXPAT_LOBJS)
+$(PYEXT_PYEXPAT_STATIC): $(PYEXT_PYEXPAT_OBJS)
+
+pyext-pyexpat-shared: $(PYEXT_PYEXPAT_SHARED)
+pyext-pyexpat-static: $(PYEXT_PYEXPAT_STATIC)
+
+pyext-pyexpat-clean:
+ rm -f $(PYEXT_PYEXPAT_LOBJS)
+ rm -f $(PYEXT_PYEXPAT_OBJS)
+ rm -f $(PYEXT_PYEXPAT_SHARED)
+ rm -f $(PYEXT_PYEXPAT_STATIC)
+
+clean: pyext-pyexpat-clean
+
+.PHONY: pyext-pyexpat-shared
+.PHONY: pyext-pyexpat-static
+.PHONY: pyext-pyexpat-clean
+
+
+# readline
+PYEXT_READLINE_SRCS += pyext/obj/readline.c
+
+PYEXT_READLINE_LOBJS = $(PYEXT_READLINE_SRCS:.c=.lo)
+PYEXT_READLINE_OBJS = $(PYEXT_READLINE_SRCS:.c=.o)
+
+
+PYEXT_READLINE_SHARED = pyext/readline$(PYTHON_SOEXT)
+PYEXT_READLINE_STATIC = pyext/readline$(OS_ARCHIVE_EXT)
+
+$(PYEXT_READLINE_SHARED): LDFLAGS_DYNEXT += -lreadline
+$(PYEXT_READLINE_SHARED): $(PYEXT_READLINE_LOBJS)
+$(PYEXT_READLINE_STATIC): $(PYEXT_READLINE_OBJS)
+
+pyext-readline-shared: $(PYEXT_READLINE_SHARED)
+pyext-readline-static: $(PYEXT_READLINE_STATIC)
+
+pyext-readline-clean:
+ rm -f $(PYEXT_READLINE_LOBJS)
+ rm -f $(PYEXT_READLINE_OBJS)
+ rm -f $(PYEXT_READLINE_SHARED)
+ rm -f $(PYEXT_READLINE_STATIC)
+
+clean: pyext-readline-clean
+
+.PHONY: pyext-readline-shared
+.PHONY: pyext-readline-static
+.PHONY: pyext-readline-clean
+
+
+# zlib
+PYEXT_ZLIB_SRCS += pyext/obj/zlibmodule.c
+
+PYEXT_ZLIB_LOBJS = $(PYEXT_ZLIB_SRCS:.c=.lo)
+PYEXT_ZLIB_OBJS = $(PYEXT_ZLIB_SRCS:.c=.o)
+
+
+PYEXT_ZLIB_SHARED = pyext/zlib$(PYTHON_SOEXT)
+PYEXT_ZLIB_STATIC = pyext/zlib$(OS_ARCHIVE_EXT)
+
+$(PYEXT_ZLIB_SHARED): LDFLAGS_DYNEXT += -lz
+$(PYEXT_ZLIB_SHARED): $(PYEXT_ZLIB_LOBJS)
+$(PYEXT_ZLIB_STATIC): $(PYEXT_ZLIB_OBJS)
+
+pyext-zlib-shared: $(PYEXT_ZLIB_SHARED)
+pyext-zlib-static: $(PYEXT_ZLIB_STATIC)
+
+pyext-zlib-clean:
+ rm -f $(PYEXT_ZLIB_LOBJS)
+ rm -f $(PYEXT_ZLIB_OBJS)
+ rm -f $(PYEXT_ZLIB_SHARED)
+ rm -f $(PYEXT_ZLIB_STATIC)
+
+clean: pyext-zlib-clean
+
+.PHONY: pyext-zlib-shared
+.PHONY: pyext-zlib-static
+.PHONY: pyext-zlib-clean
+
+
diff --git a/profiles/pyexts/subsets.mk b/project/variants/3.6.3/subsets.mk
index 6d5baba..6d5baba 100644
--- a/profiles/pyexts/subsets.mk
+++ b/project/variants/3.6.3/subsets.mk