Mercurial > octave
diff src/octave-config.in.cc @ 29540:b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
* configure.ac: Define macros necessary for Unicode support on Windows. Add
linker flags for Unicode executables with mingw.
* src/main-cli.cc, src/main-gui.cc, src/main.in.cc, src/mkoctfile.in.cc,
src/octave-config.in.cc, src/octave-svgconvert.cc: Optionally use "wmain"
instead of "main" as primary entry function.
* src/mkoctfile.in.cc (main, wmain): Use Unicode API to open pipe on Windows if
possible.
* src/module.mk: Use flags for linking with Unicode "wmain" function.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Sat, 17 Apr 2021 12:21:48 +0200 |
parents | 0a5b15007766 |
children | 8c8031be8072 |
line wrap: on
line diff
--- a/src/octave-config.in.cc Sat Apr 17 12:21:35 2021 +0200 +++ b/src/octave-config.in.cc Sat Apr 17 12:21:48 2021 +0200 @@ -35,6 +35,12 @@ #include <algorithm> #include <cstdlib> +#if defined (OCTAVE_USE_WINDOWS_API) +# include <vector> +# include <locale> +# include <codecvt> +#endif + #if ! defined (OCTAVE_PREFIX) # define OCTAVE_PREFIX %OCTAVE_PREFIX% #endif @@ -139,9 +145,28 @@ vars["STARTUPFILEDIR"] = prepend_octave_home (%OCTAVE_STARTUPFILEDIR%); } +#if defined (OCTAVE_USE_WINDOWS_API) && defined (_UNICODE) +extern "C" +int +wmain (int argc, wchar_t **wargv) +{ + static char **argv = new char * [argc + 1]; + std::vector<std::string> argv_str; + + // convert wide character strings to multibyte UTF-8 strings + std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> wchar_conv; + for (int i_arg = 0; i_arg < argc; i_arg++) + { + argv_str.push_back (wchar_conv.to_bytes (wargv[i_arg])); + argv[i_arg] = &argv_str[i_arg][0]; + } + argv[argc] = nullptr; + +#else int main (int argc, char **argv) { +#endif initialize (); if (argc == 1)