bpo-35903: Use autoconfig to probe for shm_open() and shm_unlink(). (#11765)
Use autoconfig to probe for shm_open() and shm_unlink(). Set SHM_NEEDS_LIBRT if we must link with librt to get the shm_* functions. Change setup.py to use the autoconfig defines. These changes should make it more likely that _multiprocessing/posixshmem.c gets built correctly on different platforms.
This commit is contained in:
parent
64360ada0f
commit
5741c45acf
|
@ -16862,6 +16862,108 @@ $as_echo "#define HAVE_GETRANDOM 1" >>confdefs.h
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# checks for POSIX shared memory, used by Modules/_multiprocessing/posixshmem.c
|
||||||
|
# shm_* may only be available if linking against librt
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
save_includes_default="$ac_includes_default"
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shm_open" >&5
|
||||||
|
$as_echo_n "checking for library containing shm_open... " >&6; }
|
||||||
|
if ${ac_cv_search_shm_open+:} 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 shm_open ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return shm_open ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
for ac_lib in '' rt; 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_shm_open=$ac_res
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext
|
||||||
|
if ${ac_cv_search_shm_open+:} false; then :
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if ${ac_cv_search_shm_open+:} false; then :
|
||||||
|
|
||||||
|
else
|
||||||
|
ac_cv_search_shm_open=no
|
||||||
|
fi
|
||||||
|
rm conftest.$ac_ext
|
||||||
|
LIBS=$ac_func_search_save_LIBS
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shm_open" >&5
|
||||||
|
$as_echo "$ac_cv_search_shm_open" >&6; }
|
||||||
|
ac_res=$ac_cv_search_shm_open
|
||||||
|
if test "$ac_res" != no; then :
|
||||||
|
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$ac_cv_search_shm_open" = "-lrt"; then
|
||||||
|
|
||||||
|
$as_echo "#define SHM_NEEDS_LIBRT 1" >>confdefs.h
|
||||||
|
|
||||||
|
fi
|
||||||
|
for ac_header in sys/mman.h
|
||||||
|
do :
|
||||||
|
ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
|
||||||
|
if test "x$ac_cv_header_sys_mman_h" = xyes; then :
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define HAVE_SYS_MMAN_H 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
# temporarily override ac_includes_default for AC_CHECK_FUNCS below
|
||||||
|
ac_includes_default="\
|
||||||
|
${ac_includes_default}
|
||||||
|
#ifndef __cplusplus
|
||||||
|
# ifdef HAVE_SYS_MMAN_H
|
||||||
|
# include <sys/mman.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
"
|
||||||
|
for ac_func in shm_open shm_unlink
|
||||||
|
do :
|
||||||
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
|
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||||
|
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# we don't want to link with librt always, restore LIBS
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
ac_includes_default="$save_includes_default"
|
||||||
|
|
||||||
# Check for usable OpenSSL
|
# Check for usable OpenSSL
|
||||||
|
|
||||||
found=false
|
found=false
|
||||||
|
|
24
configure.ac
24
configure.ac
|
@ -5443,6 +5443,30 @@ if test "$have_getrandom" = yes; then
|
||||||
[Define to 1 if the getrandom() function is available])
|
[Define to 1 if the getrandom() function is available])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# checks for POSIX shared memory, used by Modules/_multiprocessing/posixshmem.c
|
||||||
|
# shm_* may only be available if linking against librt
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
save_includes_default="$ac_includes_default"
|
||||||
|
AC_SEARCH_LIBS(shm_open, rt)
|
||||||
|
if test "$ac_cv_search_shm_open" = "-lrt"; then
|
||||||
|
AC_DEFINE(SHM_NEEDS_LIBRT, 1,
|
||||||
|
[Define to 1 if you must link with -lrt for shm_open().])
|
||||||
|
fi
|
||||||
|
AC_CHECK_HEADERS(sys/mman.h)
|
||||||
|
# temporarily override ac_includes_default for AC_CHECK_FUNCS below
|
||||||
|
ac_includes_default="\
|
||||||
|
${ac_includes_default}
|
||||||
|
#ifndef __cplusplus
|
||||||
|
# ifdef HAVE_SYS_MMAN_H
|
||||||
|
# include <sys/mman.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
"
|
||||||
|
AC_CHECK_FUNCS([shm_open shm_unlink])
|
||||||
|
# we don't want to link with librt always, restore LIBS
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
ac_includes_default="$save_includes_default"
|
||||||
|
|
||||||
# Check for usable OpenSSL
|
# Check for usable OpenSSL
|
||||||
AX_CHECK_OPENSSL([have_openssl=yes],[have_openssl=no])
|
AX_CHECK_OPENSSL([have_openssl=yes],[have_openssl=no])
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,18 @@
|
||||||
/* Define to 1 if you have the `copysign' function. */
|
/* Define to 1 if you have the `copysign' function. */
|
||||||
#undef HAVE_COPYSIGN
|
#undef HAVE_COPYSIGN
|
||||||
|
|
||||||
|
/* Define to 1 if you must link with -lrt for shm_open(). */
|
||||||
|
#undef SHM_NEEDS_LIBRT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/mman.h> header file. */
|
||||||
|
#undef HAVE_SYS_MMAN_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the shm_open syscall */
|
||||||
|
#undef HAVE_SHM_OPEN
|
||||||
|
|
||||||
|
/* Define to 1 if you have the shm_unlink syscall */
|
||||||
|
#undef HAVE_SHM_UNLINK
|
||||||
|
|
||||||
/* Define to 1 if you have the <crypt.h> header file. */
|
/* Define to 1 if you have the <crypt.h> header file. */
|
||||||
#undef HAVE_CRYPT_H
|
#undef HAVE_CRYPT_H
|
||||||
|
|
||||||
|
|
7
setup.py
7
setup.py
|
@ -1592,12 +1592,13 @@ class PyBuildExt(build_ext):
|
||||||
if (sysconfig.get_config_var('HAVE_SEM_OPEN') and not
|
if (sysconfig.get_config_var('HAVE_SEM_OPEN') and not
|
||||||
sysconfig.get_config_var('POSIX_SEMAPHORES_NOT_ENABLED')):
|
sysconfig.get_config_var('POSIX_SEMAPHORES_NOT_ENABLED')):
|
||||||
multiprocessing_srcs.append('_multiprocessing/semaphore.c')
|
multiprocessing_srcs.append('_multiprocessing/semaphore.c')
|
||||||
if (self.compiler.find_library_file(lib_dirs, 'rt') or
|
if (sysconfig.get_config_var('HAVE_SHM_OPEN') and
|
||||||
host_platform != 'cygwin'):
|
sysconfig.get_config_var('HAVE_SHM_UNLINK')):
|
||||||
posixshmem_srcs = [ '_multiprocessing/posixshmem.c',
|
posixshmem_srcs = [ '_multiprocessing/posixshmem.c',
|
||||||
]
|
]
|
||||||
libs = []
|
libs = []
|
||||||
if self.compiler.find_library_file(lib_dirs, 'rt'):
|
if sysconfig.get_config_var('SHM_NEEDS_LIBRT'):
|
||||||
|
# need to link with librt to get shm_open()
|
||||||
libs.append('rt')
|
libs.append('rt')
|
||||||
exts.append( Extension('_posixshmem', posixshmem_srcs,
|
exts.append( Extension('_posixshmem', posixshmem_srcs,
|
||||||
define_macros={},
|
define_macros={},
|
||||||
|
|
Loading…
Reference in New Issue