diff options
author | Shashank | 2017-05-29 12:40:26 +0530 |
---|---|---|
committer | Shashank | 2017-05-29 12:40:26 +0530 |
commit | 0345245e860375a32c9a437c4a9d9cae807134e9 (patch) | |
tree | ad51ecbfa7bcd3cc5f09834f1bb8c08feaa526a4 /tools/SetupAtlas/SetupAtlas.c | |
download | scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.gz scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.bz2 scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.zip |
CMSCOPE changed
Diffstat (limited to 'tools/SetupAtlas/SetupAtlas.c')
-rwxr-xr-x | tools/SetupAtlas/SetupAtlas.c | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/tools/SetupAtlas/SetupAtlas.c b/tools/SetupAtlas/SetupAtlas.c new file mode 100755 index 000000000..17e9dae39 --- /dev/null +++ b/tools/SetupAtlas/SetupAtlas.c @@ -0,0 +1,296 @@ +/* +* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +* Copyright (C) 2009 - DIGITEO - Allan CORNET +* +* This file must be used under the terms of the CeCILL. +* This source file is licensed as described in the file COPYING, which +* you should have received as part of this distribution. The terms +* are also available at +* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt +* +*/ +/*--------------------------------------------------------------------------*/ +#include <Windows.h> +#include "writeLog.h" +#include "getCpuInfos.h" +#include "readBlasSpec.h" +#include "copyBlasFile.h" +#include "GetPathOfThisExe.h" +/*--------------------------------------------------------------------------*/ +#pragma comment(lib,"../../bin/libxml2.lib") +/*--------------------------------------------------------------------------*/ +#define LOG_FILENAME L"SetupAtlas.log" +#define ATLASSPEC_FILENAME L"Atlas.spec" +/*--------------------------------------------------------------------------*/ +static wchar_t *LogFilename = NULL; +static wchar_t msgtolog[512]; +static wchar_t *buildFilename(wchar_t *destpath, wchar_t *filename); +static wchar_t *getCpuDllFilename(struct cpu_struct**CPUS_SPEC, int sizeCPUS_SPEC); +static BOOL freeCpuStruct(struct cpu_struct**CPUS_SPEC, int sizeCPUS_SPEC); +/*--------------------------------------------------------------------------*/ +int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) +{ + int ierr = 1; + wchar_t *pathThisExe = GetPathOfThisExe(); + if (pathThisExe) + { + LogFilename = buildFilename(pathThisExe, LOG_FILENAME); + if (LogFilename) + { +#ifdef _WIN64 + { + wchar_t* strtime = getTimeString(); + AppendMessageToLog(strtime, LogFilename); + free(strtime); + strtime = NULL; + AppendMessageToLog(L"**************************************************", LogFilename); + AppendMessageToLog(L"* ONLY WITH X86 VERSION *", LogFilename); + AppendMessageToLog(L"**************************************************", LogFilename); + free(LogFilename); + LogFilename = NULL; + free(pathThisExe); + pathThisExe = NULL; + return ierr; + } +#else + + wchar_t* AtlasSpecFilename = buildFilename(pathThisExe, ATLASSPEC_FILENAME); + + if (AtlasSpecFilename) + { + int sizeArray = 0; + struct cpu_struct **CPUS_SPEC = readBlasSpec(AtlasSpecFilename, &sizeArray); + + if (CPUS_SPEC) + { + wchar_t * blasdllname = getCpuDllFilename(CPUS_SPEC, sizeArray); + if (blasdllname) + { + int err = copyBlasFile(blasdllname); + + wchar_t* strtime = getTimeString(); + AppendMessageToLog(strtime, LogFilename); + free(strtime); + strtime = NULL; + + AppendMessageToLog(L"**************************************************", LogFilename); + switch (err) + { + case COPY_NO_RIGHT_TO_WRITE: + wcscpy(msgtolog, L"NO RIGHT TO WRITE: "); + wcscat(msgtolog, blasdllname); + AppendMessageToLog(msgtolog, LogFilename); + ierr = 1; + break; + case COPY_OK: + wcscpy(msgtolog, L"COPY OK OF: "); + wcscat(msgtolog, blasdllname); + AppendMessageToLog(msgtolog, LogFilename); + ierr = 0; + break; + case COPY_FILE_SRC_NOT_EXISTS: + wcscpy(msgtolog, L"FILE NOT EXIST: "); + wcscat(msgtolog, blasdllname); + AppendMessageToLog(msgtolog, LogFilename); + ierr = 1; + break; + case COPY_DESTINATION_NOT_EXISTS: + wcscpy(msgtolog, L"DESTINATION NOT EXIST"); + AppendMessageToLog(msgtolog, LogFilename); + ierr = 1; + break; + case COPY_FILE_FAILED: + wcscpy(msgtolog, L"COPY FAILED"); + AppendMessageToLog(msgtolog, LogFilename); + ierr = 1; + break; + default: + wcscpy(msgtolog, L"UNKNOW ERROR"); + AppendMessageToLog(msgtolog, LogFilename); + ierr = 1; + break; + } + AppendMessageToLog(L"**************************************************", LogFilename); + + free(blasdllname); + blasdllname = NULL; + } + else + { + wchar_t* strtime = getTimeString(); + AppendMessageToLog(strtime, LogFilename); + free(strtime); + strtime = NULL; + + AppendMessageToLog(L"**************************************************", LogFilename); + wcscpy(msgtolog, L"IMPOSSIBLE TO FIND A OPTIMIZED DLL"); + AppendMessageToLog(msgtolog, LogFilename); + AppendMessageToLog(L"**************************************************", LogFilename); + ierr = 1; + } + + freeCpuStruct(CPUS_SPEC, sizeArray); + } + else + { + wchar_t* strtime = getTimeString(); + AppendMessageToLog(strtime, LogFilename); + free(strtime); + strtime = NULL; + + AppendMessageToLog(L"**************************************************", LogFilename); + wcscpy(msgtolog, L"IMPOSSIBLE TO READ ATLAS.SPEC"); + AppendMessageToLog(msgtolog, LogFilename); + AppendMessageToLog(L"**************************************************", LogFilename); + ierr = 1; + } + free(AtlasSpecFilename); + AtlasSpecFilename = NULL; + } + else + { + wchar_t* strtime = getTimeString(); + AppendMessageToLog(strtime, LogFilename); + free(strtime); + strtime = NULL; + + AppendMessageToLog(L"**************************************************", LogFilename); + wcscpy(msgtolog, L"INCORRECT FILENAME ATLAS.SPEC"); + AppendMessageToLog(msgtolog, LogFilename); + AppendMessageToLog(L"**************************************************", LogFilename); + ierr = 1; + } + + free(LogFilename); + LogFilename = NULL; +#endif /* _WIN64 */ + } + else + { + wchar_t* strtime = getTimeString(); + AppendMessageToLog(strtime, LogFilename); + free(strtime); + strtime = NULL; + + AppendMessageToLog(L"**************************************************", LOG_FILENAME); + AppendMessageToLog(L"* ERROR CREATES LOG FILENAME *", LOG_FILENAME); + AppendMessageToLog(L"**************************************************", LOG_FILENAME); + ierr = 1; + } + + free(pathThisExe); + pathThisExe = NULL; + } + else + { + wchar_t* strtime = getTimeString(); + AppendMessageToLog(strtime, LogFilename); + free(strtime); + strtime = NULL; + + AppendMessageToLog(L"**************************************************", LOG_FILENAME); + AppendMessageToLog(L"* ERROR CURRENT PATH NOT FOUND *", LOG_FILENAME); + AppendMessageToLog(L"**************************************************", LOG_FILENAME); + ierr = 1; + } + + return ierr; +} +/*--------------------------------------------------------------------------*/ +wchar_t *buildFilename(wchar_t *destpath, wchar_t *filename) +{ + wchar_t *fullfilename = NULL; + if (destpath && filename) + { + int len = (int)(wcslen(destpath) + wcslen(filename) + wcslen(L"\\") + 1); + fullfilename = (wchar_t *) calloc(len, sizeof(wchar_t)); + if (fullfilename) + { + wcscpy(fullfilename, destpath); + wcscat(fullfilename, L"\\"); + wcscat(fullfilename, filename); + } + } + return fullfilename; +} +/*--------------------------------------------------------------------------*/ +wchar_t *getCpuDllFilename(struct cpu_struct **CPUS_SPEC, int sizeCPUS_SPEC) +{ + int i = 0; + + wchar_t *CurrentCpuManufacturer = getCpuVendor(); + int CurrentCpuFamily = getCpuFamily(); + int CurrentCpuModel = getCpuModel(); + + wchar_t* strtime = getTimeString(); + AppendMessageToLog(strtime, LogFilename); + free(strtime); + strtime = NULL; + + wsprintfW(msgtolog, L"Vendor %s Family %d Model %d", + CurrentCpuManufacturer, + CurrentCpuFamily, + CurrentCpuModel); + AppendMessageToLog(L"**************************************************", LogFilename); + AppendMessageToLog(L"CPU DETECTION:", LogFilename); + AppendMessageToLog(msgtolog, LogFilename); + AppendMessageToLog(L"**************************************************", LogFilename); + + for (i = 0; i < sizeCPUS_SPEC; i++) + { + if (wcscmp(CPUS_SPEC[i]->cpu_vendor, CurrentCpuManufacturer) == 0) + { + if (CPUS_SPEC[i]->cpu_family == CurrentCpuFamily) + { + if (CPUS_SPEC[i]->cpu_model == CurrentCpuModel) + { + return _wcsdup(CPUS_SPEC[i]->dll_filename); + } + else + { + if (CPUS_SPEC[i]->cpu_model == 0) + { + return _wcsdup(CPUS_SPEC[i]->dll_filename); + } + } + } + } + } + return NULL; +} +/*--------------------------------------------------------------------------*/ +static BOOL freeCpuStruct(struct cpu_struct** CPUS_SPEC, int sizeCPUS_SPEC) +{ + int i = 0; + if (CPUS_SPEC) + { + for (i = 0; i < sizeCPUS_SPEC; i++) + { + if (CPUS_SPEC[i]) + { + if (CPUS_SPEC[i]->comments) + { + free(CPUS_SPEC[i]->comments); + CPUS_SPEC[i]->comments = NULL; + } + if (CPUS_SPEC[i]->cpu_vendor) + { + free(CPUS_SPEC[i]->cpu_vendor); + CPUS_SPEC[i]->cpu_vendor = NULL; + } + if (CPUS_SPEC[i]->dll_filename) + { + free(CPUS_SPEC[i]->dll_filename); + CPUS_SPEC[i]->dll_filename = NULL; + } + free(CPUS_SPEC[i]); + CPUS_SPEC[i] = NULL; + } + } + free(CPUS_SPEC); + CPUS_SPEC = NULL; + return TRUE; + } + return FALSE; +} +/*--------------------------------------------------------------------------*/ |