That crazy cmake line certain did work to configure a cross-compile.  Someone needs to write that one down somewhere.

So, I've included <wchar.h> in filemgr.cpp and this seems to resolve this for mingw.  I get a bunch of .EXEs in utilities, so I think it worked.

I'll commit, and then go back and be sure I haven't broken the build on BCB.  I trust Microsoft VC++ has wchar.h available so it shouldn't break with the new change.

And now I think we have 3 Microsoft compilers building (I hesitate to say "working" until we get confirmation that app using pristine SWORD can indeed work in paths above UTF-8 single byte on Windows.

Thanks for your help Greg and Tobias.  It was great to have support through this long dreaded task.

Happy Monday!

Troy


On 7/27/20 7:57 AM, Greg Hellings wrote:
If you're missing dependencies you should be able to do, "dnf builddep mingw-sword".

--Greg

On Mon, Jul 27, 2020 at 1:33 AM Greg Hellings <greg.helli...@gmail.com <mailto:greg.helli...@gmail.com>> wrote:



    On Sun, Jul 26, 2020 at 4:56 PM Tobias Klein <cont...@tklein.info
    <mailto:cont...@tklein.info>> wrote:

        Hi Troy,

        The latest version builds successfully.

        I created a new intermediate release of sword-build-win32 for
        further testing on Windows:

    It's still failing for me trying to do a cross-compile with MinGW:

    [  6%] Building CXX object
    CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj
    /usr/bin/i686-w64-mingw32-g++ -DCLUCENE2 -DCURLAVAILABLE
    -DCURLSFTPAVAILABLE -DEXCLUDEBZIP2 -DEXCLUDEXZ
    -DGLOBCONFPATH=\"/usr/i686-w64-mingw32/sys-root/mingw/etc/sword.conf\"
    -DUSEICUREGEX -DUSELUCENE -DU_USING_ICU_NAMESPACE
    -D_FTPLIB_NO_COMPAT -D_ICU_ -Dsword_EXPORTS
    @CMakeFiles/sword.dir/includes_CXX.rsp -D_ICUSWORD_ -g3 -Wall -O0
    -D_ICUSWORD_ -o CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj -c
    /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp
    /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp: In static
    member function 'static int sword::FileMgr::createParent(const
    char*)':
    /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:439:5:
    error: '_wmkdir' was not declared in this scope; did you mean 'mkdir'?
      439 |     _wmkdir((const wchar_t *)utf8ToWChar(buf).getRawData());
          |     ^~~~~~~
          |     mkdir
    make[2]: *** [CMakeFiles/sword.dir/build.make:282:
    CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj] Error 1
    make[2]: Leaving directory
    '/builddir/build/BUILD/sword-1.8.900/build_win32'
    make[1]: Leaving directory
    '/builddir/build/BUILD/sword-1.8.900/build_win32'
    make[1]: *** [CMakeFiles/Makefile2:277: CMakeFiles/sword.dir/all]
    Error 2
    make: *** [Makefile:152: all] Error 2
    make: Leaving directory
    '/builddir/build/BUILD/sword-1.8.900/build_win32'

    Commands to do the build, from Fedora 32, include this lovely
    invocation of CMake from within a subfolder of the source
    (build_win32 for the above):
    /usr/bin/cmake
    -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw32.cmake
    -DBUILD_SHARED_LIBS:BOOL=ON
    -DSYSCONF_INSTALL_DIR:PATH=/usr/i686-w64-mingw32/sys-root/mingw/etc
    -DSHARE_INSTALL_PREFIX:PATH=/usr/i686-w64-mingw32/sys-root/mingw/share
    -DCMAKE_INSTALL_PREFIX:PATH=/usr/i686-w64-mingw32/sys-root/mingw
    -DCMAKE_INSTALL_LIBDIR:PATH=/usr/i686-w64-mingw32/sys-root/mingw/lib
    -DICU_CONFIG_BIN_PATH=/usr/i686-w64-mingw32/sys-root/mingw/bin
    -DINCLUDE_INSTALL_DIR:PATH=/usr/i686-w64-mingw32/sys-root/mingw/include
    -DCMAKE_VERBOSE_MAKEFILE=ON -DLIBSWORD_LIBRARY_TYPE=Shared
    -DSWORD_BUILD_EXAMPLES=Yes -DCMAKE_BUILD_TYPE=Debug
    -DICU_CONFIG_OPTS=--noverify -DCROSS_COMPILE_MINGW32=TRUE ..

    Followed by

    make

    --Greg

        
