Hi Robin,
Thanks for all your help. I am sure I will be able to build it soon.
You were correct  for Cmake. I did compile it from source code for MinGW and it 
passed without any problem.
Now cmake is generating correct files i.e. SHELL is sh.exe and not cmd.exe.
Libssh also got configured and generated. 
Now I am getting problem with 'make':

I have not enabled static library building yet. Trying shared first. 

ssingh@IN-SSingh-LT /home/libssh-0.7.3/build
$ make
Scanning dependencies of target ssh_shared
[  1%] Building C object src/CMakeFiles/ssh_shared.dir/agent.c.obj
[  2%] Building C object src/CMakeFiles/ssh_shared.dir/auth.c.obj
[  4%] Building C object src/CMakeFiles/ssh_shared.dir/base64.c.obj
[  5%] Building C object src/CMakeFiles/ssh_shared.dir/bignum.c.obj
[  7%] Building C object src/CMakeFiles/ssh_shared.dir/buffer.c.obj
[  8%] Building C object src/CMakeFiles/ssh_shared.dir/callbacks.c.obj
[ 10%] Building C object src/CMakeFiles/ssh_shared.dir/channels.c.obj
[ 11%] Building C object src/CMakeFiles/ssh_shared.dir/client.c.obj
[ 13%] Building C object src/CMakeFiles/ssh_shared.dir/config.c.obj
[ 14%] Building C object src/CMakeFiles/ssh_shared.dir/connect.c.obj
C:/MinGW/msys/1.0/home/libssh-0.7.3/src/connect.c:87:2: error: #error "Your 
system must have getaddrinfo()"
 #error "Your system must have getaddrinfo()"
  ^
make[2]: *** [src/CMakeFiles/ssh_shared.dir/connect.c.obj] Error 1
make[1]: *** [src/CMakeFiles/ssh_shared.dir/all] Error 2
make: *** [all] Error 2

ssingh@IN-SSingh-LT /home/libssh-0.7.3/build
$

content of below file:

cat  ./src/CMakeFiles/ssh_shared.dir/includes_C.rsp  

-IC:/MinGW/msys/1.0/home/libssh-0.7.3/build/src 
-IC:/MinGW/msys/1.0/home/libssh-0.7.3/src 
-IC:/MinGW/msys/1.0/home/libssh-0.7.3/include 
-IC:/MinGW/msys/1.0/home/libssh-0.7.3/build 
-IC:/MinGW/msys/1.0/local/include 
-IC:/MinGW/msys/1.0/mingw/include


Regards,
Servesh


From: [email protected] [mailto:[email protected]] 
Sent: 30 September 2016 17:58
To: [email protected]
Subject: Re: Building library for Windows

I know what’s wrong with this.  I’ve built the DLL (shared library).  When I 
explain, you should be able to build the static library.

[ 94%] Building C object examples/CMakeFiles/exec.dir/exec.c.obj
[ 95%] Building C object examples/CMakeFiles/exec.dir/authentication.c.obj
[ 97%] Building C object examples/CMakeFiles/exec.dir/knownhosts.c.obj
[ 98%] Building C object examples/CMakeFiles/exec.dir/connect_ssh.c.obj
[100%] Linking C executable exec.exe
[100%] Built target exec
573 -32- /home/rmills/gnu/libssh/libssh-0.7.3/build> find . -name "*.a" -exec 
ls -alt {} \;
-rw-r--r-- 1 rmills Administrators 11750 Sep 30 12:42 
./examples/CMakeFiles/exec.dir/objects.a
-rw-r--r-- 1 rmills Administrators 11012 Sep 30 12:42 
./examples/CMakeFiles/libsshpp.dir/objects.a
-rw-r--r-- 1 rmills Administrators 5990 Sep 30 12:42 
./examples/CMakeFiles/libsshpp_noexcept.dir/objects.a
-rw-r--r-- 1 rmills Administrators 11792 Sep 30 12:42 
./examples/CMakeFiles/senddata.dir/objects.a
-rw-r--r-- 1 rmills Administrators 651698 Sep 30 12:42 
./src/CMakeFiles/ssh_shared.dir/objects.a
-rw-r--r-- 1 rmills Administrators 241366 Sep 30 12:42 ./src/libssh.dll.a  <— 
GOOD
-rw-r--r-- 1 rmills Administrators 2122 Sep 30 12:42 
./src/threads/CMakeFiles/ssh_threads_shared.dir/objects.a
-rw-r--r-- 1 rmills Administrators 1538 Sep 30 12:42 
./src/threads/libssh_threads.dll.a  <— GOOD
574 -32- /home/rmills/gnu/libssh/libssh-0.7.3/build> find . -name "*.dll" -exec 
ls -alt {} \;
-rwxr-xr-x 1 rmills Administrators 2291514 Sep 30 12:42 ./src/libssh.dll <— GOOD
-rwxr-xr-x 1 rmills Administrators 41701 Sep 30 12:42 
./src/threads/libssh_threads.dll  <— GOOD

