From bb2cdacc0cdf4e879ca32e3e0af790070842f417 Mon Sep 17 00:00:00 2001 From: Apex Liu Date: Wed, 11 Jan 2017 00:02:33 +0800 Subject: [PATCH] tp_web now build on Linux. --- .gitignore | 5 + build/linux/build-py-static.sh | 195 ++++++++ common/libex/include/ex/ex_platform.h | 5 + common/libex/src/ex_ini.cpp | 54 ++- common/libex/src/ex_log.cpp | 5 +- common/libex/src/ex_path.cpp | 16 +- common/libex/src/ex_util.cpp | 4 + .../Python-3.4.4/Modules/Setup.dist | 417 ++++++++++++++++++ .../Python-3.4.4/Modules/_sqlite/cache.h | 75 ++++ .../Modules/_sqlite/prepare_protocol.h | 43 ++ server/CMakeLists.txt | 12 + server/tp_web/src/CMakeLists.txt | 22 + server/tp_web/src/main.cpp | 3 +- server/tp_web/src/ts_env.cpp | 2 +- 14 files changed, 826 insertions(+), 32 deletions(-) create mode 100755 build/linux/build-py-static.sh create mode 100644 external/fix-external/Python-3.4.4/Modules/Setup.dist create mode 100644 external/fix-external/Python-3.4.4/Modules/_sqlite/cache.h create mode 100644 external/fix-external/Python-3.4.4/Modules/_sqlite/prepare_protocol.h create mode 100644 server/CMakeLists.txt create mode 100644 server/tp_web/src/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 6e1f256..995382c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,9 @@ *.aps **/ipch +# for CMake +CMakeFiles + # for Python __pycache__ *.pyc @@ -26,11 +29,13 @@ __pycache__ # for tmp folder or files. /out /external/_download_ +/external/linux /external/jsoncpp /external/mongoose /external/openssl /external/python + # for dist folder /dist/*.zip /dist/*.tar.gz diff --git a/build/linux/build-py-static.sh b/build/linux/build-py-static.sh new file mode 100755 index 0000000..c23ee67 --- /dev/null +++ b/build/linux/build-py-static.sh @@ -0,0 +1,195 @@ +#!/bin/bash + +################################################################ +# Basic settings. +################################################################ +VER_PYTHON="3.4.4" +VER_PYTHON_SHORT="3.4" +VER_OPENSSL="1.0.2h" +VER_SQLITE="3160200" +VER_PSUTIL="4.2.0" +VER_PYTHON_LIB="${VER_PYTHON_SHORT}m" + +################################################################ +# DO NOT TOUCH FOLLOWING CODE +################################################################ + +FILE_PYTHON_STATIC_LIB="libpython${VER_PYTHON_LIB}.a" + +PATH_ROOT=$(cd "$(dirname "$0")"/../..; pwd) +PATH_EXT=${PATH_ROOT}/external +PATH_DOWNLOAD=${PATH_EXT}/_download_ +PATH_TMP=${PATH_EXT}/linux/tmp +PATH_FIX=${PATH_EXT}/fix-external +PATH_RELEASE=${PATH_EXT}/linux/release + + +PY_PATH_SRC=${PATH_TMP}/Python-${VER_PYTHON} +#PATH_SRC=${PATH_TMP}/${VER_PYTHON} +#PATH_INST=${PATH_RELEASE}/python +OSSL_PATH_SRC=${PATH_TMP}/openssl-${VER_OPENSSL} + +function on_error() +{ + echo -e "\033[01m\033[31m" + echo "==================[ !! ERROR !! ]==================" + echo -e $1 + echo "===================================================" + echo -e "\033[0m" + exit 1 +} + +function setp_build_git() +{ + # su -s + # yum install zlib-devel expat-devel libcurl-devel + # make prefix=/usr/local + # make prefix=/usr/local install + echo 'skip build git now.' +} + +function dlfile() +{ + echo -n "Downloading $1 ..." + if [ ! -f "$4/$3" ]; then + echo "" + # curl --insecure https://www.python.org/ftp/python/3.4.3/${VER_PYTHON}.tgz -o "${PATH_PYTHON}/${VER_PYTHON}.tgz" + echo wget $2$3 -O "$4/$3" + wget --no-check-certificate $2$3 -O "$4/$3" + + if [ ! -f "$4/$3" ]; then + on_error "Can not download $1: $3" + fi + else + echo " already exists, skip." + fi +} + +function step_download_files() +{ + echo "download necessary source tarball ..." + + if [ ! -d "${PATH_DOWNLOAD}" ]; then + mkdir -p "${PATH_DOWNLOAD}" + if [ ! -d "${PATH_DOWNLOAD}" ]; then + on_error "Can not create folder for download files." + fi + fi + + dlfile "python source tarball" "https://www.python.org/ftp/python/${VER_PYTHON}/" "Python-${VER_PYTHON}.tgz" ${PATH_DOWNLOAD} + dlfile "openssl source tarball" "https://www.openssl.org/source/" "openssl-${VER_OPENSSL}.tar.gz" ${PATH_DOWNLOAD} + dlfile "sqlite source tarball" "http://sqlite.org/2017/" "sqlite-autoconf-${VER_SQLITE}.tar.gz" ${PATH_DOWNLOAD} + + # dlfile "psutil source tarball" "https://pypi.python.org/packages/source/p/psutil/" "psutil-${VER_PSUTIL}.tar.gz" ${PATH_DOWNLOAD} + # https://pypi.python.org/pypi?:action=display&name=psutil#downloads + + # echo -n "Downloading psutil source tarball ..." + # if [ ! -f "${PATH_DOWNLOAD}/psutil-${VER_PSUTIL}.tar.gz" ]; then + # echo "" + # echo "Because pypi.python.org limit, can not auto-download psutil, please visit following url:" + # echo " https://pypi.python.org/pypi?:action=display&name=psutil#downloads" + # echo "and download psutil-${VER_PSUTIL}.tar.gz and put it into folder:" + # echo " ${PATH_DOWNLOAD}" + # echo "after download, try again." + # on_error "psutil source tarball not exists." + # else + # echo " already exists, skip." + # fi +} + + +function step_prepare_source() +{ + echo "prepare source ..." + + if [ ! -d "${PATH_TMP}" ]; then + mkdir -p "${PATH_TMP}" + if [ ! -d "${PATH_TMP}" ]; then + on_error "Can not create folder for tmp files." + fi + fi + + if [ ! -d "${PATH_TMP}/Python-${VER_PYTHON}" ]; then + tar -zxvf "${PATH_DOWNLOAD}/Python-${VER_PYTHON}.tgz" -C "${PATH_TMP}" + fi + + if [ ! -d "${PATH_TMP}/openssl-${VER_OPENSSL}" ]; then + tar -zxvf "${PATH_DOWNLOAD}/openssl-${VER_OPENSSL}.tar.gz" -C "${PATH_TMP}" + fi + + + if [ ! -d "${PATH_TMP}/sqlite-autoconf-${VER_SQLITE}" ]; then + tar -zxvf "${PATH_DOWNLOAD}/sqlite-autoconf-${VER_SQLITE}.tar.gz" -C "${PATH_TMP}" + fi + + # if [ ! -d "${PATH_TMP}/psutil-${VER_PSUTIL}" ]; then + # tar -zxvf "${PATH_DOWNLOAD}/psutil-${VER_PSUTIL}.tar.gz" -C "${PATH_TMP}" + # fi + + # cp -r "${PATH_TMP}/psutil-${VER_PSUTIL}/psutil" "${PATH_TMP}/Python-${VER_PYTHON}/Modules/." + cp -r "${PATH_TMP}/sqlite-autoconf-${VER_SQLITE}" "${PATH_TMP}/Python-${VER_PYTHON}/Modules/_sqlite/sqlite3" + cp -r "${PATH_FIX}/Python-${VER_PYTHON}" "${PATH_TMP}" +} + +function step_build_openssl() +{ + echo -n "build openssl static library ..." + + if [ ! -f "${PATH_RELEASE}/lib/libssl.a" ] || [ ! -f "${PATH_RELEASE}/lib/libcrypto.a" ]; then + echo "" + cd "${OSSL_PATH_SRC}" + ./config --prefix=${PATH_RELEASE} --openssldir=${PATH_RELEASE}/openssl no-zlib no-shared + make + make install + cd "${PATH_ROOT}" + + if [ ! -f "${PATH_RELEASE}/lib/libssl.a" ] || [ ! -f "${PATH_RELEASE}/lib/libcrypto.a" ]; then + on_error "Build openssl failed." + fi + + else + echo " already exists, skip." + fi +} + + +function step_build_python() +{ + echo -n "build python static library ..." + + if [ ! -f "${PATH_RELEASE}/lib/${FILE_PYTHON_STATIC_LIB}" ]; then + cd "${PY_PATH_SRC}" + cp "${PY_PATH_SRC}/Modules/Setup.dist" "${PY_PATH_SRC}/Modules/Setup" + LDFLAGS=-lrt ./configure --disable-shared --prefix=${PATH_RELEASE} + make + make altinstall + cd "${PATH_ROOT}" + + if [ ! -f "${PATH_RELEASE}/lib/${FILE_PYTHON_STATIC_LIB}" ]; then + on_error "Build python failed." + fi + + else + echo " already exists, skip." + fi +} + +function step_finalize() +{ + # copy psutil *.py for release. + echo "finalize ..." + + if [ ! -d "${PATH_RELEASE}/lib/python${VER_PYTHON_SHORT}/site-packages" ]; then + on_error "something goes wrong." + fi + + + # cp -r "${PATH_FIX}/psutil-${VER_PSUTIL}/psutil" "${PATH_RELEASE}/lib/python${VER_PYTHON_SHORT}/site-packages/psutil" +} + + +step_download_files +step_prepare_source +step_build_openssl +step_build_python +step_finalize diff --git a/common/libex/include/ex/ex_platform.h b/common/libex/include/ex/ex_platform.h index b8ac7da..626049b 100644 --- a/common/libex/include/ex/ex_platform.h +++ b/common/libex/include/ex/ex_platform.h @@ -50,6 +50,7 @@ # define _CWCHAR_ # include # include +# include #else # include # include @@ -58,6 +59,10 @@ # include // va_start() # include // readlink() # include +# include +# include +# include +# include #endif diff --git a/common/libex/src/ex_ini.cpp b/common/libex/src/ex_ini.cpp index 26031ea..ed284c2 100644 --- a/common/libex/src/ex_ini.cpp +++ b/common/libex/src/ex_ini.cpp @@ -1,5 +1,6 @@ #include #include +#include ExIniSection::ExIniSection(const ex_wstr& strSectionName) { @@ -10,7 +11,7 @@ ExIniSection::ExIniSection(const ex_wstr& strSectionName) ExIniSection::ExIniSection() { m_kvs.clear(); - m_strName = _T("N/A"); + m_strName = L"N/A"; } ExIniSection::~ExIniSection() @@ -54,7 +55,9 @@ void ExIniSection::GetInt(const ex_wstr& strKey, int& iValue, int iDefault) #ifdef EX_OS_WIN32 iValue = _wtoi(it->second.c_str()); #else - iValue = atoi(it->second.c_str()); + ex_astr tmp; + ex_wstr2astr(it->second, tmp); + iValue = atoi(tmp.c_str()); #endif } @@ -67,7 +70,9 @@ bool ExIniSection::GetInt(const ex_wstr& strKey, int& iValue) #ifdef EX_OS_WIN32 iValue = _wtoi(it->second.c_str()); #else - iValue = atoi(it->second.c_str()); + ex_astr tmp; + ex_wstr2astr(it->second, tmp); + iValue = atoi(tmp.c_str()); #endif return true; @@ -83,11 +88,11 @@ void ExIniSection::GetBool(const ex_wstr& strKey, bool& bValue, bool bDefault) } if ( - it->second == _T("1") + it->second == L"1" #ifdef EX_OS_WIN32 - || 0 == _wcsicmp(it->second.c_str(), _T("true")) + || 0 == _wcsicmp(it->second.c_str(), L"true") #else - || 0 == strcasecmp(it->second.c_str(), _T("true")) + || 0 == wcscasecmp(it->second.c_str(), L"true") #endif ) bValue = true; @@ -102,11 +107,11 @@ bool ExIniSection::GetBool(const ex_wstr& strKey, bool& bValue) return false; if ( - it->second == _T("1") + it->second == L"1" #ifdef EX_OS_WIN32 || 0 == _wcsicmp(it->second.c_str(), _T("true")) #else - || 0 == strcasecmp(it->second.c_str(), _T("true")) + || 0 == wcscasecmp(it->second.c_str(), L"true") #endif ) bValue = true; @@ -147,9 +152,9 @@ void ExIniSection::Save(FILE* file, int codepage) { ex_wstr temp; temp += it->first.c_str(); - temp += _T("="); + temp += L"="; temp += it->second.c_str(); - temp += _T("\n"); + temp += L"\n"; ex_astr temp2; ex_wstr2astr(temp, temp2, codepage); fwrite(temp2.c_str(), temp2.size(), 1, file); @@ -207,7 +212,9 @@ bool ExIniFile::LoadFromFile(const ex_wstr& strFileName, bool bClearOld) m_file_path = strFileName; #else FILE* f = NULL; - f = fopen(strFileName.c_str(), "rb"); + ex_astr _fname; + ex_wstr2astr(strFileName, _fname); + f = fopen(_fname.c_str(), "rb"); if(f == NULL) return false; fseek(f, 0L, SEEK_END); @@ -254,17 +261,17 @@ bool ExIniFile::LoadFromMemory(const ex_wstr& strData, bool bClearOld) if (bClearOld) ClearUp(); - ex_wstr strKey(_T("")); - ex_wstr strValue(_T("")); + ex_wstr strKey(L""); + ex_wstr strValue(L""); - ex_wstr strLine(_T("")); + ex_wstr strLine(L""); ex_wstr::size_type pos = ex_wstr::npos; for (;;) { - pos = strAll.find(_T("\r\n")); + pos = strAll.find(L"\r\n"); if (ex_wstr::npos == pos) { - pos = strAll.find(_T('\n')); + pos = strAll.find(L'\n'); if (ex_wstr::npos == pos) { if (strAll.empty()) @@ -302,12 +309,13 @@ bool ExIniFile::LoadFromMemory(const ex_wstr& strData, bool bClearOld) void ExIniFile::Save(int codepage/* = EX_CODEPAGE_UTF8*/) { - ex_astr temp; - ex_wstr2astr(m_file_path, temp); + //ex_astr temp; + //ex_wstr2astr(m_file_path, temp); - FILE* file = NULL; + //FILE* file = NULL; //fopen(temp.c_str(), "wt"); - fopen_s(&file, temp.c_str(), "wt"); + //fopen_s(&file, temp.c_str(), "wt"); + FILE* file = ex_fopen(m_file_path, L"wt"); if (file == NULL) { @@ -321,11 +329,11 @@ void ExIniFile::Save(int codepage/* = EX_CODEPAGE_UTF8*/) ex_ini_sections::iterator it = m_secs.begin(); for (; it != m_secs.end(); ++it) { - EXLOGD(_T("{%s}\n"), it->first.c_str()); + EXLOGD(L"{%s}\n", it->first.c_str()); ex_wstr temp; - temp += _T("["); + temp += L"["; temp += it->first.c_str(); - temp += _T("]\n"); + temp += L"]\n"; ex_astr temp2; ex_wstr2astr(temp, temp2, codepage); fwrite(temp2.c_str(), temp2.size(), 1, file); diff --git a/common/libex/src/ex_log.cpp b/common/libex/src/ex_log.cpp index b278a19..dec3709 100644 --- a/common/libex/src/ex_log.cpp +++ b/common/libex/src/ex_log.cpp @@ -352,7 +352,7 @@ bool ExLogger::_open_file() } fseek(m_file, 0, SEEK_END); - m_filesize = ftell(m_file); + m_filesize = (ex_u32)ftell(m_file); #endif return _rotate_file(); @@ -392,7 +392,8 @@ bool ExLogger::_rotate_file(void) if (p == NULL) return false; - swprintf(_tmpname, L"%s.%04d%02d%02d%02d%02d%02d.bak", m_filename.c_str(), p->tm_year + 1900, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); + //swprintf(_tmpname, L"%ls.%04d%02d%02d%02d%02d%02d.bak", m_filename.c_str(), p->tm_year + 1900, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); + ex_wcsformat(_tmpname, 64, L"%ls.%04d%02d%02d%02d%02d%02d.bak", m_filename.c_str(), p->tm_year + 1900, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); // sprintf(szBaseNewFileLogName, "%04d%02d%02d%02d%02d%02d", // p->tm_year + 1900, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); #endif diff --git a/common/libex/src/ex_path.cpp b/common/libex/src/ex_path.cpp index 86c2b36..ea4d206 100644 --- a/common/libex/src/ex_path.cpp +++ b/common/libex/src/ex_path.cpp @@ -2,9 +2,11 @@ #include #include -#ifdef EX_OS_WIN32 -# include -#endif +//#ifdef EX_OS_WIN32 +//# include +//#else +//# include +//#endif static void _wstr_replace(ex_wstr& inout_str, const wchar_t* sfrom, const wchar_t* sto) { @@ -130,7 +132,9 @@ EX_BOOL ex_is_dir_exists(const wchar_t* in_path) return false; #else struct stat si; - if (0 != stat(in_path, &si)) + ex_astr _in_path; + ex_wstr2astr(in_path, _in_path); + if (0 != stat(_in_path.c_str(), &si)) return false; if (!S_ISDIR(si.st_mode)) return false; @@ -147,7 +151,9 @@ EX_BOOL ex_is_file_exists(const wchar_t* in_file) return false; #else struct stat si; - if (0 != stat(in_file, &si)) + ex_astr _in_file; + ex_wstr2astr(in_file, _in_file); + if (0 != stat(_in_file.c_str(), &si)) return false; if (!S_ISREG(si.st_mode)) return false; diff --git a/common/libex/src/ex_util.cpp b/common/libex/src/ex_util.cpp index c8c879d..cb85692 100644 --- a/common/libex/src/ex_util.cpp +++ b/common/libex/src/ex_util.cpp @@ -5,6 +5,10 @@ // #include +#ifndef EX_OS_WIN32 +# include +#endif + EX_BOOL ex_initialize(const char* lc_ctype) { #ifdef EX_OS_UNIX diff --git a/external/fix-external/Python-3.4.4/Modules/Setup.dist b/external/fix-external/Python-3.4.4/Modules/Setup.dist new file mode 100644 index 0000000..eb05856 --- /dev/null +++ b/external/fix-external/Python-3.4.4/Modules/Setup.dist @@ -0,0 +1,417 @@ +# -*- makefile -*- +# The file Setup is used by the makesetup script to construct the files +# Makefile and config.c, from Makefile.pre and config.c.in, +# respectively. The file Setup itself is initially copied from +# Setup.dist; once it exists it will not be overwritten, so you can edit +# Setup to your heart's content. Note that Makefile.pre is created +# from Makefile.pre.in by the toplevel configure script. + +# (VPATH notes: Setup and Makefile.pre are in the build directory, as +# are Makefile and config.c; the *.in and *.dist files are in the source +# directory.) + +# Each line in this file describes one or more optional modules. +# Modules enabled here will not be compiled by the setup.py script, +# so the file can be used to override setup.py's behavior. + +# Lines have the following structure: +# +# ... [ ...] [ ...] [ ...] +# +# is anything ending in .c (.C, .cc, .c++ are C++ files) +# is anything starting with -I, -D, -U or -C +# is anything ending in .a or beginning with -l or -L +# is anything else but should be a valid Python +# identifier (letters, digits, underscores, beginning with non-digit) +# +# (As the makesetup script changes, it may recognize some other +# arguments as well, e.g. *.so and *.sl as libraries. See the big +# case statement in the makesetup script.) +# +# Lines can also have the form +# +# = +# +# which defines a Make variable definition inserted into Makefile.in +# +# Finally, if a line contains just the word "*shared*" (without the +# quotes but with the stars), then the following modules will not be +# built statically. The build process works like this: +# +# 1. Build all modules that are declared as static in Modules/Setup, +# combine them into libpythonxy.a, combine that into python. +# 2. Build all modules that are listed as shared in Modules/Setup. +# 3. Invoke setup.py. That builds all modules that +# a) are not builtin, and +# b) are not listed in Modules/Setup, and +# c) can be build on the target +# +# Therefore, modules declared to be shared will not be +# included in the config.c file, nor in the list of objects to be +# added to the library archive, and their linker options won't be +# added to the linker options. Rules to create their .o files and +# their shared libraries will still be added to the Makefile, and +# their names will be collected in the Make variable SHAREDMODS. This +# is used to build modules as shared libraries. (They can be +# installed using "make sharedinstall", which is implied by the +# toplevel "make install" target.) (For compatibility, +# *noconfig* has the same effect as *shared*.) +# +# In addition, *static* explicitly declares the following modules to +# be static. Lines containing "*static*" and "*shared*" may thus +# alternate throughout this file. + +# NOTE: As a standard policy, as many modules as can be supported by a +# platform should be present. The distribution comes with all modules +# enabled that are supported by most platforms and don't require you +# to ftp sources from elsewhere. + + +# Some special rules to define PYTHONPATH. +# Edit the definitions below to indicate which options you are using. +# Don't add any whitespace or comments! + +# Directories where library files get installed. +# DESTLIB is for Python modules; MACHDESTLIB for shared libraries. +DESTLIB=$(LIBDEST) +MACHDESTLIB=$(BINLIBDEST) + +# NOTE: all the paths are now relative to the prefix that is computed +# at run time! + +# Standard path -- don't edit. +# No leading colon since this is the first entry. +# Empty since this is now just the runtime prefix. +DESTPATH= + +# Site specific path components -- should begin with : if non-empty +SITEPATH= + +# Standard path components for test modules +TESTPATH= + +# Path components for machine- or system-dependent modules and shared libraries +MACHDEPPATH=:$(PLATDIR) +EXTRAMACHDEPPATH= + +COREPYTHONPATH=$(DESTPATH)$(SITEPATH)$(TESTPATH)$(MACHDEPPATH)$(EXTRAMACHDEPPATH) +PYTHONPATH=$(COREPYTHONPATH) + + +# The modules listed here can't be built as shared libraries for +# various reasons; therefore they are listed here instead of in the +# normal order. + +# This only contains the minimal set of modules required to run the +# setup.py script in the root of the Python source tree. + +posix posixmodule.c # posix (UNIX) system calls +errno errnomodule.c # posix (UNIX) errno values +pwd pwdmodule.c # this is needed to find out the user's home dir + # if $HOME is not set +_sre _sre.c # Fredrik Lundh's new regular expressions +_codecs _codecsmodule.c # access to the builtin codecs and codec registry +_weakref _weakref.c # weak references +_functools _functoolsmodule.c # Tools for working with functions and callable objects +_operator _operator.c # operator.add() and similar goodies +_collections _collectionsmodule.c # Container types +itertools itertoolsmodule.c # Functions creating iterators for efficient looping +atexit atexitmodule.c # Register functions to be run at interpreter-shutdown +_stat _stat.c # stat.h interface + +# access to ISO C locale support +_locale _localemodule.c # -lintl + +# Standard I/O baseline +_io -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c + +# The zipimport module is always imported at startup. Having it as a +# builtin module avoids some bootstrapping problems and reduces overhead. +zipimport zipimport.c + +# faulthandler module +faulthandler faulthandler.c + +# debug tool to trace memory blocks allocated by Python +_tracemalloc _tracemalloc.c hashtable.c + +# The rest of the modules listed in this file are all commented out by +# default. Usually they can be detected and built as dynamically +# loaded modules by the new setup.py script added in Python 2.1. If +# you're on a platform that doesn't support dynamic loading, want to +# compile modules statically into the Python binary, or need to +# specify some odd set of compiler switches, you can uncomment the +# appropriate lines below. + +# ====================================================================== + +# The Python symtable module depends on .h files that setup.py doesn't track +_symtable symtablemodule.c + +# Uncommenting the following line tells makesetup that all following +# modules are to be built as shared libraries (see above for more +# detail; also note that *static* reverses this effect): + +#*shared* +*static* + +# GNU readline. Unlike previous Python incarnations, GNU readline is +# now incorporated in an optional module, configured in the Setup file +# instead of by a configure script switch. You may have to insert a +# -L option pointing to the directory where libreadline.* lives, +# and you may have to change -ltermcap to -ltermlib or perhaps remove +# it, depending on your system -- see the GNU readline instructions. +# It's okay for this to be a shared library, too. + +#readline readline.c -lreadline -ltermcap + + +# Modules that should always be present (non UNIX dependent): + +array arraymodule.c # array objects +cmath cmathmodule.c _math.c # -lm # complex math library functions +math mathmodule.c _math.c # -lm # math library functions, e.g. sin() +_struct _struct.c # binary structure packing/unpacking +time timemodule.c # -lm # time operations and variables +_weakref _weakref.c # basic weak reference support +#_testcapi _testcapimodule.c # Python C API test module +_random _randommodule.c # Random number generator +#_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c # elementtree accelerator +_pickle _pickle.c # pickle accelerator +_datetime _datetimemodule.c # datetime accelerator +_bisect _bisectmodule.c # Bisection algorithms +_heapq _heapqmodule.c # Heap queue algorithm + +unicodedata unicodedata.c # static Unicode character database + + +# Modules with some UNIX dependencies -- on by default: +# (If you have a really backward UNIX, select and socket may not be +# supported...) + +fcntl fcntlmodule.c # fcntl(2) and ioctl(2) +spwd spwdmodule.c # spwd(3) +grp grpmodule.c # grp(3) +select selectmodule.c # select(2); not on ancient System V + +# Memory-mapped files (also works on Win32). +mmap mmapmodule.c + +# CSV file helper +_csv _csv.c + +# Socket module helper for socket(2) +_socket socketmodule.c + +# Socket module helper for SSL support; you must comment out the other +# socket line above, and possibly edit the SSL variable: +SSL=$(srcdir)/../../release +_ssl _ssl.c \ + -DUSE_SSL -I$(SSL)/include \ + $(SSL)/lib/libssl.a $(SSL)/lib/libcrypto.a +# -lssl -lcrypto + +# The crypt module is now disabled by default because it breaks builds +# on many systems (where -lcrypt is needed), e.g. Linux (I believe). +# +# First, look at Setup.config; configure may have set this for you. + +#_crypt _cryptmodule.c # -lcrypt # crypt(3); needs -lcrypt on some systems + + +# Some more UNIX dependent modules -- off by default, since these +# are not supported by all UNIX systems: + +#nis nismodule.c -lnsl # Sun yellow pages -- not everywhere +termios termios.c # Steen Lumholt's termios module +resource resource.c # Jeremy Hylton's rlimit interface + +_posixsubprocess _posixsubprocess.c # POSIX subprocess module helper + +# Multimedia modules -- off by default. +# These don't work for 64-bit platforms!!! +# #993173 says audioop works on 64-bit platforms, though. +# These represent audio samples or images as strings: + +#audioop audioop.c # Operations on audio samples + + +# Note that the _md5 and _sha modules are normally only built if the +# system does not have the OpenSSL libs containing an optimized version. + +# The _md5 module implements the RSA Data Security, Inc. MD5 +# Message-Digest Algorithm, described in RFC 1321. + +_md5 md5module.c + + +# The _sha module implements the SHA checksum algorithms. +# (NIST's Secure Hash Algorithms.) +_sha1 sha1module.c +_sha256 sha256module.c +_sha512 sha512module.c + + +# The _tkinter module. +# +# The command for _tkinter is long and site specific. Please +# uncomment and/or edit those parts as indicated. If you don't have a +# specific extension (e.g. Tix or BLT), leave the corresponding line +# commented out. (Leave the trailing backslashes in! If you +# experience strange errors, you may want to join all uncommented +# lines and remove the backslashes -- the backslash interpretation is +# done by the shell's "read" command and it may not be implemented on +# every system. + +# *** Always uncomment this (leave the leading underscore in!): +# _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT \ +# *** Uncomment and edit to reflect where your Tcl/Tk libraries are: +# -L/usr/local/lib \ +# *** Uncomment and edit to reflect where your Tcl/Tk headers are: +# -I/usr/local/include \ +# *** Uncomment and edit to reflect where your X11 header files are: +# -I/usr/X11R6/include \ +# *** Or uncomment this for Solaris: +# -I/usr/openwin/include \ +# *** Uncomment and edit for Tix extension only: +# -DWITH_TIX -ltix8.1.8.2 \ +# *** Uncomment and edit for BLT extension only: +# -DWITH_BLT -I/usr/local/blt/blt8.0-unoff/include -lBLT8.0 \ +# *** Uncomment and edit for PIL (TkImaging) extension only: +# (See http://www.pythonware.com/products/pil/ for more info) +# -DWITH_PIL -I../Extensions/Imaging/libImaging tkImaging.c \ +# *** Uncomment and edit for TOGL extension only: +# -DWITH_TOGL togl.c \ +# *** Uncomment and edit to reflect your Tcl/Tk versions: +# -ltk8.2 -ltcl8.2 \ +# *** Uncomment and edit to reflect where your X11 libraries are: +# -L/usr/X11R6/lib \ +# *** Or uncomment this for Solaris: +# -L/usr/openwin/lib \ +# *** Uncomment these for TOGL extension only: +# -lGL -lGLU -lXext -lXmu \ +# *** Uncomment for AIX: +# -lld \ +# *** Always uncomment this; X11 libraries to link with: +# -lX11 + +# Lance Ellinghaus's syslog module +syslog syslogmodule.c # syslog daemon interface + + +# Curses support, requiring the System V version of curses, often +# provided by the ncurses library. e.g. on Linux, link with -lncurses +# instead of -lcurses). +# +# First, look at Setup.config; configure may have set this for you. + +#_curses _cursesmodule.c -lcurses -ltermcap +# Wrapper for the panel library that's part of ncurses and SYSV curses. +#_curses_panel _curses_panel.c -lpanel -lncurses + + +# Modules that provide persistent dictionary-like semantics. You will +# probably want to arrange for at least one of them to be available on +# your machine, though none are defined by default because of library +# dependencies. The Python module dbm/__init__.py provides an +# implementation independent wrapper for these; dbm/dumb.py provides +# similar functionality (but slower of course) implemented in Python. + +# The standard Unix dbm module has been moved to Setup.config so that +# it will be compiled as a shared library by default. Compiling it as +# a built-in module causes conflicts with the pybsddb3 module since it +# creates a static dependency on an out-of-date version of db.so. +# +# First, look at Setup.config; configure may have set this for you. + +#_dbm _dbmmodule.c # dbm(3) may require -lndbm or similar + +# Anthony Baxter's gdbm module. GNU dbm(3) will require -lgdbm: +# +# First, look at Setup.config; configure may have set this for you. + +#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm + + +# Helper module for various ascii-encoders +binascii binascii.c + +# Fred Drake's interface to the Python parser +#parser parsermodule.c + + +# Lee Busby's SIGFPE modules. +# The library to link fpectl with is platform specific. +# Choose *one* of the options below for fpectl: + +# For SGI IRIX (tested on 5.3): +#fpectl fpectlmodule.c -lfpe + +# For Solaris with SunPro compiler (tested on Solaris 2.5 with SunPro C 4.2): +# (Without the compiler you don't have -lsunmath.) +#fpectl fpectlmodule.c -R/opt/SUNWspro/lib -lsunmath -lm + +# For other systems: see instructions in fpectlmodule.c. +#fpectl fpectlmodule.c ... + +# Test module for fpectl. No extra libraries needed. +#fpetest fpetestmodule.c + +# Andrew Kuchling's zlib module. +# This require zlib 1.1.3 (or later). +# See http://www.gzip.org/zlib/ +#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz + +# Interface to the Expat XML parser +# +# Expat was written by James Clark and is now maintained by a group of +# developers on SourceForge; see www.libexpat.org for more +# information. The pyexpat module was written by Paul Prescod after a +# prototype by Jack Jansen. Source of Expat 1.95.2 is included in +# Modules/expat/. Usage of a system shared libexpat.so/expat.dll is +# not advised. +# +# More information on Expat can be found at www.libexpat.org. +# +#pyexpat expat/xmlparse.c expat/xmlrole.c expat/xmltok.c pyexpat.c -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI + +# Hye-Shik Chang's CJKCodecs + +# multibytecodec is required for all the other CJK codec modules +_multibytecodec cjkcodecs/multibytecodec.c + +_codecs_cn cjkcodecs/_codecs_cn.c +_codecs_hk cjkcodecs/_codecs_hk.c +_codecs_iso2022 cjkcodecs/_codecs_iso2022.c +_codecs_jp cjkcodecs/_codecs_jp.c +_codecs_kr cjkcodecs/_codecs_kr.c +_codecs_tw cjkcodecs/_codecs_tw.c + +# Example -- included for reference only: +# xx xxmodule.c + +# Another example -- the 'xxsubtype' module shows C-level subtyping in action +#xxsubtype xxsubtype.c + + +######################################################################## +# add extra-module by apex. +######################################################################## + +zlib zlibmodule.c -I$(srcdir)/Modules/zlib \ + zlib/adler32.c zlib/crc32.c zlib/deflate.c zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c zlib/zutil.c \ + zlib/compress.c zlib/uncompr.c zlib/gzclose.c zlib/gzlib.c zlib/gzread.c zlib/gzwrite.c + +#_psutil_linux psutil/_psutil_linux.c +#_psutil_posix psutil/_psutil_posix.c + +_json _json.c + +_sqlite3 -I$(srcdir)/Modules/_sqlite/sqlite3 -I$(srcdir)/Modules/_sqlite \ + $(srcdir)/Modules/_sqlite/sqlite3/sqlite3.c \ + _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c \ + _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c + +# EXTRA_CFLAGS=-DMODULE_NAME='"sqlite3"' -DPSUTIL_VERSION=420 +#EXTRA_CFLAGS=-DPSUTIL_VERSION=420 + diff --git a/external/fix-external/Python-3.4.4/Modules/_sqlite/cache.h b/external/fix-external/Python-3.4.4/Modules/_sqlite/cache.h new file mode 100644 index 0000000..9d9a95b --- /dev/null +++ b/external/fix-external/Python-3.4.4/Modules/_sqlite/cache.h @@ -0,0 +1,75 @@ +/* cache.h - definitions for the LRU cache + * + * Copyright (C) 2004-2010 Gerhard Häring + * + * This file is part of pysqlite. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef PYSQLITE_CACHE_H +#define PYSQLITE_CACHE_H +#include "Python.h" + +#define MODULE_NAME "sqlite3" + +/* The LRU cache is implemented as a combination of a doubly-linked with a + * dictionary. The list items are of type 'Node' and the dictionary has the + * nodes as values. */ + +typedef struct _pysqlite_Node +{ + PyObject_HEAD + PyObject* key; + PyObject* data; + long count; + struct _pysqlite_Node* prev; + struct _pysqlite_Node* next; +} pysqlite_Node; + +typedef struct +{ + PyObject_HEAD + int size; + + /* a dictionary mapping keys to Node entries */ + PyObject* mapping; + + /* the factory callable */ + PyObject* factory; + + pysqlite_Node* first; + pysqlite_Node* last; + + /* if set, decrement the factory function when the Cache is deallocated. + * this is almost always desirable, but not in the pysqlite context */ + int decref_factory; +} pysqlite_Cache; + +extern PyTypeObject pysqlite_NodeType; +extern PyTypeObject pysqlite_CacheType; + +int pysqlite_node_init(pysqlite_Node* self, PyObject* args, PyObject* kwargs); +void pysqlite_node_dealloc(pysqlite_Node* self); + +int pysqlite_cache_init(pysqlite_Cache* self, PyObject* args, PyObject* kwargs); +void pysqlite_cache_dealloc(pysqlite_Cache* self); +PyObject* pysqlite_cache_get(pysqlite_Cache* self, PyObject* args); + +int pysqlite_cache_setup_types(void); + +#endif diff --git a/external/fix-external/Python-3.4.4/Modules/_sqlite/prepare_protocol.h b/external/fix-external/Python-3.4.4/Modules/_sqlite/prepare_protocol.h new file mode 100644 index 0000000..2de505c --- /dev/null +++ b/external/fix-external/Python-3.4.4/Modules/_sqlite/prepare_protocol.h @@ -0,0 +1,43 @@ +/* prepare_protocol.h - the protocol for preparing values for SQLite + * + * Copyright (C) 2005-2010 Gerhard Häring + * + * This file is part of pysqlite. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef PYSQLITE_PREPARE_PROTOCOL_H +#define PYSQLITE_PREPARE_PROTOCOL_H +#include "Python.h" + +#define MODULE_NAME "sqlite3" + +typedef struct +{ + PyObject_HEAD +} pysqlite_PrepareProtocol; + +extern PyTypeObject pysqlite_PrepareProtocolType; + +int pysqlite_prepare_protocol_init(pysqlite_PrepareProtocol* self, PyObject* args, PyObject* kwargs); +void pysqlite_prepare_protocol_dealloc(pysqlite_PrepareProtocol* self); + +int pysqlite_prepare_protocol_setup_types(void); + +#define UNKNOWN (-1) +#endif diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt new file mode 100644 index 0000000..90776e2 --- /dev/null +++ b/server/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.5) +#project(teleport) + +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +#set(SOURCE_FILES main.cpp) +#add_executable(teleport ${SOURCE_FILES}) +#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${teleport_SOURCE_DIR}/../out/server/x64/bin") + +add_subdirectory(tp_web/src) +#add_subdirectory(tp_core/core) +#add_subdirectory(tp_core/protocol/ssh) diff --git a/server/tp_web/src/CMakeLists.txt b/server/tp_web/src/CMakeLists.txt new file mode 100644 index 0000000..093b4ae --- /dev/null +++ b/server/tp_web/src/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.5) +project(tpweb) + +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${Project_SOURCE_DIR}/../out/server/x64/bin") + +aux_source_directory(. DIR_SRCS) +aux_source_directory(../../../common/libex/src DIR_SRCS) +aux_source_directory(../../../common/pyshell/src DIR_SRCS) + +include_directories( + ../../../common/libex/include + ../../../common/pyshell/include + ../../../external/linux/release/include + ../../../external/linux/release/include/python3.4m +# ../external/common/jsoncpp/include +# ../../pyshell/pys/include +# ../../py-static/release/include/python3.4m +) + +add_executable(tp_web ${DIR_SRCS}) +target_link_libraries(tp_web python3.4m ssl crypto dl pthread rt util) diff --git a/server/tp_web/src/main.cpp b/server/tp_web/src/main.cpp index e8b0156..2a21df2 100644 --- a/server/tp_web/src/main.cpp +++ b/server/tp_web/src/main.cpp @@ -417,9 +417,10 @@ VOID WINAPI service_main(DWORD argc, wchar_t** argv) #else // not EX_OS_WIN32 -#include "ts_util.h" +//#include "ts_util.h" #include #include +#include static void _sig_handler(int signum, siginfo_t* info, void* ptr); //static int _daemon(int nochdir, int noclose); diff --git a/server/tp_web/src/ts_env.cpp b/server/tp_web/src/ts_env.cpp index db0f6aa..5be9fdb 100644 --- a/server/tp_web/src/ts_env.cpp +++ b/server/tp_web/src/ts_env.cpp @@ -62,7 +62,7 @@ bool TsEnv::init(void) if (!ps->GetStr(L"log_file", log_file)) { ex_wstr log_path = base_path; - ex_path_join(log_path, false, _T("log"), NULL); + ex_path_join(log_path, false, L"log", NULL); EXLOG_FILE(L"tpweb.log", log_path.c_str()); } else