https://github.com/tobias-klein/sword-build-win32/releases/tag/v1.8.900-2020-07-26

        Best regards,
        Tobias

        On 7/26/20 8:37 PM, Troy A. Griffitts wrote:

        Thanks Tobias,

        I've made these updates and should have fixed the error in
        filemgr.cpp on line 410. I appreciate the feedback.  Please
        update and try this out and let me know.  Thanks for testing
        your compiler.

        Troy


        On 7/26/20 8:25 PM, Tobias Klein wrote:

        To address the errors below I had to add the include for
        <windows.h> both in *src/mgr/filemgr.cpp* and in
        *src/modules/commons/zipmgr.cpp*.

        After that I'm getting the next error:

        1>C:\Users\tobi\Dev\sword-build-win32\sword\src\mgr\filemgr.cpp(410):
        error C2664: 'BOOL
        FindNextFileA(HANDLE,LPWIN32_FIND_DATAA)': cannot convert
        argument 2 from 'WIN32_FIND_DATAW *' to 'LPWIN32_FIND_DATAA'
        1>C:\Users\tobi\Dev\sword-build-win32\sword\src\mgr\filemgr.cpp(410):
        note: Types pointed to are unrelated; conversion requires
        reinterpret_cast, C-style cast or function-style cast

        Best regards,
        Tobias

        On 7/26/20 4:44 PM, Troy A. Griffitts wrote:

        Can one of you guys try simply including <windows.h> at the
        top of filemgr.cpp and see if this fixes it for you?


        On 7/26/20 4:01 PM, Tobias Klein wrote:

        I'm getting similar error messages with Visual Studio
        2019. Note that I'm also generating the make files via CMake.

        First couple of error messages:

        
2>D:\a\sword-build-win32\sword-build-win32\sword\src\mgr\filemgr.cpp(395,2):
        error C2065: 'WIN32_FIND_DATAW': undeclared identifier
        
2>D:\a\sword-build-win32\sword-build-win32\sword\src\mgr\filemgr.cpp(395,19):
        error C2146: syntax error: missing ';' before identifier
        'fileData'

        
2>D:\a\sword-build-win32\sword-build-win32\sword\src\mgr\filemgr.cpp(395,19):
        error C2065: 'fileData': undeclared identifier

        
2>D:\a\sword-build-win32\sword-build-win32\sword\src\mgr\filemgr.cpp(398,2):
        error C2065: 'HANDLE': undeclared identifier

        
2>D:\a\sword-build-win32\sword-build-win32\sword\src\mgr\filemgr.cpp(398,9):
        error C2146: syntax error: missing ';' before identifier
        'findIterator'
        
2>D:\a\sword-build-win32\sword-build-win32\sword\src\mgr\filemgr.cpp(398,9):
        error C2065: 'findIterator': undeclared identifier
        