CMake is generating the following wrong response files:

575 -32- /home/rmills/gnu/libssh/libssh-0.7.3/build> find . -name "*.rsp" -exec 
ls -alt {} \;
-rw-r--r-- 1 rmills Administrators 425 Sep 30 12:41 
./examples/CMakeFiles/exec.dir/includes_C.rsp  <— WRONG
-rw-r--r-- 1 rmills Administrators 187 Sep 30 12:36 
./examples/CMakeFiles/exec.dir/linklibs.rsp
-rw-r--r-- 1 rmills Administrators 148 Sep 30 12:36 
./examples/CMakeFiles/exec.dir/objects1.rsp
-rw-r--r-- 1 rmills Administrators 264 Sep 30 12:36 
./examples/CMakeFiles/libsshpp.dir/includes_CXX.rsp  <— WRONG   
-rw-r--r-- 1 rmills Administrators 187 Sep 30 12:36 
./examples/CMakeFiles/libsshpp.dir/linklibs.rsp
-rw-r--r-- 1 rmills Administrators 42 Sep 30 12:36 
./examples/CMakeFiles/libsshpp.dir/objects1.rsp
-rw-r--r-- 1 rmills Administrators 264 Sep 30 12:36 
./examples/CMakeFiles/libsshpp_noexcept.dir/includes_CXX.rsp <— WRONG
-rw-r--r-- 1 rmills Administrators 187 Sep 30 12:36 
./examples/CMakeFiles/libsshpp_noexcept.dir/linklibs.rsp
-rw-r--r-- 1 rmills Administrators 60 Sep 30 12:36 
./examples/CMakeFiles/libsshpp_noexcept.dir/objects1.rsp
-rw-r--r-- 1 rmills Administrators 425 Sep 30 12:41 
./examples/CMakeFiles/senddata.dir/includes_C.rsp  <— WRONG
-rw-r--r-- 1 rmills Administrators 187 Sep 30 12:36 
./examples/CMakeFiles/senddata.dir/linklibs.rsp
-rw-r--r-- 1 rmills Administrators 168 Sep 30 12:36 
./examples/CMakeFiles/senddata.dir/objects1.rsp
-rw-r--r-- 1 rmills Administrators 425 Sep 30 12:41 
./src/CMakeFiles/ssh_shared.dir/includes_C.rsp  <— WRONG
-rw-r--r-- 1 rmills Administrators 166 Sep 30 12:36 
./src/CMakeFiles/ssh_shared.dir/linklibs.rsp
-rw-r--r-- 1 rmills Administrators 2137 Sep 30 12:36 
./src/CMakeFiles/ssh_shared.dir/objects1.rsp
-rw-r--r-- 1 rmills Administrators 425 Sep 30 12:40 
./src/threads/CMakeFiles/ssh_threads_shared.dir/includes_C.rsp  <— WRONG
-rw-r--r-- 1 rmills Administrators 182 Sep 30 12:36 
./src/threads/CMakeFiles/ssh_threads_shared.dir/linklibs.rsp
-rw-r--r-- 1 rmills Administrators 49 Sep 30 12:36 
./src/threads/CMakeFiles/ssh_threads_shared.dir/objects1.rsp
576 -32- /home/rmills/gnu/libssh/libssh-0.7.3/build>

