Second Patch to compile smoothly in Cygwin

This commit is contained in:
ied206 2015-06-16 13:02:40 +09:00
parent 141982f5e3
commit 78680bf72d
2 changed files with 59 additions and 16 deletions

View File

@ -1,55 +1,57 @@
### Installation on Windows ### Installation on Windows
To use telegram-cli in Windows, you should compile with Cygwin which has POSIX API functionality. 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). 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 : In 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 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. 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:
Then Clone GitHub Repository in Cygwin Terminal
git clone --recursive https://github.com/vysheng/tg.git
In Cygwin Terminal, type:
apt-cyg install libevent-devel openssl-devel libreadline-devel lua-devel python3 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) (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. libconfig and libjansson is not in cygwin's package, so you should compile yourself.
Compile libconfig : Compile libconfig
wget http://www.hyperrealm.com/libconfig/libconfig-1.5.tar.gz wget http://www.hyperrealm.com/libconfig/libconfig-1.5.tar.gz
tar xvf libconfig-1.5.tar.gz && cd libconfig-1.5 tar xvf libconfig-1.5.tar.gz && cd libconfig-1.5
./configure ./configure
make && make install && cd .. make && make install && cd ..
Compile libjansson : Compile libjansson
wget http://www.digip.org/jansson/releases/jansson-2.7.tar.gz wget http://www.digip.org/jansson/releases/jansson-2.7.tar.gz
tar xvf jansson-2.7.tar.gz && cd jansson-2.7 tar xvf jansson-2.7.tar.gz && cd jansson-2.7
./configure ./configure
make && make install && cd .. make && make install && cd ..
Then, in telegram-cli's directory, Then, go to tg directory then generate Makefile.
./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 cd tg
patch -p1 < telegram-cli-cygwin.diff ./configure
We need to patch Makefile and loop.c to compile in cygwin. Download this [patch](https://gist.github.com/ied206/d774a445f36004d263ab) then untar. Then, patch in tg directory.
patch -p1 < telegram-cli-cygwin.patch
Then Then
make make
There will be some warnings, but you can ignore them. After compile is done, **telegram-cli.exe** will be generated in **bin** directory. After compile is done, **telegram-cli.exe** will be generated in **bin** directory.
To run telegram-cli, type To run telegram-cli, type
bin/telegram-cli -k tg-server.pub 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. **Caution**: A binary compiled with Cygwin should be run in Cygwin Terminal.

41
telegram-cli-cygwin.patch Normal file
View File

@ -0,0 +1,41 @@
Binary files tg/.git/index and tg-cygwin/.git/index differ
diff -urN tg/Makefile tg-cygwin/Makefile
--- tg/Makefile 2015-06-16 12:39:34.931053900 +0900
+++ tg-cygwin/Makefile 2015-06-16 12:44:12.584342300 +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 -Werror -Wextra -Wno-missing-field-initializers -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter
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 tg/loop.c tg-cygwin/loop.c
--- tg/loop.c 2015-06-16 12:37:54.054112200 +0900
+++ tg-cygwin/loop.c 2015-06-16 12:48:12.793954000 +0900
@@ -383,8 +383,9 @@
close (auth_file_fd);
}
-void write_secret_chat (tgl_peer_t *_P, void *extra) {
- struct tgl_secret_chat *P = (void *)_P;
+// In Cygwin's Python, _P is marco constant. So change tgl_peer_t *_P -> tgl_peer_t *_Peer
+void write_secret_chat (tgl_peer_t *_Peer, void *extra) {
+ struct tgl_secret_chat *P = (void *)_Peer;
if (tgl_get_peer_type (P->id) != TGL_PEER_ENCR_CHAT) { return; }
if (P->state != sc_ok) { return; }
int *a = extra;
@@ -634,7 +635,8 @@
vlogprintf (E_WARNING, "Accepting incoming connection\n");
unsigned clilen = 0;
struct sockaddr_in cli_addr;
- int fd = accept (efd, (struct sockaddr *)&cli_addr, &clilen);
+ // In Cygwin, put unsigned int in socklen_t produce warning. Add (socklen_t *) casting
+ int fd = accept (efd, (struct sockaddr *)&cli_addr, (socklen_t *)&clilen);
assert (fd >= 0);
struct bufferevent *bev = bufferevent_socket_new (TLS->ev_base, fd, 0);