o c*@s"ddlZddlZddlZddlmZmZddlmZmZddl m Z ddl m Z m Z mZddlmZmZddlmZmZmZddlmZdd lmZmZdd lmZdd d ZdatadZddZeZGdddeZ Gddde Z!Gddde Z"Gddde Z#GdddZ$ddZ%dS)N)mkstempmkdtemp)PopenPIPE)DistutilsError)assert_ assert_equal assert_raises) ccompilercustomized_ccompiler) system_info ConfigParsermkl_info)AliasedOptionError)default_lib_dirsdefault_include_dirs) _shell_utilscCstttd|t}|S)zg notfound_action: 0 - do nothing 1 - display warning message 2 - raise error )temp1temp2duplicate_options) Temp1Info Temp2InfoDuplicateOptionInfogetlower _system_info)namenotfound_actionclr H/usr/lib/python3/dist-packages/numpy/distutils/tests/test_system_info.py get_classs r"a [ALL] library_dirs = {dir1:s}{pathsep:s}{dir2:s} libraries = {lib1:s},{lib2:s} extra_compile_args = -I/fake/directory -I"/path with/spaces" -Os runtime_library_dirs = {dir1:s} [temp1] library_dirs = {dir1:s} libraries = {lib1:s} runtime_library_dirs = {dir1:s} [temp2] library_dirs = {dir2:s} libraries = {lib2:s} extra_link_args = -Wl,-rpath={lib2_escaped:s} rpath = {dir2:s} [duplicate_options] mylib_libs = {lib1:s} libraries = {lib2:s} z /* This file is generated from numpy/distutils/testing/test_system_info.py */ #include void foo(void) { printf("Hello foo"); } void bar(void) { printf("Hello bar"); } c Cst}z|j}Wn$ty,z |js|Wn ttfy%YYdSw|jg}Ynwzt|t t d}|j |j | WdStyOYdSw)z? Return True if there appears to be an executable compiler F)stdoutstderrT)r compilerAttributeError initialized initializer ValueErrorccrrr#closer$waitOSError)r%cmdpr r r! have_compiler@s,       r0c@s$eZdZeedfddZddZdS)rrc Cs2i|j_g|_ddddddddd}t||_dS)N0) library_dirs include_dirsruntime_library_dirsrpathsrc_dirssearch_static_firstextra_compile_argsextra_link_args) __class__infolocal_prefixesr cp)selfrr verbositydefaultsr r r!__init__\sz_system_info.__init__cCs||d}|S)z-Override _check_libs to return with all dirs ) librariesr3r )r?lib_dirslibsopt_libsextsr<r r r! _check_libsos z_system_info._check_libsN)__name__ __module__ __qualname__rrrBrHr r r r!rZs  rc@eZdZdZdZdS)rFor testing purposesrNrIrJrK__doc__sectionr r r r!rurc@rL)rrMrNrNr r r r!rzrQrc@rL)rrMrNrNr r r r!r~rQrc@seZdZddZddZddZddZd d Zd d Ze j j e d de j j ddddZe j j e d de j j deevdde j j ddddZddZdS)TestSystemInfoReadingc Cst|_tj|jd|_tj|jd|_t|_tj|jd|_tj|jd|_ t j di|j|j|j|j tj t j|j gdat\}|_t|t|jd }|tWdn1sgwYt|jd }|tWdn1swYt|jd }|tWdn1swYdd }|td |j|_|td |j|_|td |j|_|td |j|_dS)z Create the libraries zfoo.cz libfoo.sozbar.cz libbar.so)dir1lib1dir2lib2pathsep lib2_escapedwNcSs|g|_||SN)filesparse_config_files)csite_cfgr r r!site_and_parsesz3TestSystemInfoReading.setup..site_and_parsedefaultrrrr )r_dir1ospathjoin_src1_lib1_dir2_src2_lib2 simple_siteformatrWr NativeParserr^r_sitecfgr+openwritefakelib_c_textr" c_defaultc_temp1c_temp2 c_dup_options)r?fdr_r r r!setups@     zTestSystemInfoReading.setupcCspzt|jWn tyYnwzt|jWn ty#Ynwz t|jWdSty7YdSwrZ)shutilrmtreera Exceptionrgrbremoverm)r?r r r!teardowns   zTestSystemInfoReading.teardowncCsb|j}t||j|jgt||j|jgt||jg| }t|dgddS)Nr9)z-I/fake/directoryz-I/path with/spacesz-Os) rqr get_lib_dirsrarg get_librariesrfriget_runtime_lib_dirscalc_extra_infor?tsiextrar r r!test_alls zTestSystemInfoReading.test_allcCs@|j}t||jgt||jgt||jgdSrZ)rrrr|rar}rfr~r?rr r r! test_temp1sz TestSystemInfoReading.test_temp1cCsb|j}t||jgt||jgt|jdd|jg|}t|dd|jgdS)Nr6)keyr:z -Wl,-rpath=)rsrr|rgr}rir~rrr r r! test_temp2s z TestSystemInfoReading.test_temp2cCsN|j}tt|jddt|d|jg|jgt|d|jg|jgdS)N mylib_libsrC)rtr rget_option_singlerget_libsrfrirr r r!test_duplicate_optionssz,TestSystemInfoReading.test_duplicate_optionszMissing compiler)reasonz,Debian: disabled as we cant properly compilec Cst}t}z4t|j|jtj|jg|jdt tj |j ddp2tj |j ddWt|dSt|w)N) output_dir.c.oz.obj) r rbgetcwdchdirracompilercbasenamererisfilereplace)r?r] previousDirr r r! test_compile1s z#TestSystemInfoReading.test_compile1msvczFails with MSVC compiler c Cs|j}t}|d}t}z*t|j|jtj |j g|j|dt tj |j ddWt|dSt|w)Nr:)rextra_postargsrr)rsr rrbrrrgrrcrrhrrr)r?rr]r:rr r r! test_compile2s  z#TestSystemInfoReading.test_compile2c Cst}tj|jd}t|j|zt|jt }|j dd tj }| |ks0Jt|d}|ddd}Wdn1sIwYt|d }||Wdn1scwYt }| |kssJt|d}|dd d}Wdn1swYt|d }||Wdn1swYt }| |ksJWt|dSt|w) Nzsite.cfgALLr3rz[ALL]z[mkl]rrYz [DEFAULT])rbrrcrdrarwcopyrmrrr>splitrWr|rnreadrro)r?rcfgr<rDfidmkldfltr r r!test_overridess2       z$TestSystemInfoReading.test_overridesN)rIrJrKrvr{rrrrpytestmarkskipif HAVE_COMPILERskiprreprr new_compilerrrr r r r!rRs"*      rRcCs|ddlm}d}td}||d|||\}}t|dks!J|tdks)Jt|dks1J||d |||\}}t|dksFJt|dksNJd D]*}|||d |||\}}t|d ksjJ|td ksrJt|dkszJqPtt||d|||Wdn1swYtt||d|||WddS1swYdS)Nr)_parse_env_order#NPY_TESTS_DISTUTILS_PARSE_ENV_ORDERabcdefzb,i,e,fbefrr1z^!zb,i,eacdfzb,^e,iz!b,^e,i)numpy.distutils.system_inforlistsetenvlenrraisesr)) monkeypatchrenv base_orderorderunknownprefixr r r!test_distutils_parse_env_order#s4         "r)r)&rbrwrtempfilerr subprocessrrdistutils.errorsr numpy.testingrrr numpy.distutilsr r rr r rrrrrr"rjr^rpr0rrrrrrRrr r r r!s2       !