2>D:\a\sword-build-win32\sword-build-win32\sword\src\mgr\filemgr.cpp(398,51):
        error C2065: 'fileData': undeclared identifier


        Best regards,
        Tobias

        On 7/26/20 3:00 PM, Greg Hellings wrote:


        On Sun, Jul 26, 2020 at 6:42 AM Troy A. Griffitts
        <scr...@crosswire.org <mailto:scr...@crosswire.org>> wrote:

            I've just committed the last bit for fixing the WIN32
            Unicode issues.  If anyone can try compiling and
            running Xiphos without the Xiphos patch or any other
            projects for Windows, and let me know if things work
            for them in folders which include Unicode character,
            I would appreciate it.  I've tested BibleCS and it
            now works with a SWORD_PATH defined to /books/χαρις. 
            I've tested using and installing modules in this
            configuration and believe all the bugs are squashed,
            but I would love confirmation from other projects.

            Thanks for any feedback,

            Troy

        During cross-compile I'm getting the following errors:

        [  6%] Building CXX object
        CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj
        /usr/bin/i686-w64-mingw32-g++  -DCLUCENE2 -DCURLAVAILABLE
        -DCURLSFTPAVAILABLE -DEXCLUDEBZIP2 -DEXCLUDEXZ
        -DGLOBCONFPATH=\"/usr/i686-w64-mingw32/sys-root/mingw/etc/sword.conf\"
        -DUSEICUREGEX -DUSELUCENE -DU_USING_ICU_NAMESPACE
        -D_FTPLIB_NO_COMPAT -D_ICU_ -Dsword_EXPORTS
        @CMakeFiles/sword.dir/includes_CXX.rsp -D_ICUSWORD_ -g3
        -Wall -O0 -D_ICUSWORD_   -o
        CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj -c
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:
        In static member function 'static
        std::vector<sword::DirEntry>
        sword::FileMgr::getDirList(const char*, bool, bool)':
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:395:2:
        error: 'WIN32_FIND_DATAW' was not declared in this scope
          395 |  WIN32_FIND_DATAW fileData;
              |  ^~~~~~~~~~~~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:398:2:
        error: 'HANDLE' was not declared in this scope
          398 |  HANDLE findIterator = FindFirstFileW(wcharPath,
        &fileData);
              |  ^~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:399:6:
        error: 'findIterator' was not declared in this scope
          399 |  if (findIterator != INVALID_HANDLE_VALUE) {
              |      ^~~~~~~~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:399:22:
        error: 'INVALID_HANDLE_VALUE' was not declared in this scope
          399 |  if (findIterator != INVALID_HANDLE_VALUE) {
              |  ^~~~~~~~~~~~~~~~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:401:35:
        error: 'fileData' was not declared in this scope
          401 |    SWBuf dirEntName =
        wcharToUTF8(fileData.cFileName);
              |       ^~~~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:405:49:
        error: 'FILE_ATTRIBUTE_DIRECTORY' was not declared in
        this scope
          405 |     i.isDirectory = fileData.dwFileAttributes &
        FILE_ATTRIBUTE_DIRECTORY;
              | ^~~~~~~~~~~~~~~~~~~~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:409:40:
        error: 'fileData' was not declared in this scope
          409 |   } while (FindNextFile(findIterator, &fileData)
        != 0);
              |            ^~~~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:409:12:
        error: 'FindNextFile' was not declared in this scope
          409 |   } while (FindNextFile(findIterator, &fileData)
        != 0);
              |            ^~~~~~~~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:410:3:
        error: 'FindClose' was not declared in this scope; did
        you mean '_findclose'?
          410 |   FindClose(findIterator);
              |   ^~~~~~~~~
              |   _findclose
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:397:17:
        warning: unused variable 'wcharPath' [-Wunused-variable]
          397 |  const wchar_t *wcharPath = (const wchar_t
        *)wcharBuf.getRawData();
              |                 ^~~~~~~~~
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:
        In static member function 'static int
        sword::FileMgr::createParent(const char*)':
        /builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:436:5:
        error: '_wmkdir' was not declared in this scope; did you
        mean 'mkdir'?
          436 |     _wmkdir((const wchar_t
        *)utf8ToWChar(buf).getRawData());
              |     ^~~~~~~
              |     mkdir
        make[2]: *** [CMakeFiles/sword.dir/build.make:283:
        CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj] Error 1

        I'm assuming there's a new package or macro I need to
        define? On my system the WIN32_FIND_DATAW struct is
        defined in both minwinbase.h and shtypes.h. I'm building
        with MinGW which might have a different header structure
        than your compilers, if you're using Borland?

        --Greg


            On 7/20/20 7:18 PM, Greg Hellings wrote:
            Sorry for the previous blank email - user error when
            I tried to reply:

            On Sun, Jul 19, 2020 at 2:40 PM Tobias Klein
            <cont...@tklein.info <mailto:cont...@tklein.info>>
            wrote:

                Thanks for giving me the background on this,
                Karl! I appreciate it!

                Is Xiphos the only frontend that has been
                patching Sword for this purpose? Then I suppose
                all other frontends suffer from this issue, huh?


            When I first encountered this patch in Xiphos I
            tested with BibleTime and The Sword Project for
            Windows and both of them do crash under these
            circumstances.

            Yes, other toolkits such as Qt do have wrappers for
            this shortcoming already, but none of the other
            front ends I've worked with have bothered to put in
            the effort to produce a patched version of Sword to
            fix the crash.

            --Greg

            _______________________________________________
            sword-devel mailing list:sword-devel@crosswire.org  
<mailto:sword-devel@crosswire.org>
            http://www.crosswire.org/mailman/listinfo/sword-devel
            Instructions to unsubscribe/change your settings at above page
            _______________________________________________
            sword-devel mailing list: sword-devel@crosswire.org
            <mailto:sword-devel@crosswire.org>
            http://www.crosswire.org/mailman/listinfo/sword-devel
            Instructions to unsubscribe/change your settings at
            above page


        _______________________________________________
        sword-devel mailing list:sword-devel@crosswire.org  
<mailto:sword-devel@crosswire.org>
        http://www.crosswire.org/mailman/listinfo/sword-devel
        Instructions to unsubscribe/change your settings at above page

        _______________________________________________
        sword-devel mailing list:sword-devel@crosswire.org  
<mailto:sword-devel@crosswire.org>
        http://www.crosswire.org/mailman/listinfo/sword-devel
        Instructions to unsubscribe/change your settings at above page

        _______________________________________________
        sword-devel mailing list:sword-devel@crosswire.org  
<mailto:sword-devel@crosswire.org>
        http://www.crosswire.org/mailman/listinfo/sword-devel
        Instructions to unsubscribe/change your settings at above page

        _______________________________________________
        sword-devel mailing list:sword-devel@crosswire.org  
<mailto:sword-devel@crosswire.org>
        http://www.crosswire.org/mailman/listinfo/sword-devel
        Instructions to unsubscribe/change your settings at above page

        _______________________________________________
        sword-devel mailing list:sword-devel@crosswire.org  
<mailto:sword-devel@crosswire.org>
        http://www.crosswire.org/mailman/listinfo/sword-devel
        Instructions to unsubscribe/change your settings at above page
        _______________________________________________
        sword-devel mailing list: sword-devel@crosswire.org
        <mailto:sword-devel@crosswire.org>
        http://www.crosswire.org/mailman/listinfo/sword-devel
        Instructions to unsubscribe/change your settings at above page


_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page
_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page

Reply via email to