From 6dc580e25dd8cf717a351c3a72b8c1dcf79062e0 Mon Sep 17 00:00:00 2001 From: midipix Date: Dec 19 2018 01:38:40 +0000 Subject: project: added rules and definitions for building python's extension modules. --- diff --git a/profiles/toolchain/64-default.h b/profiles/toolchain/64-default.h index 5bc7057..098854a 100644 --- a/profiles/toolchain/64-default.h +++ b/profiles/toolchain/64-default.h @@ -22,4 +22,7 @@ #define HAVE_GCC_ASM_FOR_X87 1 #define HAVE_GCC_ASM_FOR_X64 1 +#define CONFIG_64 1 +#define ASM 1 + #endif diff --git a/project/config/cfgdefs.in b/project/config/cfgdefs.in index 7a96696..62fbd73 100644 --- a/project/config/cfgdefs.in +++ b/project/config/cfgdefs.in @@ -4,4 +4,5 @@ PYTHON_MAJOR = @python_major@ PYTHON_MINOR = @python_minor@ PYTHON_MICRO = @python_micro@ PYTHON_SOABI = cpython-$(PYTHON_MAJOR)$(PYTHON_MINOR)-$(CCHOST) +PYTHON_SOEXT = .$(PYTHON_SOABI)$(OS_LIB_SUFFIX) diff --git a/project/depends.mk b/project/depends.mk index e69de29..b640a15 100644 --- a/project/depends.mk +++ b/project/depends.mk @@ -0,0 +1,26 @@ +# shared extensions: dependency switches +CFLAGS_NCURSES += -I$(SYSROOT)/usr/local/include/ncurses -I$(SYSROOT)/usr/include/ncurses +LDFLAGS_NCURSES += -Wl,--as-needed $(LDFLAGS_NCURSES_LIBS) -Wl,--no-as-needed + +CFLAGS_SQLITE += -I$(SYSROOT)/usr/local/include/sqlite3 -I$(SYSROOT)/usr/include/sqlite3 +CFLAGS_SQLITE += -DMODULE_NAME=\"sqlite3\" +CFLAGS_SQLITE += -DSQLITE_OMIT_LOAD_EXTENSION +LDFLAGS_SQLITE += -lsqlite3 + +CFLAGS_EXPAT += -DXML_DEV_URANDOM +LDFLAGS_EXPAT += -lexpat + +CFLAGS_DBM += +LDFLAGS_DBM += -lgdbm_compat + +CFLAGS_TCLTK += -DWITH_APPINIT +LDFLAGS_TCLTK += $(LDFLAGS_TCLTK_LIBS) + +# static extensions: dependency switch +LDFLAGS_PYEXT_STATIC += -lssl -lcrypto -lgdbm -lreadline +LDFLAGS_PYEXT_STATIC += -lbz2 -lffi -lintl -llzma -lz +LDFLAGS_NCURSES_STATIC += $(LDFLAGS_NCURSES) +LDFLAGS_SQLITE_STATIC += $(LDFLAGS_SQLITE) +LDFLAGS_EXPAT_STATIC += $(LDFLAGS_EXPAT) +LDFLAGS_DBM_STATIC += $(LDFLAGS_DBM) +LDFLAGS_TCLTK_STATIC += $(LDFLAGS_TCLTK) diff --git a/project/extras.mk b/project/extras.mk index 8962e1b..dcac128 100644 --- a/project/extras.mk +++ b/project/extras.mk @@ -23,3 +23,27 @@ else COMMON_SRCS += $(DYNLOAD_SRCS) CFLAGS_CONFIG += -DHAVE_DYNAMIC_LOADING -DSOABI=\"$(PYTHON_SOABI)\" endif + +# extension objects +pyext/obj/%.lo: $(SOURCE_DIR)/Modules/%.c $(ALL_HEADERS) host.tag tree.tag config.tag + $(CC) -c -o $@ $< $(CFLAGS_SHARED) + +pyext/obj/%.o: $(SOURCE_DIR)/Modules/%.c $(ALL_HEADERS) host.tag tree.tag config.tag + $(CC) -c -o $@ $< $(CFLAGS_STATIC) + +# dynamically loaded extension module +pyext/%$(PYTHON_SOEXT): LDFLAGS_SONAME = +pyext/%$(PYTHON_SOEXT): LDFLAGS_DSOEXT = -Wl,-soname -Wl,$(subst pyext/,,$@) +pyext/%$(PYTHON_SOEXT): LDFLAGS_DYNEXT = $(LDFLAGS_DSOEXT) $(LDFLAGS_PYEXT) + +pyext/%$(PYTHON_SOEXT): $(DSO_REF_SOLINK) + $(CC) -shared -o $@ $^ $(LDFLAGS_SHARED) $(LDFLAGS_DYNEXT) \ + -l$(PACKAGE) $(LDFLAGS_DEPS) + +# statically linked extensions +pyext/%$(OS_ARCHIVE_EXT): + rm -f $@ + $(AR) rcs $@ $^ + +# build rules for python's extension modules +include $(PROJECT_DIR)/project/pyexts.mk diff --git a/project/pyexts.mk b/project/pyexts.mk new file mode 100644 index 0000000..d2ee7a9 --- /dev/null +++ b/project/pyexts.mk @@ -0,0 +1,1922 @@ +# _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 +$(PYEXT_DECIMAL_OBJS): CFLAGS_CONFIG += -I$(SOURCE_DIR)/Modules/_decimal/libmpdec + +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_SHARED = pyext/_dbm$(PYTHON_SOEXT) +PYEXT_DBM_STATIC = pyext/_dbm$(OS_ARCHIVE_EXT) + +$(PYEXT_DBM_SHARED): LDFLAGS_DYNEXT += -lgdbm_compat +$(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/project/tree.mk b/project/tree.mk index 4ec38c4..3896722 100644 --- a/project/tree.mk +++ b/project/tree.mk @@ -6,4 +6,14 @@ tree.tag: mkdir -p core/Parser mkdir -p core/Programs mkdir -p core/Python + mkdir -p pyext + mkdir -p pyext/obj + mkdir -p pyext/obj/cjkcodecs + mkdir -p pyext/obj/_blake2 + mkdir -p pyext/obj/_ctypes + mkdir -p pyext/obj/_decimal + mkdir -p pyext/obj/_decimal/libmpdec + mkdir -p pyext/obj/_multiprocessing + mkdir -p pyext/obj/_sha3 + mkdir -p pyext/obj/_sqlite touch tree.tag