The correct code (in each of the wrong files) on my system (to use the Qt 5.6 
provided compiler is): 

-IC:/MinGW/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/build/src/threads
-IC:/MinGW/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/src/threads
-IC:/MinGW/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/include
-IC:/MinGW/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/build
-IC:/MinGW/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3
-IC:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include
-IC:/MinGW/msys/1.0/local/include 

I had to generate the build files with this command:
cmake .. -G "Unix Makefiles" -DCMAKE_C_COMPILER=$(which gcc) 
-DCMAKE_CXX_COMPILER=$(which g++)

I had to build and install openssl with the commands (in the openssl delivery)
./config --prefix=/usr/local
make
make install

To build the static library, you’ll have to edit CMakeLists.txt.  You may well 
find that the linker response files are not correct for static libraries.

////////////  Here are notes I made along the way to solving this 
////////////////////////

I tried to build libssh this morning on MinGW/64.  The experience was the same 
as MinGW/32.

1) I had to edit sdkddkver.h to build CMake

2) I had to bootstrap into —prefix=/usr/local (why is bootstrap not called 
configure?)

3) I had to use CMake with this command: cmake .. -G "Unix Makefiles" 
-DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_CXX_COMPILER=$(which g++)

4) Here’s what happens when I run make
c:/MinGW64/msys/1.0/bin/cmake.exe -E cmake_progress_report 
C:/MinGW64/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/build/CMakeFiles 12
[  1%] Building C object src/CMakeFiles/ssh_shared.dir/auth.c.obj
cd C:/MinGW64/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/build/src && 
c:/TDM-GCC-64/bin/gcc.exe  -DLIBSSH_EXPORTS 
@CMakeFiles/ssh_shared.dir/includes_C.rsp   -o 
CMakeFiles/ssh_shared.dir/auth.c.obj   -c 
C:/MinGW64/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/src/auth.c
In file included from c:/MinGW64/msys/1.0/include/sys/unistd.h:9:0,
                 from c:/MinGW64/msys/1.0/include/unistd.h:6,
                 from 
C:/MinGW64/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/include/libssh/libssh.h:59,
                 from 
C:/MinGW64/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/include/libssh/priv.h:138,
                 from 
C:/MinGW64/msys/1.0/home/rmills/gnu/libssh/libssh-0.7.3/src/auth.c:34:
c:/MinGW64/msys/1.0/include/sys/types.h:71:18: error: conflicting types for 
'time_t'
 typedef _TIME_T_ time_t;

5) Exiv2 does not build with CMake either.  Dies a terrible death instantly 
down inside a stack of system include files involving pthread.

6) My notes about CMake are here:
svn://dev.exiv2.org/svn/trunk/contrib/buildserver/dailyCMake.sh

Some Exiv2 users love CMake.  I do not.  It works well on Linux/MacOS-X/Cygwin. 
 It doesn’t seem to work on MinGW.  It’s an obstructive monster with Visual 
Studio.  Of the 5 platforms we support on Exiv2, MinGW is the one I like least. 
 However we build and test Exiv2 on all 5 platform on every commit.  We build 
and test all 5 platforms and 6 editions of Visual Studio in 32 and 64 bits 
every night.

One of the challenges of using a build system such as CMake is to fix the build 
when CMake make mistakes.  Because there is an abstract layer (CMakeLists.txt) 
between the code and the compiler, when things go wrong you have to crawl 
through the generated magic.  This is not fun.  The Linux World’s attitude “It 
must be the fault of Windows, because it works on Linux” is very unhelpful.  
You’re unlikely to get any sympathy on an opensource Forum.  It’s your lucky 
day to have met a helpful open-source contributor who is not Windows hostile.

I’m very pleased to have worked on this.   I still haven’t got Exiv2 to build 
using CMake on MinGW/32.  However, I’m confident that I’ll fix that over the 
weekend.

Robin 
http://clanmills.com

Reply via email to