mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-20 03:43:52 +00:00
@@ -31,16 +31,11 @@ function(encoding_check TARGET)
|
|||||||
# Define top-level encoding check target for this ${TARGET}
|
# Define top-level encoding check target for this ${TARGET}
|
||||||
add_custom_target(encoding-check-${TARGET}
|
add_custom_target(encoding-check-${TARGET}
|
||||||
DEPENDS encoding-check ${T_SOURCES}
|
DEPENDS encoding-check ${T_SOURCES}
|
||||||
|
COMMAND $<TARGET_FILE:encoding-check> ${TARGET} ${T_SOURCES}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
COMMENT "Checking source files encodings for target ${TARGET}"
|
COMMENT "Checking source files encodings for target ${TARGET}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Add checking of each source file as a subcommand of encoding-check-${TARGET}
|
|
||||||
foreach(file ${T_SOURCES})
|
|
||||||
add_custom_command(TARGET encoding-check-${TARGET} PRE_BUILD
|
|
||||||
COMMAND $<TARGET_FILE:encoding-check> ${TARGET} ${file}
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
)
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# This adds dependency on encoding-check-${TARGET} to ${TARET}
|
# This adds dependency on encoding-check-${TARGET} to ${TARET}
|
||||||
# via the global-encoding-check
|
# via the global-encoding-check
|
||||||
|
|||||||
@@ -69,28 +69,24 @@ unsigned char *utf8_check(unsigned char *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
static const char* target;
|
||||||
|
|
||||||
|
void error_exit(const char* error, const char* filename)
|
||||||
{
|
{
|
||||||
if (argc != 3) {
|
std::cerr << "\n\tError: " << error << ": " << filename << "\n"
|
||||||
std::cerr << "Usage: " << argv[0] << " <program/library> <file>" << std::endl;
|
<< "\tTarget: " << target << "\n"
|
||||||
return -1;
|
<< std::endl;
|
||||||
}
|
std::exit(-2);
|
||||||
|
}
|
||||||
|
|
||||||
const char* target = argv[1];
|
|
||||||
const char* filename = argv[2];
|
|
||||||
|
|
||||||
const auto error_exit = [=](const char* error) {
|
|
||||||
std::cerr << "\n\tError: " << error << ": " << filename << "\n"
|
|
||||||
<< "\tTarget: " << target << "\n"
|
|
||||||
<< std::endl;
|
|
||||||
std::exit(-2);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
void utf8_check_file(const char* filename)
|
||||||
|
{
|
||||||
std::ifstream file(filename, std::ios::binary | std::ios::ate);
|
std::ifstream file(filename, std::ios::binary | std::ios::ate);
|
||||||
const auto size = file.tellg();
|
const auto size = file.tellg();
|
||||||
|
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
file.seekg(0, std::ios::beg);
|
file.seekg(0, std::ios::beg);
|
||||||
@@ -101,7 +97,7 @@ int main(int argc, char const *argv[])
|
|||||||
|
|
||||||
// Check UTF-8 validity
|
// Check UTF-8 validity
|
||||||
if (utf8_check(reinterpret_cast<unsigned char*>(buffer.data())) != nullptr) {
|
if (utf8_check(reinterpret_cast<unsigned char*>(buffer.data())) != nullptr) {
|
||||||
error_exit("Source file does not contain (valid) UTF-8");
|
error_exit("Source file does not contain (valid) UTF-8", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check against a BOM mark
|
// Check against a BOM mark
|
||||||
@@ -109,10 +105,25 @@ int main(int argc, char const *argv[])
|
|||||||
&& buffer[0] == '\xef'
|
&& buffer[0] == '\xef'
|
||||||
&& buffer[1] == '\xbb'
|
&& buffer[1] == '\xbb'
|
||||||
&& buffer[2] == '\xbf') {
|
&& buffer[2] == '\xbf') {
|
||||||
error_exit("Source file is valid UTF-8 but contains a BOM mark");
|
error_exit("Source file is valid UTF-8 but contains a BOM mark", filename);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
error_exit("Could not read source file");
|
error_exit("Could not read source file", filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char const *argv[])
|
||||||
|
{
|
||||||
|
if (argc < 3) {
|
||||||
|
std::cerr << "Usage: " << argv[0] << " <program/library> <file[s]>" << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
target = argv[1];
|
||||||
|
|
||||||
|
for (int i = 2; i < argc; i++) {
|
||||||
|
utf8_check_file(argv[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user