1# asm-underscore.m4 serial 4 2dnl Copyright (C) 2010-2020 Free Software Foundation, Inc. 3dnl This file is free software; the Free Software Foundation 4dnl gives unlimited permission to copy and/or distribute it, 5dnl with or without modifications, as long as this notice is preserved. 6 7dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp. 8 9# gl_ASM_SYMBOL_PREFIX 10# Tests for the prefix of C symbols at the assembly language level and the 11# linker level. This prefix is either an underscore or empty. Defines the 12# C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to 13# a stringified variant of this prefix. 14 15AC_DEFUN([gl_ASM_SYMBOL_PREFIX], 16[ 17 AC_REQUIRE([AC_PROG_EGREP]) 18 dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because 19 dnl 1. It works only for GCC. 20 dnl 2. It is incorrectly defined on some platforms, in some GCC versions. 21 AC_REQUIRE([gl_C_ASM]) 22 AC_CACHE_CHECK( 23 [whether C symbols are prefixed with underscore at the linker level], 24 [gl_cv_prog_as_underscore], 25 [cat > conftest.c <<EOF 26#ifdef __cplusplus 27extern "C" int foo (void); 28#endif 29int foo(void) { return 0; } 30EOF 31 # Look for the assembly language name in the .s file. 32 AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 33 if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then 34 gl_cv_prog_as_underscore=yes 35 else 36 gl_cv_prog_as_underscore=no 37 fi 38 rm -f conftest* 39 ]) 40 if test $gl_cv_prog_as_underscore = yes; then 41 USER_LABEL_PREFIX=_ 42 else 43 USER_LABEL_PREFIX= 44 fi 45 AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX], 46 [Define to the prefix of C symbols at the assembler and linker level, 47 either an underscore or empty.]) 48 ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' 49 AC_SUBST([ASM_SYMBOL_PREFIX]) 50]) 51 52# gl_C_ASM 53# Determines how to produce an assembly language file from C source code. 54# Sets the variables: 55# gl_asmext - the extension of assembly language output, 56# gl_c_asm_opt - the C compiler option that produces assembly language output. 57 58AC_DEFUN([gl_C_ASM], 59[ 60 AC_EGREP_CPP([MicrosoftCompiler], 61 [ 62#ifdef _MSC_VER 63MicrosoftCompiler 64#endif 65 ], 66 [gl_asmext='asm' 67 gl_c_asm_opt='-c -Fa' 68 ], 69 [gl_asmext='s' 70 gl_c_asm_opt='-S' 71 ]) 72]) 73