diff --git a/pkgs/development/libraries/science/math/atlas/default.nix b/pkgs/development/libraries/science/math/atlas/default.nix index f4bda4f4735..6eb72f2ed64 100644 --- a/pkgs/development/libraries/science/math/atlas/default.nix +++ b/pkgs/development/libraries/science/math/atlas/default.nix @@ -63,7 +63,8 @@ stdenv.mkDerivation { # performance timings. We ignore that check, however, because with binaries # being pre-built on Hydra those timings aren't accurate for the local # machine in the first place. - patches = optional tolerateCpuTimingInaccuracy ./disable-timing-accuracy-check.patch; + patches = optional tolerateCpuTimingInaccuracy ./disable-timing-accuracy-check.patch + ++ optional stdenv.isDarwin ./tmpdir.patch; # Configure outside of the source directory. preConfigure = '' diff --git a/pkgs/development/libraries/science/math/atlas/tmpdir.patch b/pkgs/development/libraries/science/math/atlas/tmpdir.patch new file mode 100644 index 00000000000..be571b94300 --- /dev/null +++ b/pkgs/development/libraries/science/math/atlas/tmpdir.patch @@ -0,0 +1,276 @@ +diff --git a/CONFIG/ARCHS/negflt.c b/CONFIG/ARCHS/negflt.c +index e5b7871..d45e387 100644 +--- a/CONFIG/ARCHS/negflt.c ++++ b/CONFIG/ARCHS/negflt.c +@@ -239,7 +239,7 @@ void NegFile(char *fnam, int N, int *cols) + FILE *fpin, *fpout; + WORDS *wp0, *wp; + +- tnam = tmpnam(NULL); ++ tnam = tempnam(NULL, NULL); + fpin = fopen(fnam, "r"); + assert(fpin); + fpout = fopen(tnam, "w"); +diff --git a/CONFIG/include/atlas_sys.h b/CONFIG/include/atlas_sys.h +index b83a749..8902d38 100644 +--- a/CONFIG/include/atlas_sys.h ++++ b/CONFIG/include/atlas_sys.h +@@ -216,12 +216,13 @@ static char *ATL_fgets_CWS(char *sout, int *plen, FILE *fpin) + + static char *ATL_tmpnam(void) + { +- static char tnam[L_tmpnam]; ++ static char *tnam; + static char FirstTime=1; + if (FirstTime) + { + FirstTime = 0; +- assert(tmpnam(tnam)); ++ tnam = tempnam(NULL, NULL); ++ assert(tnam); + } + return(tnam); + } +diff --git a/bin/atlas_install.c b/bin/atlas_install.c +index 2753cbf..e49cc3e 100644 +--- a/bin/atlas_install.c ++++ b/bin/atlas_install.c +@@ -662,7 +662,8 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA) + { + const char TR[2] = {'N','T'}; + char prec[4] = {'d', 's', 'z', 'c'}, pre, upre, *typ; +- char ln[1024], tnam[256], ln2[512], ln3[512], fnam[128]; ++ char ln[1024], ln2[512], ln3[512], fnam[128]; ++ char *tnam; + char *mulinst, *peakstr, *peakstr2; + int nprec=4; + int iL1, lat, muladd, maused, latuse, lbnreg; +@@ -681,7 +682,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA) + fpsum = fopen("INSTALL_LOG/SUMMARY.LOG", "a"); + ATL_Cassert(fpsum, "OPENING INSTALL_LOG/SUMMARY.LOG", NULL); + +- ATL_Cassert(tmpnam(tnam), "GETTING TEMPFILE", NULL); ++ ATL_Cassert((tnam = tempnam(NULL, NULL)), "GETTING TEMPFILE", NULL); + + if (L1DEF) + { +diff --git a/bin/extract.c b/bin/extract.c +index 7a5a926..53fb8bf 100644 +--- a/bin/extract.c ++++ b/bin/extract.c +@@ -3378,7 +3378,7 @@ void PushProc0(EXTENV *EE, EXTPROC **basep, EXTPROC **myfuncs, char *ln) + pp->argnams = KillWord(wp, wp); + pp->nargs = CountWords(pp->argnams); + +- cp = tmpnam(NULL); ++ cp = tempnam(NULL, NULL); + if (cp == NULL) ExtErr(EE, "Out of tmpnams!!!"); + i = Wstrlen(cp) + 1; + pp->FileNam = malloc(i*sizeof(char)); +diff --git a/include/atlas_mvtesttime.h b/include/atlas_mvtesttime.h +index 9147fcb..ab6a99f 100644 +--- a/include/atlas_mvtesttime.h ++++ b/include/atlas_mvtesttime.h +@@ -105,14 +105,15 @@ static int MVKernelFailsTest + char ln[4096]; + char *sp; + int i, lda0; +- static char outnam[L_tmpnam]; ++ static char* outnam; + static int FirstTime=1; + + if (FirstTime) + { + + FirstTime = 0; +- assert(tmpnam(outnam)); ++ outnam = tempnam(NULL, NULL); ++ assert(outnam); + } + /* + * If the file is generated, call generator to create it +@@ -221,14 +222,15 @@ static double TimeMVKernel + char ln[2048], resf[256], *sp; + double *dp, mf; + int i, align = pre2size(pre); +- static char outnam[L_tmpnam]; ++ static char* outnam; + static int FirstTime=1; + + if (FirstTime) + { + + FirstTime = 0; +- assert(tmpnam(outnam)); ++ outnam = tempnam(NULL, NULL); ++ assert(outnam); + } + /* + * If the file is generated, call generator to create it +diff --git a/include/atlas_r1testtime.h b/include/atlas_r1testtime.h +index b33213a..f27ee25 100644 +--- a/include/atlas_r1testtime.h ++++ b/include/atlas_r1testtime.h +@@ -76,14 +76,15 @@ static int R1KernelFailsTest + char ln[4096]; + char *sp; + int i, lda0; +- static char outnam[L_tmpnam]; ++ static char* outnam; + static int FirstTime=1; + + if (FirstTime) + { + + FirstTime = 0; +- assert(tmpnam(outnam)); ++ outnam = tempnam(NULL, NULL); ++ assert(outnam); + } + /* + * If the file is generated, call generator to create it +@@ -187,14 +188,15 @@ static double TimeR1Kernel + char ln[2048], resf[256], *sp; + double *dp, mf; + int i, align = pre2size(pre); +- static char outnam[L_tmpnam]; ++ static char* outnam; + static int FirstTime=1; + + if (FirstTime) + { + + FirstTime = 0; +- assert(tmpnam(outnam)); ++ outnam = tempnam(NULL, NULL); ++ assert(outnam); + } + /* + * If the file is generated, call generator to create it +diff --git a/include/atlas_r2testtime.h b/include/atlas_r2testtime.h +index facc66d..c638dce 100644 +--- a/include/atlas_r2testtime.h ++++ b/include/atlas_r2testtime.h +@@ -76,14 +76,15 @@ static int R2KernelFailsTest + char ln[4096]; + char *sp; + int i, lda0; +- static char outnam[L_tmpnam]; ++ static char* outnam; + static int FirstTime=1; + + if (FirstTime) + { + + FirstTime = 0; +- assert(tmpnam(outnam)); ++ outnam = tempnam(NULL, NULL); ++ assert(outnam); + } + /* + * If the file is generated, call generator to create it +@@ -187,14 +188,15 @@ static double TimeR2Kernel + char ln[2048], resf[256], *sp; + double *dp, mf; + int i, align = pre2size(pre); +- static char outnam[L_tmpnam]; ++ static char* outnam; + static int FirstTime=1; + + if (FirstTime) + { + + FirstTime = 0; +- assert(tmpnam(outnam)); ++ outnam = tempnam(NULL, NULL); ++ assert(outnam); + } + /* + * If the file is generated, call generator to create it +diff --git a/include/atlas_sys.h b/include/atlas_sys.h +index b83a749..b3f88d2 100644 +--- a/include/atlas_sys.h ++++ b/include/atlas_sys.h +@@ -216,12 +216,13 @@ static char *ATL_fgets_CWS(char *sout, int *plen, FILE *fpin) + + static char *ATL_tmpnam(void) + { +- static char tnam[L_tmpnam]; ++ static char* tnam; + static char FirstTime=1; + if (FirstTime) + { + FirstTime = 0; +- assert(tmpnam(tnam)); ++ tnam = tempnam(NULL, NULL); ++ assert(tnam); + } + return(tnam); + } +diff --git a/tune/blas/gemm/usercomb.c b/tune/blas/gemm/usercomb.c +index 59a7cd4..eb3eb05 100644 +--- a/tune/blas/gemm/usercomb.c ++++ b/tune/blas/gemm/usercomb.c +@@ -138,11 +138,13 @@ int GetUserCase(char pre, int icase, int *iflag, int *mb, int *nb, int *kb, + + void CombineFiles(char *fout, int nfiles, char **fnams) + { +- char tnam[256], ln[512]; ++ char ln[512]; ++ char *tnam; + int i, j, n, nn; + FILE *fpout, *fpin; + +- assert(tmpnam(tnam)); ++ tnam = tempnam(NULL, NULL); ++ assert(tnam); + for (n=i=0; i < nfiles; i++) n += NumUserCases0(fnams[i]); + + fpout = fopen(tnam, "w"); +diff --git a/tune/blas/gemm/userflag.c b/tune/blas/gemm/userflag.c +index c3983e4..b7dd70b 100644 +--- a/tune/blas/gemm/userflag.c ++++ b/tune/blas/gemm/userflag.c +@@ -139,8 +139,8 @@ int GetUserCase(char pre, int icase, int *iflag, int *mb, int *nb, int *kb, + + void GoGetThem(char *infile, char *outfile) + { +- char ln[512], ln2[512], tnam[256], MCC[256], MMFLAGS[256]; +- char *chkfile = "FlagCheck.c", *sp, *sp2; ++ char ln[512], ln2[512], MCC[256], MMFLAGS[256]; ++ char *chkfile = "FlagCheck.c", *sp, *sp2, *tnam; + FILE *fpin, *fpout; + int i, j, n, nmin=0, good; + int wass; +@@ -152,7 +152,8 @@ void GoGetThem(char *infile, char *outfile) + n = NumUserCases0(infile); + fpin = fopen(infile, "r"); + assert(fpin); +- assert(tmpnam(tnam)); ++ tnam = tempnam(NULL, NULL); ++ assert(tnam); + fpout = fopen(tnam, "w"); + assert(fpout); + assert(fgets(ln, 512, fpin)); +diff --git a/tune/sysinfo/emit_buildinfo.c b/tune/sysinfo/emit_buildinfo.c +index 309c06a..3feaea7 100644 +--- a/tune/sysinfo/emit_buildinfo.c ++++ b/tune/sysinfo/emit_buildinfo.c +@@ -41,14 +41,15 @@ static char SMCVERS[LNLEN], DMCVERS[LNLEN], SKCVERS[LNLEN], DKCVERS[LNLEN]; + static char UNAM[64], DATE[128]; + char *CmndResults(char *cmnd) + { +- static char tnam[128]; ++ static char* tnam; + static int FirstTime=1; + char ln[512]; + + if (FirstTime) + { + FirstTime = 0; +- assert(tmpnam(tnam)); ++ tnam = tempnam(NULL, NULL); ++ assert(tnam); + } + sprintf(ln, "%s > %s\n", cmnd, tnam); + fprintf(stderr, "system: %s", ln);