aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/python
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/python
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/python')
-rw-r--r--contrib/libs/python/.yandex_meta/devtools.copyrights.report1
-rw-r--r--contrib/libs/python/.yandex_meta/devtools.licenses.custom.spdx.txt1
-rw-r--r--contrib/libs/python/.yandex_meta/devtools.licenses.report30
-rw-r--r--contrib/libs/python/.yandex_meta/licenses.list.txt0
-rw-r--r--contrib/libs/python/Include/Python-ast.h7
-rw-r--r--contrib/libs/python/Include/Python.h7
-rw-r--r--contrib/libs/python/Include/abstract.h7
-rw-r--r--contrib/libs/python/Include/accu.h7
-rw-r--r--contrib/libs/python/Include/asdl.h7
-rw-r--r--contrib/libs/python/Include/ast.h7
-rw-r--r--contrib/libs/python/Include/bitset.h7
-rw-r--r--contrib/libs/python/Include/bltinmodule.h7
-rw-r--r--contrib/libs/python/Include/boolobject.h7
-rw-r--r--contrib/libs/python/Include/bufferobject.h7
-rw-r--r--contrib/libs/python/Include/bytearrayobject.h7
-rw-r--r--contrib/libs/python/Include/bytes_methods.h7
-rw-r--r--contrib/libs/python/Include/bytesobject.h7
-rw-r--r--contrib/libs/python/Include/cStringIO.h7
-rw-r--r--contrib/libs/python/Include/cellobject.h7
-rw-r--r--contrib/libs/python/Include/ceval.h7
-rw-r--r--contrib/libs/python/Include/classobject.h7
-rw-r--r--contrib/libs/python/Include/cobject.h7
-rw-r--r--contrib/libs/python/Include/code.h7
-rw-r--r--contrib/libs/python/Include/codecs.h7
-rw-r--r--contrib/libs/python/Include/compile.h7
-rw-r--r--contrib/libs/python/Include/complexobject.h7
-rw-r--r--contrib/libs/python/Include/config_platform.h7
-rw-r--r--contrib/libs/python/Include/context.h7
-rw-r--r--contrib/libs/python/Include/cpython/abstract.h7
-rw-r--r--contrib/libs/python/Include/cpython/bytearrayobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/bytesobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/ceval.h7
-rw-r--r--contrib/libs/python/Include/cpython/code.h7
-rw-r--r--contrib/libs/python/Include/cpython/dictobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/fileobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/fileutils.h7
-rw-r--r--contrib/libs/python/Include/cpython/frameobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/import.h7
-rw-r--r--contrib/libs/python/Include/cpython/initconfig.h7
-rw-r--r--contrib/libs/python/Include/cpython/interpreteridobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/listobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/methodobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/object.h7
-rw-r--r--contrib/libs/python/Include/cpython/objimpl.h7
-rw-r--r--contrib/libs/python/Include/cpython/pyerrors.h7
-rw-r--r--contrib/libs/python/Include/cpython/pylifecycle.h7
-rw-r--r--contrib/libs/python/Include/cpython/pymem.h7
-rw-r--r--contrib/libs/python/Include/cpython/pystate.h7
-rw-r--r--contrib/libs/python/Include/cpython/sysmodule.h7
-rw-r--r--contrib/libs/python/Include/cpython/traceback.h7
-rw-r--r--contrib/libs/python/Include/cpython/tupleobject.h7
-rw-r--r--contrib/libs/python/Include/cpython/unicodeobject.h7
-rw-r--r--contrib/libs/python/Include/datetime.h7
-rw-r--r--contrib/libs/python/Include/descrobject.h7
-rw-r--r--contrib/libs/python/Include/dictobject.h7
-rw-r--r--contrib/libs/python/Include/dtoa.h7
-rw-r--r--contrib/libs/python/Include/dynamic_annotations.h7
-rw-r--r--contrib/libs/python/Include/enumobject.h7
-rw-r--r--contrib/libs/python/Include/errcode.h7
-rw-r--r--contrib/libs/python/Include/eval.h7
-rw-r--r--contrib/libs/python/Include/exports.h7
-rw-r--r--contrib/libs/python/Include/fileobject.h7
-rw-r--r--contrib/libs/python/Include/fileutils.h7
-rw-r--r--contrib/libs/python/Include/floatobject.h7
-rw-r--r--contrib/libs/python/Include/frameobject.h7
-rw-r--r--contrib/libs/python/Include/funcobject.h7
-rw-r--r--contrib/libs/python/Include/genericaliasobject.h7
-rw-r--r--contrib/libs/python/Include/genobject.h7
-rw-r--r--contrib/libs/python/Include/graminit.h7
-rw-r--r--contrib/libs/python/Include/grammar.h7
-rw-r--r--contrib/libs/python/Include/import.h7
-rw-r--r--contrib/libs/python/Include/interpreteridobject.h7
-rw-r--r--contrib/libs/python/Include/intobject.h7
-rw-r--r--contrib/libs/python/Include/intrcheck.h7
-rw-r--r--contrib/libs/python/Include/iterobject.h7
-rw-r--r--contrib/libs/python/Include/listobject.h7
-rw-r--r--contrib/libs/python/Include/longintrepr.h7
-rw-r--r--contrib/libs/python/Include/longobject.h7
-rw-r--r--contrib/libs/python/Include/marshal.h7
-rw-r--r--contrib/libs/python/Include/memoryobject.h7
-rw-r--r--contrib/libs/python/Include/metagrammar.h7
-rw-r--r--contrib/libs/python/Include/methodobject.h7
-rw-r--r--contrib/libs/python/Include/modsupport.h7
-rw-r--r--contrib/libs/python/Include/moduleobject.h7
-rw-r--r--contrib/libs/python/Include/namespaceobject.h7
-rw-r--r--contrib/libs/python/Include/node.h7
-rw-r--r--contrib/libs/python/Include/object.h7
-rw-r--r--contrib/libs/python/Include/objimpl.h7
-rw-r--r--contrib/libs/python/Include/odictobject.h7
-rw-r--r--contrib/libs/python/Include/opcode.h7
-rw-r--r--contrib/libs/python/Include/osdefs.h7
-rw-r--r--contrib/libs/python/Include/osmodule.h7
-rw-r--r--contrib/libs/python/Include/parsetok.h7
-rw-r--r--contrib/libs/python/Include/patchlevel.h7
-rw-r--r--contrib/libs/python/Include/pgen.h7
-rw-r--r--contrib/libs/python/Include/pgenheaders.h7
-rw-r--r--contrib/libs/python/Include/picklebufobject.h7
-rw-r--r--contrib/libs/python/Include/py_curses.h7
-rw-r--r--contrib/libs/python/Include/pyarena.h7
-rw-r--r--contrib/libs/python/Include/pyatomic.h7
-rw-r--r--contrib/libs/python/Include/pycapsule.h7
-rw-r--r--contrib/libs/python/Include/pyconfig-linux.h7
-rw-r--r--contrib/libs/python/Include/pyconfig-musl.h7
-rw-r--r--contrib/libs/python/Include/pyconfig-osx.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.cygwin.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.darwin.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.freebsd.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.ios.arm64.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.ios.armv7.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.ios.i386.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.ios.x86_64.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.linux.h7
-rw-r--r--contrib/libs/python/Include/pyconfig.win32.h7
-rw-r--r--contrib/libs/python/Include/pyctype.h7
-rw-r--r--contrib/libs/python/Include/pydebug.h7
-rw-r--r--contrib/libs/python/Include/pydtrace.h7
-rw-r--r--contrib/libs/python/Include/pyerrors.h7
-rw-r--r--contrib/libs/python/Include/pyexpat.h7
-rw-r--r--contrib/libs/python/Include/pyfpe.h7
-rw-r--r--contrib/libs/python/Include/pyframe.h7
-rw-r--r--contrib/libs/python/Include/pygetopt.h7
-rw-r--r--contrib/libs/python/Include/pyhash.h7
-rw-r--r--contrib/libs/python/Include/pylifecycle.h7
-rw-r--r--contrib/libs/python/Include/pymacconfig.h7
-rw-r--r--contrib/libs/python/Include/pymacro.h7
-rw-r--r--contrib/libs/python/Include/pymactoolbox.h7
-rw-r--r--contrib/libs/python/Include/pymath.h7
-rw-r--r--contrib/libs/python/Include/pymem.h7
-rw-r--r--contrib/libs/python/Include/pyport.h7
-rw-r--r--contrib/libs/python/Include/pystate.h7
-rw-r--r--contrib/libs/python/Include/pystrcmp.h7
-rw-r--r--contrib/libs/python/Include/pystrhex.h7
-rw-r--r--contrib/libs/python/Include/pystrtod.h7
-rw-r--r--contrib/libs/python/Include/pythonrun.h7
-rw-r--r--contrib/libs/python/Include/pythread.h7
-rw-r--r--contrib/libs/python/Include/pytime.h7
-rw-r--r--contrib/libs/python/Include/rangeobject.h7
-rw-r--r--contrib/libs/python/Include/setobject.h7
-rw-r--r--contrib/libs/python/Include/sliceobject.h7
-rw-r--r--contrib/libs/python/Include/stringobject.h7
-rw-r--r--contrib/libs/python/Include/structmember.h7
-rw-r--r--contrib/libs/python/Include/structseq.h7
-rw-r--r--contrib/libs/python/Include/symtable.h7
-rw-r--r--contrib/libs/python/Include/sysmodule.h7
-rw-r--r--contrib/libs/python/Include/timefuncs.h7
-rw-r--r--contrib/libs/python/Include/token.h7
-rw-r--r--contrib/libs/python/Include/traceback.h7
-rw-r--r--contrib/libs/python/Include/tracemalloc.h7
-rw-r--r--contrib/libs/python/Include/tupleobject.h7
-rw-r--r--contrib/libs/python/Include/typeslots.h7
-rw-r--r--contrib/libs/python/Include/ucnhash.h7
-rw-r--r--contrib/libs/python/Include/unicodeobject.h7
-rw-r--r--contrib/libs/python/Include/warnings.h7
-rw-r--r--contrib/libs/python/Include/weakrefobject.h7
-rw-r--r--contrib/libs/python/Include/ya.make29
-rw-r--r--contrib/libs/python/README.md9
-rw-r--r--contrib/libs/python/gen_includes.py64
-rw-r--r--contrib/libs/python/ut/lib/test.cpp21
-rw-r--r--contrib/libs/python/ut/lib/test.h7
-rw-r--r--contrib/libs/python/ut/lib/ya.make17
-rw-r--r--contrib/libs/python/ut/py2/use.cpp10
-rw-r--r--contrib/libs/python/ut/py2/ya.make9
-rw-r--r--contrib/libs/python/ut/py3/use.cpp10
-rw-r--r--contrib/libs/python/ut/py3/ya.make10
-rw-r--r--contrib/libs/python/ut/ya.make7
-rw-r--r--contrib/libs/python/ya.make52
167 files changed, 1334 insertions, 0 deletions
diff --git a/contrib/libs/python/.yandex_meta/devtools.copyrights.report b/contrib/libs/python/.yandex_meta/devtools.copyrights.report
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/contrib/libs/python/.yandex_meta/devtools.copyrights.report
@@ -0,0 +1 @@
+
diff --git a/contrib/libs/python/.yandex_meta/devtools.licenses.custom.spdx.txt b/contrib/libs/python/.yandex_meta/devtools.licenses.custom.spdx.txt
new file mode 100644
index 0000000000..279a5f0748
--- /dev/null
+++ b/contrib/libs/python/.yandex_meta/devtools.licenses.custom.spdx.txt
@@ -0,0 +1 @@
+YandexOpen
diff --git a/contrib/libs/python/.yandex_meta/devtools.licenses.report b/contrib/libs/python/.yandex_meta/devtools.licenses.report
new file mode 100644
index 0000000000..cb930522cc
--- /dev/null
+++ b/contrib/libs/python/.yandex_meta/devtools.licenses.report
@@ -0,0 +1,30 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
diff --git a/contrib/libs/python/.yandex_meta/licenses.list.txt b/contrib/libs/python/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/contrib/libs/python/.yandex_meta/licenses.list.txt
diff --git a/contrib/libs/python/Include/Python-ast.h b/contrib/libs/python/Include/Python-ast.h
new file mode 100644
index 0000000000..7628fd5a2a
--- /dev/null
+++ b/contrib/libs/python/Include/Python-ast.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/Python-ast.h>
+#else
+#include <contrib/tools/python/src/Include/Python-ast.h>
+#endif
diff --git a/contrib/libs/python/Include/Python.h b/contrib/libs/python/Include/Python.h
new file mode 100644
index 0000000000..5aa4c0b515
--- /dev/null
+++ b/contrib/libs/python/Include/Python.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/Python.h>
+#else
+#include <contrib/tools/python/src/Include/Python.h>
+#endif
diff --git a/contrib/libs/python/Include/abstract.h b/contrib/libs/python/Include/abstract.h
new file mode 100644
index 0000000000..3073b25e25
--- /dev/null
+++ b/contrib/libs/python/Include/abstract.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/abstract.h>
+#else
+#include <contrib/tools/python/src/Include/abstract.h>
+#endif
diff --git a/contrib/libs/python/Include/accu.h b/contrib/libs/python/Include/accu.h
new file mode 100644
index 0000000000..acd0f68a6a
--- /dev/null
+++ b/contrib/libs/python/Include/accu.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/accu.h>
+#else
+#error "No <accu.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/asdl.h b/contrib/libs/python/Include/asdl.h
new file mode 100644
index 0000000000..2f73d8ca48
--- /dev/null
+++ b/contrib/libs/python/Include/asdl.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/asdl.h>
+#else
+#include <contrib/tools/python/src/Include/asdl.h>
+#endif
diff --git a/contrib/libs/python/Include/ast.h b/contrib/libs/python/Include/ast.h
new file mode 100644
index 0000000000..124a7c1497
--- /dev/null
+++ b/contrib/libs/python/Include/ast.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/ast.h>
+#else
+#include <contrib/tools/python/src/Include/ast.h>
+#endif
diff --git a/contrib/libs/python/Include/bitset.h b/contrib/libs/python/Include/bitset.h
new file mode 100644
index 0000000000..7e7a26c769
--- /dev/null
+++ b/contrib/libs/python/Include/bitset.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/bitset.h>
+#else
+#include <contrib/tools/python/src/Include/bitset.h>
+#endif
diff --git a/contrib/libs/python/Include/bltinmodule.h b/contrib/libs/python/Include/bltinmodule.h
new file mode 100644
index 0000000000..0cd2a7ac76
--- /dev/null
+++ b/contrib/libs/python/Include/bltinmodule.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/bltinmodule.h>
+#else
+#error "No <bltinmodule.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/boolobject.h b/contrib/libs/python/Include/boolobject.h
new file mode 100644
index 0000000000..9ab8bbe43c
--- /dev/null
+++ b/contrib/libs/python/Include/boolobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/boolobject.h>
+#else
+#include <contrib/tools/python/src/Include/boolobject.h>
+#endif
diff --git a/contrib/libs/python/Include/bufferobject.h b/contrib/libs/python/Include/bufferobject.h
new file mode 100644
index 0000000000..aed38f50a9
--- /dev/null
+++ b/contrib/libs/python/Include/bufferobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <bufferobject.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/bufferobject.h>
+#endif
diff --git a/contrib/libs/python/Include/bytearrayobject.h b/contrib/libs/python/Include/bytearrayobject.h
new file mode 100644
index 0000000000..0e69010be7
--- /dev/null
+++ b/contrib/libs/python/Include/bytearrayobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/bytearrayobject.h>
+#else
+#include <contrib/tools/python/src/Include/bytearrayobject.h>
+#endif
diff --git a/contrib/libs/python/Include/bytes_methods.h b/contrib/libs/python/Include/bytes_methods.h
new file mode 100644
index 0000000000..f74e146029
--- /dev/null
+++ b/contrib/libs/python/Include/bytes_methods.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <bytes_methods.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/bytes_methods.h>
+#endif
diff --git a/contrib/libs/python/Include/bytesobject.h b/contrib/libs/python/Include/bytesobject.h
new file mode 100644
index 0000000000..ca972c3df2
--- /dev/null
+++ b/contrib/libs/python/Include/bytesobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/bytesobject.h>
+#else
+#include <contrib/tools/python/src/Include/bytesobject.h>
+#endif
diff --git a/contrib/libs/python/Include/cStringIO.h b/contrib/libs/python/Include/cStringIO.h
new file mode 100644
index 0000000000..3a8a908d56
--- /dev/null
+++ b/contrib/libs/python/Include/cStringIO.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <cStringIO.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/cStringIO.h>
+#endif
diff --git a/contrib/libs/python/Include/cellobject.h b/contrib/libs/python/Include/cellobject.h
new file mode 100644
index 0000000000..3345daa7fd
--- /dev/null
+++ b/contrib/libs/python/Include/cellobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cellobject.h>
+#else
+#include <contrib/tools/python/src/Include/cellobject.h>
+#endif
diff --git a/contrib/libs/python/Include/ceval.h b/contrib/libs/python/Include/ceval.h
new file mode 100644
index 0000000000..f169fdbe79
--- /dev/null
+++ b/contrib/libs/python/Include/ceval.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/ceval.h>
+#else
+#include <contrib/tools/python/src/Include/ceval.h>
+#endif
diff --git a/contrib/libs/python/Include/classobject.h b/contrib/libs/python/Include/classobject.h
new file mode 100644
index 0000000000..6f7a4f5e6e
--- /dev/null
+++ b/contrib/libs/python/Include/classobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/classobject.h>
+#else
+#include <contrib/tools/python/src/Include/classobject.h>
+#endif
diff --git a/contrib/libs/python/Include/cobject.h b/contrib/libs/python/Include/cobject.h
new file mode 100644
index 0000000000..8fd2754e01
--- /dev/null
+++ b/contrib/libs/python/Include/cobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <cobject.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/cobject.h>
+#endif
diff --git a/contrib/libs/python/Include/code.h b/contrib/libs/python/Include/code.h
new file mode 100644
index 0000000000..e21d9c3ce3
--- /dev/null
+++ b/contrib/libs/python/Include/code.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/code.h>
+#else
+#include <contrib/tools/python/src/Include/code.h>
+#endif
diff --git a/contrib/libs/python/Include/codecs.h b/contrib/libs/python/Include/codecs.h
new file mode 100644
index 0000000000..52f76040fb
--- /dev/null
+++ b/contrib/libs/python/Include/codecs.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/codecs.h>
+#else
+#include <contrib/tools/python/src/Include/codecs.h>
+#endif
diff --git a/contrib/libs/python/Include/compile.h b/contrib/libs/python/Include/compile.h
new file mode 100644
index 0000000000..eb3595aab0
--- /dev/null
+++ b/contrib/libs/python/Include/compile.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/compile.h>
+#else
+#include <contrib/tools/python/src/Include/compile.h>
+#endif
diff --git a/contrib/libs/python/Include/complexobject.h b/contrib/libs/python/Include/complexobject.h
new file mode 100644
index 0000000000..2c510c47f4
--- /dev/null
+++ b/contrib/libs/python/Include/complexobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/complexobject.h>
+#else
+#include <contrib/tools/python/src/Include/complexobject.h>
+#endif
diff --git a/contrib/libs/python/Include/config_platform.h b/contrib/libs/python/Include/config_platform.h
new file mode 100644
index 0000000000..afd9bf5123
--- /dev/null
+++ b/contrib/libs/python/Include/config_platform.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <config_platform.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/config_platform.h>
+#endif
diff --git a/contrib/libs/python/Include/context.h b/contrib/libs/python/Include/context.h
new file mode 100644
index 0000000000..61ed2c0dd1
--- /dev/null
+++ b/contrib/libs/python/Include/context.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/context.h>
+#else
+#error "No <context.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/abstract.h b/contrib/libs/python/Include/cpython/abstract.h
new file mode 100644
index 0000000000..06fa02d641
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/abstract.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/abstract.h>
+#else
+#error "No <cpython/abstract.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/bytearrayobject.h b/contrib/libs/python/Include/cpython/bytearrayobject.h
new file mode 100644
index 0000000000..5ed47993c2
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/bytearrayobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/bytearrayobject.h>
+#else
+#error "No <cpython/bytearrayobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/bytesobject.h b/contrib/libs/python/Include/cpython/bytesobject.h
new file mode 100644
index 0000000000..d960c6a903
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/bytesobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/bytesobject.h>
+#else
+#error "No <cpython/bytesobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/ceval.h b/contrib/libs/python/Include/cpython/ceval.h
new file mode 100644
index 0000000000..dcefa8e58b
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/ceval.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/ceval.h>
+#else
+#error "No <cpython/ceval.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/code.h b/contrib/libs/python/Include/cpython/code.h
new file mode 100644
index 0000000000..b652426858
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/code.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/code.h>
+#else
+#error "No <cpython/code.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/dictobject.h b/contrib/libs/python/Include/cpython/dictobject.h
new file mode 100644
index 0000000000..e5a4c02e71
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/dictobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/dictobject.h>
+#else
+#error "No <cpython/dictobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/fileobject.h b/contrib/libs/python/Include/cpython/fileobject.h
new file mode 100644
index 0000000000..de9bc96c48
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/fileobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/fileobject.h>
+#else
+#error "No <cpython/fileobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/fileutils.h b/contrib/libs/python/Include/cpython/fileutils.h
new file mode 100644
index 0000000000..38d4c523e5
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/fileutils.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/fileutils.h>
+#else
+#error "No <cpython/fileutils.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/frameobject.h b/contrib/libs/python/Include/cpython/frameobject.h
new file mode 100644
index 0000000000..b681d4b1c9
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/frameobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/frameobject.h>
+#else
+#error "No <cpython/frameobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/import.h b/contrib/libs/python/Include/cpython/import.h
new file mode 100644
index 0000000000..149b0f716e
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/import.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/import.h>
+#else
+#error "No <cpython/import.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/initconfig.h b/contrib/libs/python/Include/cpython/initconfig.h
new file mode 100644
index 0000000000..a00b133147
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/initconfig.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/initconfig.h>
+#else
+#error "No <cpython/initconfig.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/interpreteridobject.h b/contrib/libs/python/Include/cpython/interpreteridobject.h
new file mode 100644
index 0000000000..110dfc0899
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/interpreteridobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/interpreteridobject.h>
+#else
+#error "No <cpython/interpreteridobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/listobject.h b/contrib/libs/python/Include/cpython/listobject.h
new file mode 100644
index 0000000000..f5edc4f307
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/listobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/listobject.h>
+#else
+#error "No <cpython/listobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/methodobject.h b/contrib/libs/python/Include/cpython/methodobject.h
new file mode 100644
index 0000000000..fbaba4bdc7
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/methodobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/methodobject.h>
+#else
+#error "No <cpython/methodobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/object.h b/contrib/libs/python/Include/cpython/object.h
new file mode 100644
index 0000000000..91204cfce4
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/object.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/object.h>
+#else
+#error "No <cpython/object.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/objimpl.h b/contrib/libs/python/Include/cpython/objimpl.h
new file mode 100644
index 0000000000..a787c6f70e
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/objimpl.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/objimpl.h>
+#else
+#error "No <cpython/objimpl.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/pyerrors.h b/contrib/libs/python/Include/cpython/pyerrors.h
new file mode 100644
index 0000000000..6064161ac1
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/pyerrors.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/pyerrors.h>
+#else
+#error "No <cpython/pyerrors.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/pylifecycle.h b/contrib/libs/python/Include/cpython/pylifecycle.h
new file mode 100644
index 0000000000..099f148ef2
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/pylifecycle.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/pylifecycle.h>
+#else
+#error "No <cpython/pylifecycle.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/pymem.h b/contrib/libs/python/Include/cpython/pymem.h
new file mode 100644
index 0000000000..e3256925b6
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/pymem.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/pymem.h>
+#else
+#error "No <cpython/pymem.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/pystate.h b/contrib/libs/python/Include/cpython/pystate.h
new file mode 100644
index 0000000000..c8e5cbc23b
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/pystate.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/pystate.h>
+#else
+#error "No <cpython/pystate.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/sysmodule.h b/contrib/libs/python/Include/cpython/sysmodule.h
new file mode 100644
index 0000000000..3e827d58a5
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/sysmodule.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/sysmodule.h>
+#else
+#error "No <cpython/sysmodule.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/traceback.h b/contrib/libs/python/Include/cpython/traceback.h
new file mode 100644
index 0000000000..9b9e2dc9a5
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/traceback.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/traceback.h>
+#else
+#error "No <cpython/traceback.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/tupleobject.h b/contrib/libs/python/Include/cpython/tupleobject.h
new file mode 100644
index 0000000000..7bc25aaee2
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/tupleobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/tupleobject.h>
+#else
+#error "No <cpython/tupleobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/cpython/unicodeobject.h b/contrib/libs/python/Include/cpython/unicodeobject.h
new file mode 100644
index 0000000000..260680d0ea
--- /dev/null
+++ b/contrib/libs/python/Include/cpython/unicodeobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/cpython/unicodeobject.h>
+#else
+#error "No <cpython/unicodeobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/datetime.h b/contrib/libs/python/Include/datetime.h
new file mode 100644
index 0000000000..b24acd5638
--- /dev/null
+++ b/contrib/libs/python/Include/datetime.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/datetime.h>
+#else
+#include <contrib/tools/python/src/Include/datetime.h>
+#endif
diff --git a/contrib/libs/python/Include/descrobject.h b/contrib/libs/python/Include/descrobject.h
new file mode 100644
index 0000000000..5d450cf256
--- /dev/null
+++ b/contrib/libs/python/Include/descrobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/descrobject.h>
+#else
+#include <contrib/tools/python/src/Include/descrobject.h>
+#endif
diff --git a/contrib/libs/python/Include/dictobject.h b/contrib/libs/python/Include/dictobject.h
new file mode 100644
index 0000000000..36026b4962
--- /dev/null
+++ b/contrib/libs/python/Include/dictobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/dictobject.h>
+#else
+#include <contrib/tools/python/src/Include/dictobject.h>
+#endif
diff --git a/contrib/libs/python/Include/dtoa.h b/contrib/libs/python/Include/dtoa.h
new file mode 100644
index 0000000000..d8c51a71f4
--- /dev/null
+++ b/contrib/libs/python/Include/dtoa.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <dtoa.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/dtoa.h>
+#endif
diff --git a/contrib/libs/python/Include/dynamic_annotations.h b/contrib/libs/python/Include/dynamic_annotations.h
new file mode 100644
index 0000000000..0ffe86e787
--- /dev/null
+++ b/contrib/libs/python/Include/dynamic_annotations.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/dynamic_annotations.h>
+#else
+#error "No <dynamic_annotations.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/enumobject.h b/contrib/libs/python/Include/enumobject.h
new file mode 100644
index 0000000000..08d7a42ee4
--- /dev/null
+++ b/contrib/libs/python/Include/enumobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/enumobject.h>
+#else
+#include <contrib/tools/python/src/Include/enumobject.h>
+#endif
diff --git a/contrib/libs/python/Include/errcode.h b/contrib/libs/python/Include/errcode.h
new file mode 100644
index 0000000000..69259ee2f5
--- /dev/null
+++ b/contrib/libs/python/Include/errcode.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/errcode.h>
+#else
+#include <contrib/tools/python/src/Include/errcode.h>
+#endif
diff --git a/contrib/libs/python/Include/eval.h b/contrib/libs/python/Include/eval.h
new file mode 100644
index 0000000000..cc8c657b1e
--- /dev/null
+++ b/contrib/libs/python/Include/eval.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/eval.h>
+#else
+#include <contrib/tools/python/src/Include/eval.h>
+#endif
diff --git a/contrib/libs/python/Include/exports.h b/contrib/libs/python/Include/exports.h
new file mode 100644
index 0000000000..fdc68cfcf1
--- /dev/null
+++ b/contrib/libs/python/Include/exports.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/exports.h>
+#else
+#error "No <exports.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/fileobject.h b/contrib/libs/python/Include/fileobject.h
new file mode 100644
index 0000000000..ac3aa4c7a2
--- /dev/null
+++ b/contrib/libs/python/Include/fileobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/fileobject.h>
+#else
+#include <contrib/tools/python/src/Include/fileobject.h>
+#endif
diff --git a/contrib/libs/python/Include/fileutils.h b/contrib/libs/python/Include/fileutils.h
new file mode 100644
index 0000000000..86ca07a109
--- /dev/null
+++ b/contrib/libs/python/Include/fileutils.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/fileutils.h>
+#else
+#error "No <fileutils.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/floatobject.h b/contrib/libs/python/Include/floatobject.h
new file mode 100644
index 0000000000..d08083f632
--- /dev/null
+++ b/contrib/libs/python/Include/floatobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/floatobject.h>
+#else
+#include <contrib/tools/python/src/Include/floatobject.h>
+#endif
diff --git a/contrib/libs/python/Include/frameobject.h b/contrib/libs/python/Include/frameobject.h
new file mode 100644
index 0000000000..50168e372a
--- /dev/null
+++ b/contrib/libs/python/Include/frameobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/frameobject.h>
+#else
+#include <contrib/tools/python/src/Include/frameobject.h>
+#endif
diff --git a/contrib/libs/python/Include/funcobject.h b/contrib/libs/python/Include/funcobject.h
new file mode 100644
index 0000000000..d0bde3deb4
--- /dev/null
+++ b/contrib/libs/python/Include/funcobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/funcobject.h>
+#else
+#include <contrib/tools/python/src/Include/funcobject.h>
+#endif
diff --git a/contrib/libs/python/Include/genericaliasobject.h b/contrib/libs/python/Include/genericaliasobject.h
new file mode 100644
index 0000000000..4d218b7e3f
--- /dev/null
+++ b/contrib/libs/python/Include/genericaliasobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/genericaliasobject.h>
+#else
+#error "No <genericaliasobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/genobject.h b/contrib/libs/python/Include/genobject.h
new file mode 100644
index 0000000000..78ce06ddc0
--- /dev/null
+++ b/contrib/libs/python/Include/genobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/genobject.h>
+#else
+#include <contrib/tools/python/src/Include/genobject.h>
+#endif
diff --git a/contrib/libs/python/Include/graminit.h b/contrib/libs/python/Include/graminit.h
new file mode 100644
index 0000000000..4b0a5e1a38
--- /dev/null
+++ b/contrib/libs/python/Include/graminit.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/graminit.h>
+#else
+#include <contrib/tools/python/src/Include/graminit.h>
+#endif
diff --git a/contrib/libs/python/Include/grammar.h b/contrib/libs/python/Include/grammar.h
new file mode 100644
index 0000000000..d425d1bd75
--- /dev/null
+++ b/contrib/libs/python/Include/grammar.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/grammar.h>
+#else
+#include <contrib/tools/python/src/Include/grammar.h>
+#endif
diff --git a/contrib/libs/python/Include/import.h b/contrib/libs/python/Include/import.h
new file mode 100644
index 0000000000..cfa6515cdf
--- /dev/null
+++ b/contrib/libs/python/Include/import.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/import.h>
+#else
+#include <contrib/tools/python/src/Include/import.h>
+#endif
diff --git a/contrib/libs/python/Include/interpreteridobject.h b/contrib/libs/python/Include/interpreteridobject.h
new file mode 100644
index 0000000000..1cd695d50f
--- /dev/null
+++ b/contrib/libs/python/Include/interpreteridobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/interpreteridobject.h>
+#else
+#error "No <interpreteridobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/intobject.h b/contrib/libs/python/Include/intobject.h
new file mode 100644
index 0000000000..4ec1b915df
--- /dev/null
+++ b/contrib/libs/python/Include/intobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <intobject.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/intobject.h>
+#endif
diff --git a/contrib/libs/python/Include/intrcheck.h b/contrib/libs/python/Include/intrcheck.h
new file mode 100644
index 0000000000..68aabf6d48
--- /dev/null
+++ b/contrib/libs/python/Include/intrcheck.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/intrcheck.h>
+#else
+#include <contrib/tools/python/src/Include/intrcheck.h>
+#endif
diff --git a/contrib/libs/python/Include/iterobject.h b/contrib/libs/python/Include/iterobject.h
new file mode 100644
index 0000000000..19b24e317a
--- /dev/null
+++ b/contrib/libs/python/Include/iterobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/iterobject.h>
+#else
+#include <contrib/tools/python/src/Include/iterobject.h>
+#endif
diff --git a/contrib/libs/python/Include/listobject.h b/contrib/libs/python/Include/listobject.h
new file mode 100644
index 0000000000..e16f38f988
--- /dev/null
+++ b/contrib/libs/python/Include/listobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/listobject.h>
+#else
+#include <contrib/tools/python/src/Include/listobject.h>
+#endif
diff --git a/contrib/libs/python/Include/longintrepr.h b/contrib/libs/python/Include/longintrepr.h
new file mode 100644
index 0000000000..01a8c7a79f
--- /dev/null
+++ b/contrib/libs/python/Include/longintrepr.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/longintrepr.h>
+#else
+#include <contrib/tools/python/src/Include/longintrepr.h>
+#endif
diff --git a/contrib/libs/python/Include/longobject.h b/contrib/libs/python/Include/longobject.h
new file mode 100644
index 0000000000..18760d63cc
--- /dev/null
+++ b/contrib/libs/python/Include/longobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/longobject.h>
+#else
+#include <contrib/tools/python/src/Include/longobject.h>
+#endif
diff --git a/contrib/libs/python/Include/marshal.h b/contrib/libs/python/Include/marshal.h
new file mode 100644
index 0000000000..536238ca04
--- /dev/null
+++ b/contrib/libs/python/Include/marshal.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/marshal.h>
+#else
+#include <contrib/tools/python/src/Include/marshal.h>
+#endif
diff --git a/contrib/libs/python/Include/memoryobject.h b/contrib/libs/python/Include/memoryobject.h
new file mode 100644
index 0000000000..c9941a3962
--- /dev/null
+++ b/contrib/libs/python/Include/memoryobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/memoryobject.h>
+#else
+#include <contrib/tools/python/src/Include/memoryobject.h>
+#endif
diff --git a/contrib/libs/python/Include/metagrammar.h b/contrib/libs/python/Include/metagrammar.h
new file mode 100644
index 0000000000..ab897e3820
--- /dev/null
+++ b/contrib/libs/python/Include/metagrammar.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <metagrammar.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/metagrammar.h>
+#endif
diff --git a/contrib/libs/python/Include/methodobject.h b/contrib/libs/python/Include/methodobject.h
new file mode 100644
index 0000000000..12ff79b2e2
--- /dev/null
+++ b/contrib/libs/python/Include/methodobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/methodobject.h>
+#else
+#include <contrib/tools/python/src/Include/methodobject.h>
+#endif
diff --git a/contrib/libs/python/Include/modsupport.h b/contrib/libs/python/Include/modsupport.h
new file mode 100644
index 0000000000..61dae25ba3
--- /dev/null
+++ b/contrib/libs/python/Include/modsupport.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/modsupport.h>
+#else
+#include <contrib/tools/python/src/Include/modsupport.h>
+#endif
diff --git a/contrib/libs/python/Include/moduleobject.h b/contrib/libs/python/Include/moduleobject.h
new file mode 100644
index 0000000000..d138ab73ca
--- /dev/null
+++ b/contrib/libs/python/Include/moduleobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/moduleobject.h>
+#else
+#include <contrib/tools/python/src/Include/moduleobject.h>
+#endif
diff --git a/contrib/libs/python/Include/namespaceobject.h b/contrib/libs/python/Include/namespaceobject.h
new file mode 100644
index 0000000000..5f4c77c8a4
--- /dev/null
+++ b/contrib/libs/python/Include/namespaceobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/namespaceobject.h>
+#else
+#error "No <namespaceobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/node.h b/contrib/libs/python/Include/node.h
new file mode 100644
index 0000000000..0f859f8f9e
--- /dev/null
+++ b/contrib/libs/python/Include/node.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/node.h>
+#else
+#include <contrib/tools/python/src/Include/node.h>
+#endif
diff --git a/contrib/libs/python/Include/object.h b/contrib/libs/python/Include/object.h
new file mode 100644
index 0000000000..1a7e8a96bd
--- /dev/null
+++ b/contrib/libs/python/Include/object.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/object.h>
+#else
+#include <contrib/tools/python/src/Include/object.h>
+#endif
diff --git a/contrib/libs/python/Include/objimpl.h b/contrib/libs/python/Include/objimpl.h
new file mode 100644
index 0000000000..d33a4815a5
--- /dev/null
+++ b/contrib/libs/python/Include/objimpl.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/objimpl.h>
+#else
+#include <contrib/tools/python/src/Include/objimpl.h>
+#endif
diff --git a/contrib/libs/python/Include/odictobject.h b/contrib/libs/python/Include/odictobject.h
new file mode 100644
index 0000000000..a3e7994c12
--- /dev/null
+++ b/contrib/libs/python/Include/odictobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/odictobject.h>
+#else
+#error "No <odictobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/opcode.h b/contrib/libs/python/Include/opcode.h
new file mode 100644
index 0000000000..add566d1ce
--- /dev/null
+++ b/contrib/libs/python/Include/opcode.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/opcode.h>
+#else
+#include <contrib/tools/python/src/Include/opcode.h>
+#endif
diff --git a/contrib/libs/python/Include/osdefs.h b/contrib/libs/python/Include/osdefs.h
new file mode 100644
index 0000000000..030e1cb429
--- /dev/null
+++ b/contrib/libs/python/Include/osdefs.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/osdefs.h>
+#else
+#include <contrib/tools/python/src/Include/osdefs.h>
+#endif
diff --git a/contrib/libs/python/Include/osmodule.h b/contrib/libs/python/Include/osmodule.h
new file mode 100644
index 0000000000..0851f3d7f7
--- /dev/null
+++ b/contrib/libs/python/Include/osmodule.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/osmodule.h>
+#else
+#error "No <osmodule.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/parsetok.h b/contrib/libs/python/Include/parsetok.h
new file mode 100644
index 0000000000..5bf491e907
--- /dev/null
+++ b/contrib/libs/python/Include/parsetok.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/parsetok.h>
+#else
+#include <contrib/tools/python/src/Include/parsetok.h>
+#endif
diff --git a/contrib/libs/python/Include/patchlevel.h b/contrib/libs/python/Include/patchlevel.h
new file mode 100644
index 0000000000..75ce0b8f9a
--- /dev/null
+++ b/contrib/libs/python/Include/patchlevel.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/patchlevel.h>
+#else
+#include <contrib/tools/python/src/Include/patchlevel.h>
+#endif
diff --git a/contrib/libs/python/Include/pgen.h b/contrib/libs/python/Include/pgen.h
new file mode 100644
index 0000000000..b4a3a7dc8d
--- /dev/null
+++ b/contrib/libs/python/Include/pgen.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pgen.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pgen.h>
+#endif
diff --git a/contrib/libs/python/Include/pgenheaders.h b/contrib/libs/python/Include/pgenheaders.h
new file mode 100644
index 0000000000..1f859aebad
--- /dev/null
+++ b/contrib/libs/python/Include/pgenheaders.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pgenheaders.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pgenheaders.h>
+#endif
diff --git a/contrib/libs/python/Include/picklebufobject.h b/contrib/libs/python/Include/picklebufobject.h
new file mode 100644
index 0000000000..70eba96ded
--- /dev/null
+++ b/contrib/libs/python/Include/picklebufobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/picklebufobject.h>
+#else
+#error "No <picklebufobject.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/py_curses.h b/contrib/libs/python/Include/py_curses.h
new file mode 100644
index 0000000000..1cea7240fa
--- /dev/null
+++ b/contrib/libs/python/Include/py_curses.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/py_curses.h>
+#else
+#include <contrib/tools/python/src/Include/py_curses.h>
+#endif
diff --git a/contrib/libs/python/Include/pyarena.h b/contrib/libs/python/Include/pyarena.h
new file mode 100644
index 0000000000..79e39eba83
--- /dev/null
+++ b/contrib/libs/python/Include/pyarena.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyarena.h>
+#else
+#include <contrib/tools/python/src/Include/pyarena.h>
+#endif
diff --git a/contrib/libs/python/Include/pyatomic.h b/contrib/libs/python/Include/pyatomic.h
new file mode 100644
index 0000000000..36ea5383e2
--- /dev/null
+++ b/contrib/libs/python/Include/pyatomic.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyatomic.h>
+#else
+#error "No <pyatomic.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pycapsule.h b/contrib/libs/python/Include/pycapsule.h
new file mode 100644
index 0000000000..7f303ed361
--- /dev/null
+++ b/contrib/libs/python/Include/pycapsule.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pycapsule.h>
+#else
+#include <contrib/tools/python/src/Include/pycapsule.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig-linux.h b/contrib/libs/python/Include/pyconfig-linux.h
new file mode 100644
index 0000000000..de1803b710
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig-linux.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyconfig-linux.h>
+#else
+#error "No <pyconfig-linux.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pyconfig-musl.h b/contrib/libs/python/Include/pyconfig-musl.h
new file mode 100644
index 0000000000..66e1339bac
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig-musl.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyconfig-musl.h>
+#else
+#error "No <pyconfig-musl.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pyconfig-osx.h b/contrib/libs/python/Include/pyconfig-osx.h
new file mode 100644
index 0000000000..8ee6b6de2b
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig-osx.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyconfig-osx.h>
+#else
+#error "No <pyconfig-osx.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.cygwin.h b/contrib/libs/python/Include/pyconfig.cygwin.h
new file mode 100644
index 0000000000..930901d89b
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.cygwin.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.cygwin.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.cygwin.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.darwin.h b/contrib/libs/python/Include/pyconfig.darwin.h
new file mode 100644
index 0000000000..eeb58178bf
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.darwin.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.darwin.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.darwin.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.freebsd.h b/contrib/libs/python/Include/pyconfig.freebsd.h
new file mode 100644
index 0000000000..e6d5961435
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.freebsd.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.freebsd.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.freebsd.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.h b/contrib/libs/python/Include/pyconfig.h
new file mode 100644
index 0000000000..3b13edb2ee
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyconfig.h>
+#else
+#include <contrib/tools/python/src/Include/pyconfig.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.ios.arm64.h b/contrib/libs/python/Include/pyconfig.ios.arm64.h
new file mode 100644
index 0000000000..0dac2ee7ac
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.ios.arm64.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.ios.arm64.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.ios.arm64.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.ios.armv7.h b/contrib/libs/python/Include/pyconfig.ios.armv7.h
new file mode 100644
index 0000000000..ec08c5eca5
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.ios.armv7.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.ios.armv7.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.ios.armv7.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.ios.i386.h b/contrib/libs/python/Include/pyconfig.ios.i386.h
new file mode 100644
index 0000000000..98649c420f
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.ios.i386.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.ios.i386.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.ios.i386.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.ios.x86_64.h b/contrib/libs/python/Include/pyconfig.ios.x86_64.h
new file mode 100644
index 0000000000..dc87f0ed86
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.ios.x86_64.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.ios.x86_64.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.ios.x86_64.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.linux.h b/contrib/libs/python/Include/pyconfig.linux.h
new file mode 100644
index 0000000000..18ebf9c48c
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.linux.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.linux.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.linux.h>
+#endif
diff --git a/contrib/libs/python/Include/pyconfig.win32.h b/contrib/libs/python/Include/pyconfig.win32.h
new file mode 100644
index 0000000000..6c5c5ae32e
--- /dev/null
+++ b/contrib/libs/python/Include/pyconfig.win32.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pyconfig.win32.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pyconfig.win32.h>
+#endif
diff --git a/contrib/libs/python/Include/pyctype.h b/contrib/libs/python/Include/pyctype.h
new file mode 100644
index 0000000000..8b25c6e4ee
--- /dev/null
+++ b/contrib/libs/python/Include/pyctype.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyctype.h>
+#else
+#include <contrib/tools/python/src/Include/pyctype.h>
+#endif
diff --git a/contrib/libs/python/Include/pydebug.h b/contrib/libs/python/Include/pydebug.h
new file mode 100644
index 0000000000..5619b0b907
--- /dev/null
+++ b/contrib/libs/python/Include/pydebug.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pydebug.h>
+#else
+#include <contrib/tools/python/src/Include/pydebug.h>
+#endif
diff --git a/contrib/libs/python/Include/pydtrace.h b/contrib/libs/python/Include/pydtrace.h
new file mode 100644
index 0000000000..170d5e0ca2
--- /dev/null
+++ b/contrib/libs/python/Include/pydtrace.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pydtrace.h>
+#else
+#error "No <pydtrace.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pyerrors.h b/contrib/libs/python/Include/pyerrors.h
new file mode 100644
index 0000000000..587690a2b2
--- /dev/null
+++ b/contrib/libs/python/Include/pyerrors.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyerrors.h>
+#else
+#include <contrib/tools/python/src/Include/pyerrors.h>
+#endif
diff --git a/contrib/libs/python/Include/pyexpat.h b/contrib/libs/python/Include/pyexpat.h
new file mode 100644
index 0000000000..e9021bf070
--- /dev/null
+++ b/contrib/libs/python/Include/pyexpat.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyexpat.h>
+#else
+#include <contrib/tools/python/src/Include/pyexpat.h>
+#endif
diff --git a/contrib/libs/python/Include/pyfpe.h b/contrib/libs/python/Include/pyfpe.h
new file mode 100644
index 0000000000..b9ee7aa43f
--- /dev/null
+++ b/contrib/libs/python/Include/pyfpe.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyfpe.h>
+#else
+#include <contrib/tools/python/src/Include/pyfpe.h>
+#endif
diff --git a/contrib/libs/python/Include/pyframe.h b/contrib/libs/python/Include/pyframe.h
new file mode 100644
index 0000000000..69985948aa
--- /dev/null
+++ b/contrib/libs/python/Include/pyframe.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyframe.h>
+#else
+#error "No <pyframe.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pygetopt.h b/contrib/libs/python/Include/pygetopt.h
new file mode 100644
index 0000000000..3e591b03ce
--- /dev/null
+++ b/contrib/libs/python/Include/pygetopt.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pygetopt.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pygetopt.h>
+#endif
diff --git a/contrib/libs/python/Include/pyhash.h b/contrib/libs/python/Include/pyhash.h
new file mode 100644
index 0000000000..847428d568
--- /dev/null
+++ b/contrib/libs/python/Include/pyhash.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyhash.h>
+#else
+#error "No <pyhash.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pylifecycle.h b/contrib/libs/python/Include/pylifecycle.h
new file mode 100644
index 0000000000..7cffd7cc74
--- /dev/null
+++ b/contrib/libs/python/Include/pylifecycle.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pylifecycle.h>
+#else
+#error "No <pylifecycle.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pymacconfig.h b/contrib/libs/python/Include/pymacconfig.h
new file mode 100644
index 0000000000..452a8db249
--- /dev/null
+++ b/contrib/libs/python/Include/pymacconfig.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pymacconfig.h>
+#else
+#include <contrib/tools/python/src/Include/pymacconfig.h>
+#endif
diff --git a/contrib/libs/python/Include/pymacro.h b/contrib/libs/python/Include/pymacro.h
new file mode 100644
index 0000000000..ba64609d32
--- /dev/null
+++ b/contrib/libs/python/Include/pymacro.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pymacro.h>
+#else
+#error "No <pymacro.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pymactoolbox.h b/contrib/libs/python/Include/pymactoolbox.h
new file mode 100644
index 0000000000..320a4920a4
--- /dev/null
+++ b/contrib/libs/python/Include/pymactoolbox.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <pymactoolbox.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/pymactoolbox.h>
+#endif
diff --git a/contrib/libs/python/Include/pymath.h b/contrib/libs/python/Include/pymath.h
new file mode 100644
index 0000000000..a83f248550
--- /dev/null
+++ b/contrib/libs/python/Include/pymath.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pymath.h>
+#else
+#include <contrib/tools/python/src/Include/pymath.h>
+#endif
diff --git a/contrib/libs/python/Include/pymem.h b/contrib/libs/python/Include/pymem.h
new file mode 100644
index 0000000000..780aa553e1
--- /dev/null
+++ b/contrib/libs/python/Include/pymem.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pymem.h>
+#else
+#include <contrib/tools/python/src/Include/pymem.h>
+#endif
diff --git a/contrib/libs/python/Include/pyport.h b/contrib/libs/python/Include/pyport.h
new file mode 100644
index 0000000000..a32beac0c1
--- /dev/null
+++ b/contrib/libs/python/Include/pyport.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pyport.h>
+#else
+#include <contrib/tools/python/src/Include/pyport.h>
+#endif
diff --git a/contrib/libs/python/Include/pystate.h b/contrib/libs/python/Include/pystate.h
new file mode 100644
index 0000000000..6601f2591b
--- /dev/null
+++ b/contrib/libs/python/Include/pystate.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pystate.h>
+#else
+#include <contrib/tools/python/src/Include/pystate.h>
+#endif
diff --git a/contrib/libs/python/Include/pystrcmp.h b/contrib/libs/python/Include/pystrcmp.h
new file mode 100644
index 0000000000..748b61d534
--- /dev/null
+++ b/contrib/libs/python/Include/pystrcmp.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pystrcmp.h>
+#else
+#include <contrib/tools/python/src/Include/pystrcmp.h>
+#endif
diff --git a/contrib/libs/python/Include/pystrhex.h b/contrib/libs/python/Include/pystrhex.h
new file mode 100644
index 0000000000..a8a41a1b56
--- /dev/null
+++ b/contrib/libs/python/Include/pystrhex.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pystrhex.h>
+#else
+#error "No <pystrhex.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/pystrtod.h b/contrib/libs/python/Include/pystrtod.h
new file mode 100644
index 0000000000..70d9aa343e
--- /dev/null
+++ b/contrib/libs/python/Include/pystrtod.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pystrtod.h>
+#else
+#include <contrib/tools/python/src/Include/pystrtod.h>
+#endif
diff --git a/contrib/libs/python/Include/pythonrun.h b/contrib/libs/python/Include/pythonrun.h
new file mode 100644
index 0000000000..381610c54e
--- /dev/null
+++ b/contrib/libs/python/Include/pythonrun.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pythonrun.h>
+#else
+#include <contrib/tools/python/src/Include/pythonrun.h>
+#endif
diff --git a/contrib/libs/python/Include/pythread.h b/contrib/libs/python/Include/pythread.h
new file mode 100644
index 0000000000..3f3eae9530
--- /dev/null
+++ b/contrib/libs/python/Include/pythread.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pythread.h>
+#else
+#include <contrib/tools/python/src/Include/pythread.h>
+#endif
diff --git a/contrib/libs/python/Include/pytime.h b/contrib/libs/python/Include/pytime.h
new file mode 100644
index 0000000000..7412fa8632
--- /dev/null
+++ b/contrib/libs/python/Include/pytime.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/pytime.h>
+#else
+#error "No <pytime.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/rangeobject.h b/contrib/libs/python/Include/rangeobject.h
new file mode 100644
index 0000000000..dc0b4a219b
--- /dev/null
+++ b/contrib/libs/python/Include/rangeobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/rangeobject.h>
+#else
+#include <contrib/tools/python/src/Include/rangeobject.h>
+#endif
diff --git a/contrib/libs/python/Include/setobject.h b/contrib/libs/python/Include/setobject.h
new file mode 100644
index 0000000000..5f09504d2b
--- /dev/null
+++ b/contrib/libs/python/Include/setobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/setobject.h>
+#else
+#include <contrib/tools/python/src/Include/setobject.h>
+#endif
diff --git a/contrib/libs/python/Include/sliceobject.h b/contrib/libs/python/Include/sliceobject.h
new file mode 100644
index 0000000000..b124a7a15b
--- /dev/null
+++ b/contrib/libs/python/Include/sliceobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/sliceobject.h>
+#else
+#include <contrib/tools/python/src/Include/sliceobject.h>
+#endif
diff --git a/contrib/libs/python/Include/stringobject.h b/contrib/libs/python/Include/stringobject.h
new file mode 100644
index 0000000000..374c66667b
--- /dev/null
+++ b/contrib/libs/python/Include/stringobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <stringobject.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/stringobject.h>
+#endif
diff --git a/contrib/libs/python/Include/structmember.h b/contrib/libs/python/Include/structmember.h
new file mode 100644
index 0000000000..ab8d9c2924
--- /dev/null
+++ b/contrib/libs/python/Include/structmember.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/structmember.h>
+#else
+#include <contrib/tools/python/src/Include/structmember.h>
+#endif
diff --git a/contrib/libs/python/Include/structseq.h b/contrib/libs/python/Include/structseq.h
new file mode 100644
index 0000000000..02cadaaefe
--- /dev/null
+++ b/contrib/libs/python/Include/structseq.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/structseq.h>
+#else
+#include <contrib/tools/python/src/Include/structseq.h>
+#endif
diff --git a/contrib/libs/python/Include/symtable.h b/contrib/libs/python/Include/symtable.h
new file mode 100644
index 0000000000..5522056670
--- /dev/null
+++ b/contrib/libs/python/Include/symtable.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/symtable.h>
+#else
+#include <contrib/tools/python/src/Include/symtable.h>
+#endif
diff --git a/contrib/libs/python/Include/sysmodule.h b/contrib/libs/python/Include/sysmodule.h
new file mode 100644
index 0000000000..6b50a48c2d
--- /dev/null
+++ b/contrib/libs/python/Include/sysmodule.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/sysmodule.h>
+#else
+#include <contrib/tools/python/src/Include/sysmodule.h>
+#endif
diff --git a/contrib/libs/python/Include/timefuncs.h b/contrib/libs/python/Include/timefuncs.h
new file mode 100644
index 0000000000..409ee6df19
--- /dev/null
+++ b/contrib/libs/python/Include/timefuncs.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#error "No <timefuncs.h> in Python3"
+#else
+#include <contrib/tools/python/src/Include/timefuncs.h>
+#endif
diff --git a/contrib/libs/python/Include/token.h b/contrib/libs/python/Include/token.h
new file mode 100644
index 0000000000..cef4f27bc8
--- /dev/null
+++ b/contrib/libs/python/Include/token.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/token.h>
+#else
+#include <contrib/tools/python/src/Include/token.h>
+#endif
diff --git a/contrib/libs/python/Include/traceback.h b/contrib/libs/python/Include/traceback.h
new file mode 100644
index 0000000000..284fc8ab7f
--- /dev/null
+++ b/contrib/libs/python/Include/traceback.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/traceback.h>
+#else
+#include <contrib/tools/python/src/Include/traceback.h>
+#endif
diff --git a/contrib/libs/python/Include/tracemalloc.h b/contrib/libs/python/Include/tracemalloc.h
new file mode 100644
index 0000000000..cc29c6ff7e
--- /dev/null
+++ b/contrib/libs/python/Include/tracemalloc.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/tracemalloc.h>
+#else
+#error "No <tracemalloc.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/tupleobject.h b/contrib/libs/python/Include/tupleobject.h
new file mode 100644
index 0000000000..8b924b9b4c
--- /dev/null
+++ b/contrib/libs/python/Include/tupleobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/tupleobject.h>
+#else
+#include <contrib/tools/python/src/Include/tupleobject.h>
+#endif
diff --git a/contrib/libs/python/Include/typeslots.h b/contrib/libs/python/Include/typeslots.h
new file mode 100644
index 0000000000..4dd000ae3c
--- /dev/null
+++ b/contrib/libs/python/Include/typeslots.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/typeslots.h>
+#else
+#error "No <typeslots.h> in Python2"
+#endif
diff --git a/contrib/libs/python/Include/ucnhash.h b/contrib/libs/python/Include/ucnhash.h
new file mode 100644
index 0000000000..42412a87b4
--- /dev/null
+++ b/contrib/libs/python/Include/ucnhash.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/ucnhash.h>
+#else
+#include <contrib/tools/python/src/Include/ucnhash.h>
+#endif
diff --git a/contrib/libs/python/Include/unicodeobject.h b/contrib/libs/python/Include/unicodeobject.h
new file mode 100644
index 0000000000..172af650e1
--- /dev/null
+++ b/contrib/libs/python/Include/unicodeobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/unicodeobject.h>
+#else
+#include <contrib/tools/python/src/Include/unicodeobject.h>
+#endif
diff --git a/contrib/libs/python/Include/warnings.h b/contrib/libs/python/Include/warnings.h
new file mode 100644
index 0000000000..d5deac5bc5
--- /dev/null
+++ b/contrib/libs/python/Include/warnings.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/warnings.h>
+#else
+#include <contrib/tools/python/src/Include/warnings.h>
+#endif
diff --git a/contrib/libs/python/Include/weakrefobject.h b/contrib/libs/python/Include/weakrefobject.h
new file mode 100644
index 0000000000..3fed3fa764
--- /dev/null
+++ b/contrib/libs/python/Include/weakrefobject.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef USE_PYTHON3
+#include <contrib/tools/python3/src/Include/weakrefobject.h>
+#else
+#include <contrib/tools/python/src/Include/weakrefobject.h>
+#endif
diff --git a/contrib/libs/python/Include/ya.make b/contrib/libs/python/Include/ya.make
new file mode 100644
index 0000000000..e65263e6a0
--- /dev/null
+++ b/contrib/libs/python/Include/ya.make
@@ -0,0 +1,29 @@
+PY23_LIBRARY()
+
+WITHOUT_LICENSE_TEXTS()
+
+LICENSE(YandexOpen)
+
+OWNER(
+ orivej
+ spreis
+ g:contrib
+)
+
+NO_PYTHON_INCLUDES()
+
+ADDINCL(GLOBAL contrib/libs/python/Include)
+
+IF (PYTHON2)
+ CFLAGS(GLOBAL -DUSE_PYTHON2)
+ PEERDIR(
+ contrib/tools/python/lib
+ )
+ELSE()
+ CFLAGS(GLOBAL -DUSE_PYTHON3)
+ PEERDIR(
+ contrib/tools/python3/src
+ )
+ENDIF()
+
+END()
diff --git a/contrib/libs/python/README.md b/contrib/libs/python/README.md
new file mode 100644
index 0000000000..cd122b92b3
--- /dev/null
+++ b/contrib/libs/python/README.md
@@ -0,0 +1,9 @@
+This include-only library enables simultaneous bindings into Python2 and Python3 with single build.
+
+It provides the following:
+- Let dependencies to headers from both Pythons be seen at once during ya make dependency computation. This makes depenency graph more stable.
+- Steers build to proper Python headers depending on mode in which binding is built.
+- Adds proper Python library to link.
+
+Headers are automatically generated from Python2 and Python3 headers using gen_includes.py script
+
diff --git a/contrib/libs/python/gen_includes.py b/contrib/libs/python/gen_includes.py
new file mode 100644
index 0000000000..0e024cc49d
--- /dev/null
+++ b/contrib/libs/python/gen_includes.py
@@ -0,0 +1,64 @@
+import sys
+import os
+import errno
+from os import listdir
+from os.path import dirname, relpath, join
+
+
+def ensure_dir_exists(path):
+ try:
+ os.makedirs(path)
+ except OSError as e:
+ if e.errno == errno.EEXIST and os.path.isdir(path):
+ pass
+ else:
+ raise
+
+
+def make_dir(directory):
+ if not os.path.exists(directory):
+ os.makedirs(directory)
+
+
+def files(directory):
+ for dirpath, dirnames, filenames in os.walk(directory):
+ for name in filenames:
+ yield relpath(join(dirpath, name), directory)
+
+
+def headers_set(directory):
+ return {
+ f for f in files(directory)
+ if f.endswith('.h') and not f.startswith('internal/')
+ }
+
+
+if __name__ == "__main__":
+
+ python2_path = sys.argv[1]
+ python3_path = sys.argv[2]
+ output_path = sys.argv[3]
+
+ ensure_dir_exists(join('.', python2_path))
+ ensure_dir_exists(join('.', python3_path))
+
+ only_headers2 = headers_set(python2_path)
+ only_headers3 = headers_set(python3_path)
+ all_headers = only_headers2 | only_headers3
+
+ for header in all_headers:
+ path = join(output_path, header)
+ make_dir(dirname(path))
+ f = open(path, 'w')
+ f.write('#pragma once\n\n')
+ f.write('#ifdef USE_PYTHON3\n')
+ if (header in only_headers3):
+ f.write('#include <' + join(python3_path, header) + '>\n')
+ else:
+ f.write('#error "No <' + header + '> in Python3"\n')
+ f.write('#else\n')
+ if (header in only_headers2):
+ f.write('#include <' + join(python2_path, header) + '>\n')
+ else:
+ f.write('#error "No <' + header + '> in Python2"\n')
+ f.write('#endif\n')
diff --git a/contrib/libs/python/ut/lib/test.cpp b/contrib/libs/python/ut/lib/test.cpp
new file mode 100644
index 0000000000..e3aabc8889
--- /dev/null
+++ b/contrib/libs/python/ut/lib/test.cpp
@@ -0,0 +1,21 @@
+#include "test.h"
+
+#include <Python.h>
+#include <library/cpp/testing/unittest/registar.h>
+
+TTestPyInvoker::TTestPyInvoker() {}
+
+const char* TTestPyInvoker::GetVersion() {
+ Py_Initialize();
+
+ auto* module = PyImport_ImportModule("sys");
+ UNIT_ASSERT(module != nullptr);
+
+ auto* versionObj = PyObject_GetAttrString(module, "version");
+ if (versionObj == nullptr) {
+ Py_DECREF(module);
+ UNIT_ASSERT(versionObj != nullptr);
+ }
+
+ return Py_GetVersion();
+}
diff --git a/contrib/libs/python/ut/lib/test.h b/contrib/libs/python/ut/lib/test.h
new file mode 100644
index 0000000000..1bf824ebea
--- /dev/null
+++ b/contrib/libs/python/ut/lib/test.h
@@ -0,0 +1,7 @@
+#pragma once
+
+class TTestPyInvoker {
+public:
+ TTestPyInvoker();
+ const char* GetVersion();
+};
diff --git a/contrib/libs/python/ut/lib/ya.make b/contrib/libs/python/ut/lib/ya.make
new file mode 100644
index 0000000000..cfa0aaa612
--- /dev/null
+++ b/contrib/libs/python/ut/lib/ya.make
@@ -0,0 +1,17 @@
+OWNER(spreis)
+
+PY23_LIBRARY()
+
+WITHOUT_LICENSE_TEXTS()
+
+LICENSE(YandexOpen)
+
+PEERDIR(
+ library/cpp/testing/unittest
+)
+
+SRCS(
+ test.cpp
+)
+
+END()
diff --git a/contrib/libs/python/ut/py2/use.cpp b/contrib/libs/python/ut/py2/use.cpp
new file mode 100644
index 0000000000..a4a2c8d9bb
--- /dev/null
+++ b/contrib/libs/python/ut/py2/use.cpp
@@ -0,0 +1,10 @@
+#include <contrib/libs/python/ut/lib/test.h>
+#include <library/cpp/testing/unittest/registar.h>
+
+Y_UNIT_TEST_SUITE(TestPy3Binding) {
+ Y_UNIT_TEST(version) {
+ TTestPyInvoker invoker;
+ UNIT_ASSERT_EQUAL(invoker.GetVersion()[0], '2');
+ }
+}
+
diff --git a/contrib/libs/python/ut/py2/ya.make b/contrib/libs/python/ut/py2/ya.make
new file mode 100644
index 0000000000..9c5c824761
--- /dev/null
+++ b/contrib/libs/python/ut/py2/ya.make
@@ -0,0 +1,9 @@
+OWNER(spreis)
+
+UNITTEST()
+SRCS(use.cpp)
+
+PEERDIR(
+ contrib/libs/python/ut/lib
+)
+END()
diff --git a/contrib/libs/python/ut/py3/use.cpp b/contrib/libs/python/ut/py3/use.cpp
new file mode 100644
index 0000000000..8a2531bcc1
--- /dev/null
+++ b/contrib/libs/python/ut/py3/use.cpp
@@ -0,0 +1,10 @@
+#include <contrib/libs/python/ut/lib/test.h>
+#include <library/cpp/testing/unittest/registar.h>
+
+Y_UNIT_TEST_SUITE(TestPy3Binding) {
+ Y_UNIT_TEST(version) {
+ TTestPyInvoker invoker;
+ UNIT_ASSERT_EQUAL(invoker.GetVersion()[0], '3');
+ }
+}
+
diff --git a/contrib/libs/python/ut/py3/ya.make b/contrib/libs/python/ut/py3/ya.make
new file mode 100644
index 0000000000..df6d4fe767
--- /dev/null
+++ b/contrib/libs/python/ut/py3/ya.make
@@ -0,0 +1,10 @@
+OWNER(spreis)
+
+UNITTEST()
+USE_PYTHON3()
+SRCS(use.cpp)
+
+PEERDIR(
+ contrib/libs/python/ut/lib
+)
+END()
diff --git a/contrib/libs/python/ut/ya.make b/contrib/libs/python/ut/ya.make
new file mode 100644
index 0000000000..4fea35153a
--- /dev/null
+++ b/contrib/libs/python/ut/ya.make
@@ -0,0 +1,7 @@
+OWNER(spreis)
+
+RECURSE(
+ lib
+ py2
+ py3
+) \ No newline at end of file
diff --git a/contrib/libs/python/ya.make b/contrib/libs/python/ya.make
new file mode 100644
index 0000000000..20a57f4b48
--- /dev/null
+++ b/contrib/libs/python/ya.make
@@ -0,0 +1,52 @@
+OWNER(
+ spreis
+ orivej
+ g:contrib
+)
+
+PY23_LIBRARY()
+
+LICENSE(YandexOpen)
+
+LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
+
+NO_PYTHON_INCLUDES()
+
+IF (USE_ARCADIA_PYTHON)
+ PEERDIR(
+ contrib/libs/python/Include
+ library/python/symbols/module
+ library/python/symbols/libc
+ library/python/symbols/python
+ )
+ IF (NOT OS_WINDOWS AND NOT OPENSOURCE)
+ PEERDIR(
+ library/python/symbols/uuid
+ )
+ ENDIF()
+ IF (MODULE_TAG == "PY2")
+ PEERDIR(
+ contrib/tools/python/lib
+ library/python/runtime
+ )
+ ELSE()
+ PEERDIR(
+ contrib/tools/python3/lib
+ library/python/runtime_py3
+ )
+ ENDIF()
+ELSE()
+ IF (USE_SYSTEM_PYTHON)
+ PEERDIR(
+ build/platform/python
+ )
+ ELSE()
+ CFLAGS(GLOBAL $PYTHON_INCLUDE)
+ ENDIF()
+ENDIF()
+
+END()
+
+RECURSE(
+ Include
+)