emit_buildinfo.c

来自「基于Blas CLapck的.用过的人知道是干啥的」· C语言 代码 · 共 226 行

C
226
字号
/* *             Automatically Tuned Linear Algebra Software v3.8.0 *                    (C) Copyright 2001 R. Clint Whaley * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: *   1. Redistributions of source code must retain the above copyright *      notice, this list of conditions and the following disclaimer. *   2. Redistributions in binary form must reproduce the above copyright *      notice, this list of conditions, and the following disclaimer in the *      documentation and/or other materials provided with the distribution. *   3. The name of the ATLAS group or the names of its contributers may *      not be used to endorse or promote products derived from this *      software without specific written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#define LNLEN 2048static char ARCHDEFS[LNLEN], ARCH[LNLEN], DKCFLAGS[LNLEN], DKC[LNLEN],            DMCFLAGS[LNLEN], DMC[LNLEN], F2CDEFS[LNLEN], F77FLAGS[LNLEN],            F77[LNLEN], ICCFLAGS[LNLEN], ICC[LNLEN], INSTFLAGS[LNLEN],            SKCFLAGS[LNLEN], SKC[LNLEN], SMCFLAGS[LNLEN], SMC[LNLEN];static char ICCVERS[LNLEN], F77VERS[LNLEN], SYS[LNLEN];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 int FirstTime=1;   char ln[512];   if (FirstTime)   {      FirstTime = 0;      assert(tmpnam(tnam));   }   sprintf(ln, "%s > %s\n", cmnd, tnam);   fprintf(stderr, "system: %s", ln);   if (!system(ln)) return(tnam);   else return(NULL);}void FixString(char *ln)/* * kills all trailing whitespace from string, and replaces [",`] with ' */{   int i;   for (i=0; ln[i]; i++) if (ln[i] == '"' || ln[i] == '`') ln[i] = '\'';   for (i--; i >= 0 && (ln[i] == ' ' || ln[i] == '\n' || ln[i] == '\t'); i--)      ln[i] = '\0';}int CmndOneLine(char *cmnd, char *ln)/* * executes a system call with contents of cmnd, returns the output in ln; * Returns value returned by system call */{   int i;   FILE *fp;   char *tnam;   ln[0] = '\0';   tnam = CmndResults(cmnd);   if (tnam)   {      fp = fopen(tnam, "r");      assert(fp);      if (!fgets(ln, 512, fp)) ln[0] = '\0';      fclose(fp);      return(0);   }   else ln[0] = '\0';   return(1);}void GetVers(char *comp, char *vers){   char *vflag[4] = {"--version", "-V", "-v", "-version"};   char ln[LNLEN];   int i, iret;   for (i=0; i < 4; i++)   {      sprintf(ln, "%s %s", comp, vflag[i]);      iret = CmndOneLine(ln, vers);      if (!iret) return;   }   strcpy(vers, "UNKNOWN");}void GetMakeMacro(char *str, char *val){   char ln[128];   sprintf(ln, "make print_%s | fgrep -v make", str);   if (CmndOneLine(ln, val)) strcpy(val, "UNKNOWN");}void GetInstInfo(){   GetMakeMacro("F77", F77);   FixString(F77);   GetMakeMacro("F77FLAGS", F77FLAGS);   FixString(F77FLAGS);   GetMakeMacro("ICC", ICC);   FixString(ICC);   GetMakeMacro("ICCFLAGS", ICCFLAGS);   FixString(ICCFLAGS);   GetMakeMacro("SMC", SMC);   FixString(SMC);   GetMakeMacro("SMCFLAGS", SMCFLAGS);   FixString(SMCFLAGS);   GetMakeMacro("DMC", DMC);   FixString(DMC);   GetMakeMacro("DMCFLAGS", DMCFLAGS);   FixString(DMCFLAGS);   GetMakeMacro("SKC", SKC);   FixString(SKC);   GetMakeMacro("SKCFLAGS", SKCFLAGS);   FixString(SKCFLAGS);   GetMakeMacro("DKC", DKC);   FixString(DKC);   GetMakeMacro("DKCFLAGS", DKCFLAGS);   FixString(DKCFLAGS);   GetMakeMacro("ARCHDEFS", ARCHDEFS);   FixString(ARCHDEFS);   GetMakeMacro("F2CDEFS", F2CDEFS);   FixString(F2CDEFS);   GetMakeMacro("INSTFLAGS", INSTFLAGS);   FixString(INSTFLAGS);   GetMakeMacro("ARCH", ARCH);   FixString(ARCH);   GetVers(DKC, DKCVERS);   FixString(DKCVERS);   GetVers(SKC, SKCVERS);   FixString(SKCVERS);   GetVers(DMC, DMCVERS);   FixString(DMCVERS);   GetVers(SMC, SMCVERS);   FixString(SMCVERS);   GetVers(ICC, ICCVERS);   FixString(ICCVERS);   GetVers(F77, F77VERS);   FixString(F77VERS);   if (CmndOneLine("uname -a", SYS)) strcpy(UNAM, "UNKNOWN");   else FixString(SYS);   if (CmndOneLine("whoami", UNAM)) strcpy(UNAM, "UNKNOWN");   FixString(UNAM);   if (CmndOneLine("date", DATE)) strcpy(DATE, "UNKNOWN");   FixString(DATE);}void PrintInstInfo(FILE *fpout){   fprintf(fpout, "#define ATL_ARCH \"%s\"\n", ARCH);   fprintf(fpout, "#define ATL_INSTFLAGS \"%s\"\n", INSTFLAGS);   fprintf(fpout, "#define ATL_F2CDEFS \"%s\"\n", F2CDEFS);   fprintf(fpout, "#define ATL_ARCHDEFS \"%s\"\n", ARCHDEFS);   fprintf(fpout, "#define ATL_DKCFLAGS \"%s\"\n", DKCFLAGS);   fprintf(fpout, "#define ATL_DKC \"%s\"\n", DKC);   fprintf(fpout, "#define ATL_SKCFLAGS \"%s\"\n", SKCFLAGS);   fprintf(fpout, "#define ATL_SKC \"%s\"\n", SKC);   fprintf(fpout, "#define ATL_DMCFLAGS \"%s\"\n", DMCFLAGS);   fprintf(fpout, "#define ATL_DMC \"%s\"\n", DMC);   fprintf(fpout, "#define ATL_SMCFLAGS \"%s\"\n", SMCFLAGS);   fprintf(fpout, "#define ATL_SMC \"%s\"\n", SMC);   fprintf(fpout, "#define ATL_ICCFLAGS \"%s\"\n", ICCFLAGS);   fprintf(fpout, "#define ATL_ICC \"%s\"\n", ICC);   fprintf(fpout, "#define ATL_F77FLAGS \"%s\"\n", F77FLAGS);   fprintf(fpout, "#define ATL_F77 \"%s\"\n", F77);   fprintf(fpout, "#define ATL_DKCVERS \"%s\"\n", DKCVERS);   fprintf(fpout, "#define ATL_SKCVERS \"%s\"\n", SKCVERS);   fprintf(fpout, "#define ATL_DMCVERS \"%s\"\n", DMCVERS);   fprintf(fpout, "#define ATL_SMCVERS \"%s\"\n", SMCVERS);   fprintf(fpout, "#define ATL_ICCVERS \"%s\"\n", ICCVERS);   fprintf(fpout, "#define ATL_F77VERS \"%s\"\n", F77VERS);   fprintf(fpout, "#define ATL_SYSINFO \"%s\"\n", SYS);   fprintf(fpout, "#define ATL_DATE    \"%s\"\n", DATE);   fprintf(fpout, "#define ATL_UNAM    \"%s\"\n", UNAM);   fprintf(fpout, "#define ATL_VERS    \"3.8.0\"\n");}void CreateFile(char *file){   FILE *fpout;   GetInstInfo();   if (file) fpout = fopen(file, "w");   else fpout = stdout;   assert(fpout);   fprintf(fpout, "#ifndef ATL_INSTINFO_H\n   #define ATL_INSTINFO_H\n\n");   PrintInstInfo(fpout);   fprintf(fpout, "\n#endif\n");   if (fpout != stdout) fclose(fpout);}main(int nargs, char **args){   FILE *fpout=stdout;   char *file=NULL;   if (nargs > 1) file = args[1];   CreateFile(file);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?