From 141982f5e3bc7218d5700052d75d9e9c6f1591af Mon Sep 17 00:00:00 2001 From: ied206 Date: Tue, 16 Jun 2015 00:52:56 +0900 Subject: [PATCH] Added Cygwin Build README and patch --- README-Cygwin.md | 55 ++++++++++++++++++++++++++++++++++++++++ telegram-cli-cygwin.diff | 29 +++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100755 README-Cygwin.md create mode 100755 telegram-cli-cygwin.diff diff --git a/README-Cygwin.md b/README-Cygwin.md new file mode 100755 index 0000000..5de3888 --- /dev/null +++ b/README-Cygwin.md @@ -0,0 +1,55 @@ +### Installation on Windows +To use telegram-cli in Windows, you should compile with Cygwin which has POSIX API functionality. + +First, Clone GitHub Repository + + git clone --recursive https://github.com/vysheng/tg.git + +Install [Cygwin](https://www.cygwin.com/) and cygwin's package manager, [apt-cyg](https://github.com/transcode-open/apt-cyg). + +On Cygwin Terminal, install compiler and tools : + + apt-cyg install cygwin32-gcc-core cygwin32-gcc-g++ gcc-core gcc-g++ make wget patch diffutils grep tar gzip + +Now you have a compiler, but no libraries. You need readline, openssl, libconfig, liblua, python and libjansson to use telegram-cli's full functionality. + +On Cygwin Terminal, type: + + apt-cyg install libevent-devel openssl-devel libreadline-devel lua-devel python3 +(Install package 'python' to use Python 2.7, or install package 'python3' to use Python 3) + +libconfig and libjansson is not in cygwin's package, so you should compile yourself. + +Compile libconfig : + + wget http://www.hyperrealm.com/libconfig/libconfig-1.5.tar.gz + tar xvf libconfig-1.5.tar.gz && cd libconfig-1.5 + ./configure + make && make install && cd .. + +Compile libjansson : + + wget http://www.digip.org/jansson/releases/jansson-2.7.tar.gz + tar xvf jansson-2.7.tar.gz && cd jansson-2.7 + ./configure + make && make install && cd .. + +Then, in telegram-cli's directory, + + ./configure + +We need to patch Makefile and loop.c to compile in cygwin. Download this [diff](https://gist.github.com/ied206/d774a445f36004d263ab) then untar. Then, patch in 'tg' directory. + + cd tg + patch -p1 < telegram-cli-cygwin.diff + +Then + make + +There will be some warnings, but you can ignore them. After compile is done, **telegram-cli.exe** will be generated in **bin** directory. + +To run telegram-cli, type + + bin/telegram-cli -k tg-server.pub + +**Caution**: Binary compiled with Cygwin should be run in Cygwin Terminal, since it assumes unix-like shell, and it is dependent on cygwin dlls. diff --git a/telegram-cli-cygwin.diff b/telegram-cli-cygwin.diff new file mode 100755 index 0000000..8774ff5 --- /dev/null +++ b/telegram-cli-cygwin.diff @@ -0,0 +1,29 @@ +diff -urN telegram-cli/Makefile telegram-cli-mod/Makefile +--- telegram-cli/Makefile 2015-06-16 00:15:06.735779700 +0900 ++++ telegram-cli-mod/Makefile 2015-06-16 00:17:10.884076800 +0900 +@@ -4,9 +4,9 @@ + LDFLAGS= -L/usr/local/lib -L/usr/lib -L/usr/lib -L/usr/lib + CPPFLAGS= -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/python3.4m -I/usr/include + DEFS=-DHAVE_CONFIG_H +-COMPILE_FLAGS=${CFLAGS} ${CPFLAGS} ${CPPFLAGS} ${DEFS} -Wall -Werror -Wextra -Wno-missing-field-initializers -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC ++COMPILE_FLAGS=${CFLAGS} ${CPFLAGS} ${CPPFLAGS} ${DEFS} -Wall -Wextra -Wno-missing-field-initializers -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC + EXTRA_LIBS=-ljansson -lconfig -lz -levent -lm -lreadline -llua-5.2 -lpython3.4m -lssl -lcrypto +-LOCAL_LDFLAGS=-rdynamic -ggdb -levent ${EXTRA_LIBS} -ldl -lpthread -lutil ++LOCAL_LDFLAGS=-ggdb -levent ${EXTRA_LIBS} -ldl -lpthread -lutil + LINK_FLAGS=${LDFLAGS} ${LOCAL_LDFLAGS} + + DEP=dep +diff -urN telegram-cli/loop.c telegram-cli-mod/loop.c +--- telegram-cli/loop.c 2015-06-16 00:13:58.813146200 +0900 ++++ telegram-cli-mod/loop.c 2015-06-16 00:17:40.441832400 +0900 +@@ -383,8 +383,8 @@ + close (auth_file_fd); + } + +-void write_secret_chat (tgl_peer_t *_P, void *extra) { +- struct tgl_secret_chat *P = (void *)_P; ++void write_secret_chat (tgl_peer_t *_PP, void *extra) { ++ struct tgl_secret_chat *P = (void *)_PP; + if (tgl_get_peer_type (P->id) != TGL_PEER_ENCR_CHAT) { return; } + if (P->state != sc_ok) { return; } + int *a = extra;