Menu

#2510 devnag.c treated as C++ and fails to compile

None
in-the-works
None
2016-07-14
2016-05-20
No

The devnag.c from MiKTeX Tools fails to compile when the character 0 as in err_ill('\0') is passed to err_ill: no known conversion from 'char' to 'const char *' for 1st argument void err_ill(const char *str);

The compiler additionally complains about

clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated

Below is the full error.

[ 26%] Building CXX object Programs/Converters/devnag/CMakeFiles/devnag.dir/source/src/devnag.c.o
cd /path/to/miktex/work/build/Programs/Converters/devnag && /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++   -DCPLUSPLUSMAIN -DHAVE_CONFIG_H -DMIKTEX -DMIKTEX_APP_SHARED -DMIKTEX_CORE_SHARED -DMIKTEX_MD5_SHARED -DMIKTEX_MPM_SHARED -DMIKTEX_TRACE_SHARED -DMIKTEX_UNIX -DMIKTEX_UTIL_SHARED -DUSE_MIKTEX_EXIT -Dmain=Main -I/path/to/miktex/work/miktex-2.9-2016-05-18/include -I/path/to/miktex/work/build/include -I/path/to/miktex/work/miktex-2.9-2016-05-18/Libraries/MiKTeX/App/include -I/path/to/miktex/work/build/Libraries/MiKTeX/Core/include -I/path/to/miktex/work/miktex-2.9-2016-05-18/Libraries/MiKTeX/Core/include -I/path/to/miktex/work/build/Libraries/3rd/md5/include -I/path/to/miktex/work/miktex-2.9-2016-05-18/Libraries/MiKTeX/Trace/include -I/path/to/miktex/work/miktex-2.9-2016-05-18/Libraries/MiKTeX/Util/include -I/path/to/miktex/work/build/Libraries/MiKTeX/PackageManager/include -I/path/to/miktex/work/miktex-2.9-2016-05-18/Libraries/MiKTeX/PackageManager/include  -pipe -Os -stdlib=libc++  -std=c++14 -DNDEBUG -arch x86_64 -mmacosx-version-min=10.11   -o CMakeFiles/devnag.dir/source/src/devnag.c.o -c /path/to/miktex/work/miktex-2.9-2016-05-18/Programs/Converters/devnag/source/src/devnag.c
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
/path/to/miktex/work/miktex-2.9-2016-05-18/Programs/Converters/devnag/source/src/devnag.c:1806:3: error: no matching function for
      call to 'err_ill'
         err_ill('\0');
         ^~~~~~~
/path/to/miktex/work/miktex-2.9-2016-05-18/Programs/Converters/devnag/source/src/devnag.c:379:6: note: candidate function not
      viable: no known conversion from 'char' to 'const char *' for 1st argument
void err_ill(const char *str);
     ^
/path/to/miktex/work/miktex-2.9-2016-05-18/Programs/Converters/devnag/source/src/devnag.c:1812:19: error: no matching function
      for call to 'err_ill'
         if (symbol < 0) err_ill('\0');  /* accented character inside dn mode */
                         ^~~~~~~
/path/to/miktex/work/miktex-2.9-2016-05-18/Programs/Converters/devnag/source/src/devnag.c:379:6: note: candidate function not
      viable: no known conversion from 'char' to 'const char *' for 1st argument
void err_ill(const char *str);
     ^

I tried to change CMakeLists.txt to use the C compiler rather than C++, but that didn't really help:

[ 26%] Linking CXX executable ../../../binlib/devnag
cd /path/to/miktex/work/build/Programs/Converters/devnag && /opt/local/bin/cmake -E cmake_link_script CMakeFiles/devnag.dir/link.txt --verbose=1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++   -pipe -Os -stdlib=libc++  -std=c++14 -DNDEBUG -arch x86_64 -mmacosx-version-min=10.11 -Wl,-search_paths_first -Wl,-headerpad_max_install_names  -L/opt/local/lib -Wl,-headerpad_max_install_names CMakeFiles/devnag.dir/__/__/__/Libraries/MiKTeX/etc/wrapper.cpp.o CMakeFiles/devnag.dir/source/src/devnag.c.o  -o ../../../binlib/devnag  ../../../binlib/libMiKTeX209-app.2.9.dylib ../../../binlib/libMiKTeX209-core.2.9.dylib ../../../binlib/libMiKTeX209-md5.2.9.dylib ../../../binlib/libMiKTeX209-trace.2.9.dylib ../../../binlib/libMiKTeX209-util.2.9.dylib ../../../binlib/libMiKTeX209-packagemanager.2.9.dylib -Wl,-rpath,"\$ORIGIN/../lib" 
Undefined symbols for architecture x86_64:
  "Main(int, char**)", referenced from:
      _main in wrapper.cpp.o
ld: symbol(s) not found for architecture x86_64

Discussion

  • Mojca Miklavec

    Mojca Miklavec - 2016-05-20

    For a temporary workaround I used:

    --- a/Programs/Converters/devnag/source/src/devnag.c
    +++ b/Programs/Converters/devnag/source/src/devnag.c
    @@ -1577,6 +1577,7 @@ void dnproc(void) {
        int test_val;                           /* Marc Csernel */
        char savchr = 0;
        char wrong[10];
    +   const char *empty = "";
        brace_lev = 1;
        saved = FALSE;
        dnready = FALSE;
    @@ -1803,13 +1804,13 @@ void dnproc(void) {
             }
             break;
            case ill_char:
    -        err_ill('\0');
    +        err_ill(empty);
             break;
            case end_of_file:
             fputs("Error: missing }", stderr);
             exit(1);
            default:
    -        if (symbol < 0) err_ill('\0');  /* accented character inside dn mode */
    +        if (symbol < 0) err_ill(empty);  /* accented character inside dn mode */
             i = 0;
             do { i++; } while ((i != 10) && (chset4[i-1] != symbol));
             if (i == 10) put_ch(symbol);
    
     
  • Mojca Miklavec

    Mojca Miklavec - 2016-05-20

    I'm sorry, this should be in bugs rather than in patches.

     
  • Christian Schenk

    Ticket moved from /p/miktex/patches/11/

    Can't be converted:

    • _milestone:
    • _priority: 1
     
  • Christian Schenk

    • status: open --> in-the-works
    • assigned_to: Christian Schenk
    • Milestone: --> None