diff --git a/Code/Framework/CMakeLists.txt b/Code/Framework/CMakeLists.txt index 61f65de5a4..8cc02fd4e8 100644 --- a/Code/Framework/CMakeLists.txt +++ b/Code/Framework/CMakeLists.txt @@ -15,6 +15,5 @@ add_subdirectory(AzTest) add_subdirectory(AzToolsFramework) add_subdirectory(AzManipulatorTestFramework) add_subdirectory(AzNetworking) -add_subdirectory(Crcfix) add_subdirectory(GFxFramework) add_subdirectory(GridMate) diff --git a/Code/Framework/Crcfix/CMakeLists.txt b/Code/Framework/Crcfix/CMakeLists.txt deleted file mode 100644 index 4fdad1e338..0000000000 --- a/Code/Framework/Crcfix/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -if (NOT PAL_TRAIT_BUILD_HOST_TOOLS) - return() -endif() - -include(Platform/${PAL_PLATFORM_NAME}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) -if (NOT PAL_TRAIT_BUILD_CRCFIX) - return() -endif() - -ly_add_target( - NAME Crcfix EXECUTABLE - NAMESPACE AZ - FILES_CMAKE - crcfix_files.cmake - BUILD_DEPENDENCIES - PRIVATE - AZ::AzCore -) - -ly_add_source_properties( - SOURCES crcfix.cpp - PROPERTY COMPILE_DEFINITIONS - VALUES _CRT_SECURE_NO_WARNINGS -) diff --git a/Code/Framework/Crcfix/Platform/Linux/PAL_linux.cmake b/Code/Framework/Crcfix/Platform/Linux/PAL_linux.cmake deleted file mode 100644 index a63f2bed45..0000000000 --- a/Code/Framework/Crcfix/Platform/Linux/PAL_linux.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(PAL_TRAIT_BUILD_CRCFIX FALSE) diff --git a/Code/Framework/Crcfix/Platform/Mac/PAL_mac.cmake b/Code/Framework/Crcfix/Platform/Mac/PAL_mac.cmake deleted file mode 100644 index a63f2bed45..0000000000 --- a/Code/Framework/Crcfix/Platform/Mac/PAL_mac.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(PAL_TRAIT_BUILD_CRCFIX FALSE) diff --git a/Code/Framework/Crcfix/Platform/Windows/PAL_windows.cmake b/Code/Framework/Crcfix/Platform/Windows/PAL_windows.cmake deleted file mode 100644 index 8a8884139d..0000000000 --- a/Code/Framework/Crcfix/Platform/Windows/PAL_windows.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(PAL_TRAIT_BUILD_CRCFIX TRUE) diff --git a/Code/Framework/Crcfix/crcfix.cpp b/Code/Framework/Crcfix/crcfix.cpp deleted file mode 100644 index 778b9e2185..0000000000 --- a/Code/Framework/Crcfix/crcfix.cpp +++ /dev/null @@ -1,538 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int g_totalFixTimeMs = 0; -int g_longestFixTimeMs = 0; - -class Filename -{ - wchar_t fullpath[MAX_PATH]; - wchar_t drive[_MAX_DRIVE]; - wchar_t dir[_MAX_DIR]; - wchar_t fname[_MAX_FNAME]; - wchar_t ext[_MAX_EXT]; - -public: - Filename() - { - fullpath[0] = drive[0] = dir[0] = fname[0] = ext[0] = 0; - } - - Filename(const AZStd::wstring& filename) - { - _wsplitpath(filename.c_str(), drive, dir, fname, ext); - wcscpy(fullpath, filename.c_str()); - } - - void SetExt(const wchar_t* pExt) { wcscpy(ext, pExt); _wmakepath(fullpath, drive, dir, fname, pExt); } - const wchar_t* GetFullPath() const { return fullpath; } - bool Exists() const { return _waccess(fullpath, 0) == 0; } - bool IsReadOnly() const { return _waccess(fullpath, 6) == -1; } - bool SetReadOnly() const { return _wchmod(fullpath, _S_IREAD) == 0; } - bool SetWritable() const { return _wchmod(fullpath, _S_IREAD | _S_IWRITE) == 0; } - bool Delete() const { return _wremove(fullpath) == 0; } - bool Rename(const wchar_t* fn2) const{ return MoveFileEx(fullpath, fn2, MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING) == 0; } - bool Copy(const wchar_t* dest) const { return ::CopyFile(fullpath, dest, FALSE) == TRUE; } -}; - -class CRCfix -{ - int lastchar; - int linenum; - -public: - void SkipToEOL(FILE* infile); - char* GetToken(FILE* infile, FILE* outfile); - void GetPreviousCRC(char* token, FILE* infile); - int Fix(Filename srce); -}; - -void FixFiles(const AZStd::wstring& dir, const AZStd::wstring& files, FILETIME* pLastRun, bool verbose, int& nFound, int& nProcessed, int& nFixed, int& nFailed) -{ - CRCfix fixer; - WIN32_FIND_DATA wfd; - HANDLE hFind; - hFind = FindFirstFile((dir + files).c_str(), &wfd); - if (hFind != INVALID_HANDLE_VALUE) - { - do - { - if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) - { - if (verbose) - { - AZ_TracePrintf("CrcFix", "\tProcessing %ls ...", wfd.cFileName); - } - nFound++; - - int n = 0; - if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) == 0 && (!pLastRun || CompareFileTime(pLastRun, &wfd.ftLastWriteTime) <= 0)) - { - n = fixer.Fix(Filename(dir + L"\\" + wfd.cFileName)); - nProcessed++; - } - if (n < 0) - { - nFailed++; - if (verbose) - { - AZ_TracePrintf("CrcFix", "Failed\n"); - } - } - else - { - if (verbose) - { - AZ_TracePrintf("CrcFix", n > 0 ? "Done\n" : (wfd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) != 0 ? "ReadOnly\n" : "Unchanged\n"); - } - nFixed += n; - } - } - } while (FindNextFile(hFind, &wfd)); - } - FindClose(hFind); -} - -void FixDirectories(const AZStd::wstring& dirs, const AZStd::wstring& files, FILETIME* pLastRun, bool verbose, int& nFound, int& nProcessed, int& nFixed, int& nFailed) -{ - if (verbose) - { - AZ_TracePrintf("CrcFix", "Processing %ls ...\n", dirs.c_str()); - } - - // do files - FixFiles(dirs, files, pLastRun, verbose, nFound, nProcessed, nFixed, nFailed); - - // do folders - WIN32_FIND_DATA wfd; - HANDLE hFind; - hFind = FindFirstFile((dirs + L"\\*").c_str(), &wfd); - if (hFind != INVALID_HANDLE_VALUE) - { - do - { - if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) - { - if (wfd.cFileName[0] == '.') - { - continue; - } - FixDirectories(AZStd::wstring(dirs + L"\\" + wfd.cFileName), files, pLastRun, verbose, nFound, nProcessed, nFixed, nFailed); - } - } while (FindNextFile(hFind, &wfd)); - } - FindClose(hFind); -} - -int main(int argc, char* argv[]) -{ - AZStd::chrono::system_clock::time_point startTime = AZStd::chrono::system_clock::now(); - - AZ::SystemAllocator::Descriptor desc; - //desc.m_stackRecordLevels = 15; - AZ::AllocatorInstance::Create(desc); - //if (AZ::AllocatorInstance::Get().GetRecords()) { - // AZ::AllocatorInstance::Get().GetRecords()->SetMode(AZ::Debug::AllocationRecords::RECORD_FULL); - //} - { - if (argc < 2) - { - AZ_TracePrintf("CrcFix", "Usage:\n crcfix [-v(erbose)] [-log:logfile] {path[\\*][\\*.*]}\n"); - AZ_TracePrintf("CrcFix", "\n Ex:\n crcfix -v -log:timestamp.log src\\*\\*.cpp src\\*\\*.h ..\\scripts\\*.*\n\n"); - } - - char root[MAX_PATH]; - AZ::Utils::GetExecutableDirectory(root, MAX_PATH); - - AZStd::vector entries; - - AZStd::wstring logfilename; - FILETIME lastRun; - FILETIME* pLastRun = NULL; - - bool verbose = false; - - for (int iArg = 1; iArg < argc; ++iArg) - { - const char* pArg = argv[iArg]; - if (!pArg) - { - continue; - } - AZStd::wstring pArgW; - AZStd::to_wstring(pArgW, pArg); - if (_strnicmp(pArg, "-log:", 5) == 0) - { - logfilename.assign(pArgW.begin() + 5, pArgW.end()); - HANDLE hFile = CreateFile(logfilename.data(), 0, 0, NULL, OPEN_EXISTING, 0, NULL); - if (hFile != INVALID_HANDLE_VALUE) - { - pLastRun = &lastRun; - GetFileTime(hFile, NULL, NULL, pLastRun); - CloseHandle(hFile); - } - } - else if (_stricmp(pArg, "-v") == 0) - { - verbose = true; - } - else - { - entries.emplace_back(AZStd::move(pArgW)); - } - } - - // for each entry from the command line... - int nFound = 0; - int nProcessed = 0; - int nFixed = 0; - int nFailed = 0; - for (AZStd::vector::const_iterator iEntry = entries.begin(); iEntry != entries.end(); ++iEntry) - { - AZStd::wstring entry = (iEntry->at(0) == L'\\' || iEntry->find(L":") != iEntry->npos) ? *iEntry : AZStd::wstring(root) + L"\\" + *iEntry; - AZStd::wstring::size_type split = entry.find(L"*\\"); - bool doSubdirs = split != entry.npos; - if (doSubdirs) - { - FixDirectories(entry.substr(0, split), entry.substr(split + 1), pLastRun, verbose, nFound, nProcessed, nFixed, nFailed); - } - else - { - split = entry.rfind(L"\\"); - if (split == entry.npos) - { - split = 0; - } - FixFiles(entry.substr(0, split), entry.substr(split), pLastRun, verbose, nFound, nProcessed, nFixed, nFailed); - } - } - - // update timestamp - if (!logfilename.empty()) - { - HANDLE hFile = CreateFile(logfilename.data(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - GetSystemTimeAsFileTime(&lastRun); - SetFileTime(hFile, NULL, NULL, &lastRun); - char log[1024]; - DWORD oCount; - - sprintf(log, "Batches processed: %zu\n\tFiles found: %d\n\tFiles processed: %d\n\tFiles fixed: %d\n\tFiles failed: %d\n", entries.size(), nFound, nProcessed, nFixed, nFailed); - WriteFile(hFile, log, static_cast(strlen(log)), &oCount, NULL); - - AZStd::chrono::system_clock::time_point endTime = AZStd::chrono::system_clock::now(); - sprintf(log, "Total running time: %.2f secs.\n\tTotal processing time: %.2f secs.\n\tLongest processing time: %.2f secs.\n", (float)AZStd::chrono::milliseconds(endTime - startTime).count() / 1000.f, (float)g_totalFixTimeMs / 1000.f, (float)g_longestFixTimeMs / 1000.f); - WriteFile(hFile, log, static_cast(strlen(log)), &oCount, NULL); - - CloseHandle(hFile); - } - } - - AZ::AllocatorInstance::Destroy(); - return 0; -} - -//----------------------------------------------------------------------------- -// CRCfix -//----------------------------------------------------------------------------- -void CRCfix::SkipToEOL(FILE* infile) -{ - int c; - for (c = lastchar; c != EOF && c != '\n'; c = fgetc(infile)) - { - ; - } - lastchar = fgetc(infile); - linenum++; -} -//----------------------------------------------------------------------------- -char* CRCfix::GetToken(FILE* infile, FILE* outfile) -{ - static char token[512]; - bool commentline = false; - bool commentblock = false; - bool doublequote = false; - bool singlequote = false; - int i = 0; - int c; - - if (lastchar == EOF) - { - return NULL; - } - - for (c = lastchar; c != EOF; c = fgetc(infile)) - { - if (!commentline && !commentblock && !doublequote && !singlequote) - { - if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '#' || c == '_') - { - token[i++] = c; - continue; - } - else - { - if (i) - { - lastchar = c; - token[i] = 0; - i = 0; - return token; - } - } - } - - if (commentline) - { - if (c == '\n') - { - commentline = false; - } - } - else if (commentblock) - { - while (c == '*') - { - c = fgetc(infile); - if (c == '/') - { - commentblock = false; - } - fputc('*', outfile); - } - } - - if (!commentline && !commentblock) - { - if (c == '"' && !singlequote) - { - doublequote = !doublequote; - } - else if (c == '\'' && !doublequote) - { - singlequote = !singlequote; - } - else if (!singlequote && !doublequote) - { - if (c == '/') - { - c = fgetc(infile); - if (c == '/') - { - commentline = true; - } - else if (c == '*') - { - commentblock = true; - } - if (c == '\'') - { - singlequote = true; - } - else if (c == '"') - { - doublequote = true; - } - fputc('/', outfile); - } - } - else if (c == '\\') - { - fputc(c, outfile); - c = fgetc(infile); - } - } - fputc(c, outfile); - if (c == '\n') - { - linenum++; - } - } - lastchar = c; - token[i] = 0; - return i ? token : NULL; -} -//----------------------------------------------------------------------------- -void CRCfix::GetPreviousCRC(char* token, FILE* infile) -{ - int c; - while ((c = fgetc(infile)) != ')') - { - *token++ = c; - } - *token = 0; -} -//----------------------------------------------------------------------------- -int CRCfix::Fix(Filename srce) -{ - AZStd::chrono::system_clock::time_point startTime = AZStd::chrono::system_clock::now(); - - bool changed = false; - Filename dest(srce); - dest.SetExt(L"xxx"); - - linenum = 0; - - FILE* infile = _wfopen(srce.GetFullPath(), L"r"); - FILE* outfile = _wfopen(dest.GetFullPath(), L"w"); - - if (!infile || !outfile) - { - if (infile) - { - fclose(infile); - infile = nullptr; - } - - if (outfile) - { - fclose(outfile); - outfile = nullptr; - } - - int dt = static_cast(AZStd::chrono::milliseconds(AZStd::chrono::system_clock::now() - startTime).count()); - g_totalFixTimeMs += dt; - if (dt > g_longestFixTimeMs) - { - g_longestFixTimeMs = dt; - } - - return -1; - } - - lastchar = fgetc(infile); - - while (char* token = GetToken(infile, outfile)) - { - bool got = false; - - if (strcmp(token, "AZ_CRC") == 0 && lastchar == '(') - { - size_t i = strlen(token); - token[i++] = lastchar; - int c = fgetc(infile); - - if (c == '"') - { - size_t j = i + 1; - - do - { - token[i++] = c; - c = fgetc(infile); - } while (c != '"'); - - token[i++] = c; - c = fgetc(infile); - - int oldcrc = 0, newcrc; - - if (c == ',') - { - GetPreviousCRC(token + i, infile); - sscanf(token + i, "%i", &oldcrc); - c = ')'; - } - - if (c == ')') - { - token[i] = 0; - c = fgetc(infile); - got = true; - newcrc = AZ::Crc32(token + j, i - j - 1, true); - fprintf(outfile, "%s, 0x%08x)", token, newcrc); - if (newcrc != oldcrc) - { - changed = true; - } - } - } - lastchar = c; - token[i] = 0; - } - if (!got) - { - fwrite(token, 1, strlen(token), outfile); - } - } - fclose(infile); - fclose(outfile); - - if (changed) - { - Filename backup(srce); - backup.SetExt(L"crcfix_old"); - - if (backup.Exists()) - { - backup.SetWritable(); - [[maybe_unused]] bool deleted = backup.Delete(); - AZ_Assert(deleted, "failed to delete"); - } - - if (!srce.Copy(backup.GetFullPath())) - { - AZ_TracePrintf("CrcFix", "Failed to copy %ls to %ls\n", srce, backup); - - int dt = static_cast(AZStd::chrono::milliseconds(AZStd::chrono::system_clock::now() - startTime).count()); - g_totalFixTimeMs += dt; - if (dt > g_longestFixTimeMs) - { - g_longestFixTimeMs = dt; - } - - return -1; - } - - if (!dest.Rename(srce.GetFullPath())) - { - AZ_TracePrintf("CrcFix", "Failed to rename %ls to %ls\n", dest, srce); - - int dt = static_cast(AZStd::chrono::milliseconds(AZStd::chrono::system_clock::now() - startTime).count()); - g_totalFixTimeMs += dt; - if (dt > g_longestFixTimeMs) - { - g_longestFixTimeMs = dt; - } - - return -1; - } - - if (!backup.Delete()) - { - AZ_TracePrintf("CrcFix", "Failed to delete %ls\n", backup); - } - } - else - { - dest.Delete(); - } - - - int dt = static_cast(AZStd::chrono::milliseconds(AZStd::chrono::system_clock::now() - startTime).count()); - g_totalFixTimeMs += dt; - if (dt > g_longestFixTimeMs) - { - g_longestFixTimeMs = dt; - } - - return changed ? 1 : 0; -} -//----------------------------------------------------------------------------- diff --git a/Code/Framework/Crcfix/crcfix_files.cmake b/Code/Framework/Crcfix/crcfix_files.cmake deleted file mode 100644 index d170013e67..0000000000 --- a/Code/Framework/Crcfix/crcfix_files.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES crcfix_files.cmake - crcfix.cpp -)