Subject: bug#14022: libtool-gug

From: Andreas Otto <[email-masked]>
Date: Fri, 22 Mar 2013 10:04:13 +0100

Am 22.03.2013 09:34, schrieb Peter Rosin:
> [please stay on-list, quoting in full to preserve the context]
>
> On 2013-03-22 09:03, Andreas Otto wrote:
>> Am 22.03.2013 08:14, schrieb Peter Rosin:
>>> Hi Andreas!
>>>
>>> On 2013-03-21 15:41, Andreas Otto wrote:
>>>> Hi,
>>>>
>>>> the following code has an error:
>>> I don't think so, see below...
>>>
>>>> # func_convert_core_msys_to_w32 ARG
>>>> # Convert file name or path ARG from MSYS format to w32 format. Return
>>>> # result in func_convert_core_msys_to_w32_result.
>>>> func_convert_core_msys_to_w32 ()
>>>> {
>>>>     $opt_debug
>>>>     # awkward: cmd appends spaces to result
>>>>     func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
>>>>       $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
>>>> }
>>>> #end: func_convert_core_msys_to_w32
>>>>
>>>> I need "...cmd /c ..." to get my stuff compiled
>>> *snip*
>>>
>>>> $ cygpath -V
>>>> cygpath (cygwin) 1.7.17
>>> cygpath? If you are reporting the cygpath version and say that
>>> you need "...cmd /c..." instead of "...cmd //c...", then it
>>> sounds as if you have confused MSYS and Cygwin. The function
>>> func_convert_core_msys_to_w32 should only be used when you
>>> are using MSYS. It's not for Cygwin.
>>>
>>> On Cygwin, it is best to use a Cygwin-hosted cross compiler.
>>> If you want to run a MinGW-hosted compiler, it's best to
>>> use MSYS. But you still can (if you obey the rules) use
>>> a MinGW-hosted compiler from Cygwin, but in that case you
>>> want to use func_convert_file_cygwin_to_w32.
>>>
>>> My advise is that you read this chapter carefully:
>>> http://www.gnu.org/software/libtool/manual/libtool.html#File-name-conversion
>>>
>>> Cheers,
>>> Peter
>>>
>> Hi,
>>
>> I'm working on cygwin no MSYS
>>
>> I've done a freash cygwin installation
>> I'm using ONLY tools from cygwin
>> I use the compiler
>>
>> $ export | grep w64
>> declare -x CC="x86_64-w64-mingw32-gcc"
>> declare -x CXX="x86_64-w64-mingw32-g++"
>>
>> I use the
>> --build=x86_64-w64-mingw32
>>
>> everything ONLY from cygwin
>>
>> compile....
>> $ make -j 2
>> (CDPATH="${ZSH_VERSION+.}:" && cd /home/dev1usr/Project/NHI1 && /bin/bash /home/dev1usr/Project/NHI1/missing --run autoheader)
>> rm -f stamp-h1
>> touch /home/dev1usr/Project/NHI1/mqconfig.h.in
>> cd . && /bin/bash ./config.status mqconfig.h
>> config.status: creating mqconfig.h
>> config.status: mqconfig.h is unchanged
>> make  all-recursive
>> make[1]: Entering directory `/build/dev1usr/Main/thread'
>> Making all in theLink
>> make[2]: Entering directory `/build/dev1usr/Main/thread/theLink'
>> Making all in sqlite
>> make[3]: Entering directory `/build/dev1usr/Main/thread/theLink/sqlite'
>> /bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-w64-mingw32-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I/home/dev1usr/Project/NHI1/theLink/sqlite -I../..   -D_DEBUG -D_HAVE_SQLITE_CONFIG_H  -g -Wall -Wcast-align -g -O2 -MT libtmp_la-sqlite3.lo -MD -MP -MF .deps/libtmp_la-sqlite3.Tpo -c -o libtmp_la-sqlite3.lo `test -f 'sqlite3.c' || echo '/home/dev1usr/Project/NHI1/theLink/sqlite/'`sqlite3.c
>> /bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-w64-mingw32-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I/home/dev1usr/Project/NHI1/theLink/sqlite -I../..   -D_DEBUG -D_HAVE_SQLITE_CONFIG_H -static  -g -Wall -Wcast-align -g -O2 -MT libtmps_la-sqlite3.lo -MD -MP -MF .deps/libtmps_la-sqlite3.Tpo -c -o libtmps_la-sqlite3.lo `test -f 'sqlite3.c' || echo '/home/dev1usr/Project/NHI1/theLink/sqlite/'`sqlite3.c
>> libtool: compile:  x86_64-w64-mingw32-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I/home/dev1usr/Project/NHI1/theLink/sqlite -I../.. -D_DEBUG -D_HAVE_SQLITE_CONFIG_H -g -Wall -Wcast-align -g -O2 -MT libtmps_la-sqlite3.lo -MD -MP -MF .deps/libtmps_la-sqlite3.Tpo -c /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c -o libtmps_la-sqlite3.o
>> libtool: compile:  x86_64-w64-mingw32-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I/home/dev1usr/Project/NHI1/theLink/sqlite -I../.. -D_DEBUG -D_HAVE_SQLITE_CONFIG_H -g -Wall -Wcast-align -g -O2 -MT libtmp_la-sqlite3.lo -MD -MP -MF .deps/libtmp_la-sqlite3.Tpo -c /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c  -DDLL_EXPORT -DPIC -o .libs/libtmp_la-sqlite3.o
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c: In function 'memTracePrint':
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c:63824:5: warning: unknown conversion type character 'l' in format
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c:63824:5: warning: too many arguments for format
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c:63826:5: warning: unknown conversion type character 'l' in format
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c:63826:5: warning: too many arguments for format
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c: In function 'memTracePrint':
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c:63824:5: warning: unknown conversion type character 'l' in format
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c:63824:5: warning: too many arguments for format
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c:63826:5: warning: unknown conversion type character 'l' in format
>> /home/dev1usr/Project/NHI1/theLink/sqlite/sqlite3.c:63826:5: warning: too many arguments for format
>> mv -f .deps/libtmp_la-sqlite3.Tpo .deps/libtmp_la-sqlite3.Plo
>> /bin/sh ../../libtool --tag=CC    --mode=link x86_64-w64-mingw32-gcc -std=gnu99 -D_HAVE_SQLITE_CONFIG_H   -g -Wall -Wcast-align -g -O2 -o libtmp.la  libtmp_la-sqlite3.lo
>> mv -f .deps/libtmps_la-sqlite3.Tpo .deps/libtmps_la-sqlite3.Plo
>> /bin/sh ../../libtool --tag=CC    --mode=link x86_64-w64-mingw32-gcc -std=gnu99 -D_HAVE_SQLITE_CONFIG_H -static   -g -Wall -Wcast-align -g -O2 -static  -o libtmps.la  libtmps_la-sqlite3.lo
>> libtool: link: ar cru .libs/libtmps.a  libtmps_la-sqlite3.o
>> libtool: link: ranlib .libs/libtmps.a
>> libtool: link: ( cd ".libs" && rm -f "libtmps.la" && ln -s "../libtmps.la" "libtmps.la" )
>>
>> HANG
>>
>> now with a littel bit debugging
>>
>>> $ sh -xv ../../libtool --tag=CC    --mode=link x86_64-w64-mingw32-gcc -std=gnu99 -D_HAVE_SQLITE_CONFIG_H   -g -Wall -Wcast-align -g -O2   -o libtmp.la  libtmp_la-sqlite3.lo
>> + func_dirname_result=
>> + xdir=
>> + test .libs/libtmp_la-sqlite3.o '!=' none
>> + pic_object=.libs/libtmp_la-sqlite3.o
>> + test '' = dlfiles
>> + test '' = dlprefiles
>> + libobjs+=' .libs/libtmp_la-sqlite3.o'
>> + arg=.libs/libtmp_la-sqlite3.o
>> + test none '!=' none
>> + non_pic_object=.libs/libtmp_la-sqlite3.o
>> + non_pic_objects+=' .libs/libtmp_la-sqlite3.o'
>> + test -n .libs/libtmp_la-sqlite3.o
>> + compile_command+=' .libs/libtmp_la-sqlite3.o'
>> + finalize_command+=' .libs/libtmp_la-sqlite3.o'
>> + test 0 -gt 0
>> + test -n ''
>> + test no = yes
>> + oldlibs=
>> + func_basename libtmp.la
>> + func_basename_result=libtmp.la
>> + outputname=libtmp.la
>> + libobjs_save=' .libs/libtmp_la-sqlite3.o'
>> + test -n PATH
>> + eval 'shlib_search_path=`$ECHO' '"${PATH}"' '|' '$SED' ''\''s/:/' '/g'\''`'
>> shlib_search_path=`$ECHO "${PATH}" | $SED 's/:/ /g'`
>> $ECHO "${PATH}" | $SED 's/:/ /g'
>> +++ printf '%s\n' '/usr/local/bin:/usr/bin:/cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files/Broadcom/Broadcom 802.11/Driver:/cygdrive/c/Program Files (x86)/ATI Technologies/ATI.ACE/Core-Static'
>> +++ /usr/bin/sed 's/:/ /g'
>> ++ shlib_search_path='/usr/local/bin /usr/bin /cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live /cygdrive/c/Windows/system32 /cygdrive/c/Windows /cygdrive/c/Windows/System32/Wbem /cygdrive/c/Windows/System32/WindowsPowerShell/v1.0 /cygdrive/c/Program Files/Broadcom/Broadcom 802.11/Driver /cygdrive/c/Program Files (x86)/ATI Technologies/ATI.ACE/Core-Static'
>> + eval 'sys_lib_search_path="/usr/x86_64-w64-mingw32/lib64' /usr/x86_64-w64-mingw32/sys-root/mingw/lib '"'
>> sys_lib_search_path="/usr/x86_64-w64-mingw32/lib64 /usr/x86_64-w64-mingw32/sys-root/mingw/lib "
>> ++ sys_lib_search_path='/usr/x86_64-w64-mingw32/lib64 /usr/x86_64-w64-mingw32/sys-root/mingw/lib '
>> + eval 'sys_lib_dlsearch_path="/lib' '/usr/lib"'
>> sys_lib_dlsearch_path="/lib /usr/lib"
>> ++ sys_lib_dlsearch_path='/lib /usr/lib'
>> + func_dirname libtmp.la / ''
>> + case ${1} in
>> + func_dirname_result=
>> + output_objdir=.libs
>> + func_to_tool_file .libs/
>> + :
>> + case ,$2, in
>> + func_convert_file_msys_to_w32 .libs/
>> + :
>> + func_to_host_file_result=.libs/
>> + test -n .libs/
>> + func_convert_core_msys_to_w32 .libs/
>> + :
>> ( cmd //c echo "$1" ) 2>/dev/null |
>>      $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"
>> ++ /usr/bin/sed -e 's/[ ]*$//' -e 's|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
>>
>> HANG
>>
>> => are you convinced?
>>
>>
>> mfg AO
>>
> No, not convinced.
>
> Your error is that you have specified --build incorrectly.
> You are building on Cygwin with a Cygwin-hosted compiler,
> which means that --build should be something-cygwin (but
> you should leave configure to autodetect the specifics).
> What you want to do is to specify --host=x86_64-w64-mingw32
> since you are building for a MinGW host.
>
> Cheers, and hope that helps,
> Peter
>

Stopp, you are right and not right at the same time.

I using cygwin to build a windows native library -> this mean WITHOUT 
any cygwin specific libraray
=> so, I'm using cygwin in cross-compiling mode ;-)

NOW i found the error (with the help of you)

I used "--build=x86_64-w64-mingw32" but I need 
"--host=x86_64-w64-mingw32" to enable
cross-compiling

to make this error not happen again, I add an error-ckeck to my 
"configure.ac" script

....
if test "$build_os" = "mingw32"; then
   AC_MSG_ERROR([as '--build=...' only cygwin is supported
   -> keep it unchanged if you are working in a cygwin toolchan
to enable cross-compiling mode you have to specify
   -> --host=x86_64-w64-mingw32])
elif test "$build_os" = "cygwin"; then
...

Thanks for your help.

mfg AO