public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Iain Buclaw <ibuclaw@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/ibuclaw/heads/mingw)] Really fix hello world Date: Thu, 8 Apr 2021 13:36:07 +0000 (GMT) [thread overview] Message-ID: <20210408133607.086F03945C3A@sourceware.org> (raw) https://gcc.gnu.org/g:554b372620ff8ce54c2d5621579ddc28b8fdd1db commit 554b372620ff8ce54c2d5621579ddc28b8fdd1db Author: Iain Buclaw <ibuclaw@gdcproject.org> Date: Thu Mar 25 17:13:49 2021 +0100 Really fix hello world Diff: --- libphobos/configure | 74 -------------------- libphobos/configure.ac | 1 - libphobos/libdruntime/config/mingw/msvc.c | 17 +++-- libphobos/libdruntime/core/stdc/stdio.d | 108 +++++++++++++++++++++++++++--- libphobos/m4/druntime/libraries.m4 | 14 ---- 5 files changed, 110 insertions(+), 104 deletions(-) diff --git a/libphobos/configure b/libphobos/configure index 037b030a03e..59ca64aa1e0 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -15024,80 +15024,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - case "$druntime_cv_target_os" in - mingw*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing _fputc_nolock" >&5 -$as_echo_n "checking for library containing _fputc_nolock... " >&6; } -if ${ac_cv_search__fputc_nolock+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char _fputc_nolock (); -int -main () -{ -return _fputc_nolock (); - ; - return 0; -} -_ACEOF -for ac_lib in '' ucrtbase; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search__fputc_nolock=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search__fputc_nolock+:} false; then : - break -fi -done -if ${ac_cv_search__fputc_nolock+:} false; then : - -else - ac_cv_search__fputc_nolock=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search__fputc_nolock" >&5 -$as_echo "$ac_cv_search__fputc_nolock" >&6; } -ac_res=$ac_cv_search__fputc_nolock -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - - ;; - esac - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - druntime_check_both=no ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : diff --git a/libphobos/configure.ac b/libphobos/configure.ac index 4511cf3d79f..248d0ebbc19 100644 --- a/libphobos/configure.ac +++ b/libphobos/configure.ac @@ -159,7 +159,6 @@ WITH_LOCAL_DRUNTIME([ DRUNTIME_LIBRARIES_ATOMIC DRUNTIME_LIBRARIES_BACKTRACE DRUNTIME_LIBRARIES_DLOPEN -DRUNTIME_LIBRARIES_IO DRUNTIME_LIBRARIES_NET DRUNTIME_LIBRARIES_UCONTEXT DRUNTIME_LIBRARIES_ZLIB diff --git a/libphobos/libdruntime/config/mingw/msvc.c b/libphobos/libdruntime/config/mingw/msvc.c index 85ce3741bca..4ca77e58f5a 100644 --- a/libphobos/libdruntime/config/mingw/msvc.c +++ b/libphobos/libdruntime/config/mingw/msvc.c @@ -23,10 +23,13 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ +#ifdef __MINGW32__ +#include <_mingw.h> +#endif #include <stdio.h> -/* The symbols for stdin, stdout, and stderr are defined for D in the - core.stdc.stdio module. Save the macros and redeclare them here. */ +/* The D runtime library defines stdin, stdout, and stderr as extern(C) symbols + in the core.stdc.stdio module, and require initializing at start-up. */ __attribute__((weakref ("stdin"))) static FILE *core_stdc_stdin; @@ -36,16 +39,16 @@ static FILE *core_stdc_stdout; __attribute__((weakref ("stderr"))) static FILE *core_stdc_stderr; -/* Set to 1 if run-time is using ucrtbase.dll. */ +/* Set to 1 if runtime is using libucrt.dll. */ unsigned char msvcUsesUCRT; void init_msvc() { -#if __MSVCRT_VERSION__ >= 0x1400 - msvcUsedUCRT = 1; -#endif - core_stdc_stdin = stdin; core_stdc_stdout = stdout; core_stdc_stderr = stderr; + +#if __MSVCRT_VERSION__ >= 0xE00 + msvcUsedUCRT = 1; +#endif } diff --git a/libphobos/libdruntime/core/stdc/stdio.d b/libphobos/libdruntime/core/stdc/stdio.d index 532a0803f55..c4dce71f1e0 100644 --- a/libphobos/libdruntime/core/stdc/stdio.d +++ b/libphobos/libdruntime/core/stdc/stdio.d @@ -391,7 +391,21 @@ else version (CRuntime_Microsoft) /// struct _iobuf { + version (MinGW) + { + char* _ptr; + int _cnt; + char* _base; + int _flag; + int _file; + int _charbuf; + int _bufsiz; + char* _tmpfname; + } + else + { void* undefined; + } } /// @@ -1347,7 +1361,7 @@ version (CRuntime_DigitalMars) /// pure int fileno()(FILE* stream) { return stream._file; } } - /// + /// pragma(printf) int _snprintf(scope char* s, size_t n, scope const char* fmt, scope const ...); /// @@ -1358,6 +1372,25 @@ version (CRuntime_DigitalMars) int _vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg); /// alias _vsnprintf vsnprintf; + + // + // Digital Mars under-the-hood C I/O functions. + // + + /// + int _fputc_nlock(int c, FILE* fp); + /// + int _fputwc_nlock(int c, FILE* fp); + /// + int _fgetc_nlock(FILE* fp); + /// + int _fgetwc_nlock(FILE* fp); + /// + int __fp_lock(FILE* fp); + /// + void __fp_unlock(FILE* fp); + /// + int setmode(int fd, int mode); } else version (CRuntime_Microsoft) { @@ -1373,7 +1406,10 @@ else version (CRuntime_Microsoft) /// pure int ferror(FILE* stream); /// - pure int fileno(FILE* stream); + pure int _fileno(FILE* stream); + /// + alias fileno = _fileno; + } version (MinGW) @@ -1410,16 +1446,72 @@ else version (CRuntime_Microsoft) int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg); } + // + // Microsoft under-the-hood C I/O functions + // Uses _iobuf* for the unshared version of FILE*, + // usable when the FILE is locked. + // + + version (MinGW) + { + private int _filbuf(FILE*); + private int _flsbuf(int, FILE*); + /// - int _fputc_nolock(int c, FILE *fp); + int _fputc_nolock()(int c, FILE* fp) + { + pragma(inline, true); + fp._cnt = fp._cnt - 1; + if (fp._cnt >= 0) + { + immutable ch = cast(char)c; + *fp._ptr = ch; + fp._ptr = fp._ptr + 1; + return ch & 0xFF; + } + else + return _flsbuf(c, fp); + } /// - int _fgetc_nolock(FILE *fp); - + int _fgetc_nolock()(FILE* fp) + { + pragma(inline, true); + fp._cnt = fp._cnt - 1; + if (fp._cnt >= 0) + { + immutable ch = *fp._ptr; + fp._ptr = fp._ptr + 1; + return ch & 0xFF; + } + else + return _filbuf(fp); + } + } + else + { /// - int _lock_file(FILE *fp); + int _fputc_nolock(int c, FILE* fp); /// - int _unlock_file(FILE *fp); - + int _fgetc_nolock(FILE* fp); + } + /// + int _fputwc_nolock(int c, FILE* fp); + /// + int _fgetwc_nolock(FILE* fp); + /// + void _lock_file(FILE* fp); + /// + void _unlock_file(FILE* fp); + /// + int _setmode(int fd, int mode); + /// + FILE* _fdopen(int fd, const (char)* mode); + /// + FILE* _wfdopen(int fd, const (wchar)* mode); + /// + int _fseeki64(FILE* stream, long offset, int origin); + /// + long _ftelli64(FILE* stream); /// intptr_t _get_osfhandle(int fd); /// diff --git a/libphobos/m4/druntime/libraries.m4 b/libphobos/m4/druntime/libraries.m4 index 194602c1bf1..743d3e3e17c 100644 --- a/libphobos/m4/druntime/libraries.m4 +++ b/libphobos/m4/druntime/libraries.m4 @@ -233,17 +233,3 @@ AC_DEFUN([DRUNTIME_LIBRARIES_UCONTEXT], AC_MSG_ERROR([swapcontext required but not found])) fi ]) - -# DRUNTIME_LIBRARIES_IO -# ----------------------- -# Autodetect and add IO library to LIBS if necessary. -AC_DEFUN([DRUNTIME_LIBRARIES_IO], -[ - AC_LANG_PUSH([C]) - case "$druntime_cv_target_os" in - mingw*) - AC_SEARCH_LIBS([_fputc_nolock], [ucrtbase]) - ;; - esac - AC_LANG_POP([C]) -])
next reply other threads:[~2021-04-08 13:36 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-08 13:36 Iain Buclaw [this message] -- strict thread matches above, loose matches on Subject: below -- 2021-04-10 15:22 Iain Buclaw 2021-03-25 18:06 Iain Buclaw
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210408133607.086F03945C3A@sourceware.org \ --to=ibuclaw@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).