From 26bf9467d31c8cca2daadf93b43b70aa45a56d69 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Fri, 25 Oct 2024 20:14:20 +0200
Subject: [PATCH] Treat all arguments after -- as positional
---
src/cli.c | 185 ++++++++++++++++++++++++++-----------------------
src/version.rc | 2 +-
2 files changed, 98 insertions(+), 89 deletions(-)
diff --git a/src/cli.c b/src/cli.c
index c125262..a088390 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -53,104 +53,113 @@ int main(int argc, char *argv[])
char *filename = NULL;
size_t fileSize = 0;
void *fileData = NULL;
+ bool accept_optionals = true;
for (int i = 1; i < argc; i += 1) {
char *arg = argv[i];
- if (SDL_strcmp(arg, "-h") == 0 || SDL_strcmp(arg, "--help") == 0) {
- print_help();
- return 0;
- } else if (SDL_strcmp(arg, "-s") == 0 || SDL_strcmp(arg, "--source") == 0) {
- if (i + 1 >= argc) {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
- print_help();
- return 1;
- }
- i += 1;
- if (SDL_strcasecmp(argv[i], "spirv") == 0) {
- spirvSource = true;
- sourceValid = true;
- } else if (SDL_strcasecmp(argv[i], "hlsl") == 0) {
- spirvSource = false;
- sourceValid = true;
- } else {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized source input %s, source must be SPIRV or HLSL!", argv[i]);
+ if (accept_optionals && arg[0] == '-') {
+ if (SDL_strcmp(arg, "-h") == 0 || SDL_strcmp(arg, "--help") == 0) {
print_help();
- return 1;
- }
- } else if (SDL_strcmp(arg, "-d") == 0 || SDL_strcmp(arg, "--dest") == 0) {
- if (i + 1 >= argc) {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
- print_help();
- return 1;
- }
- i += 1;
- if (SDL_strcasecmp(argv[i], "DXBC") == 0) {
- destinationFormat = SDL_GPU_SHADERFORMAT_DXBC;
- destinationValid = true;
- } else if (SDL_strcasecmp(argv[i], "DXIL") == 0) {
- destinationFormat = SDL_GPU_SHADERFORMAT_DXIL;
- destinationValid = true;
- } else if (SDL_strcasecmp(argv[i], "MSL") == 0) {
- destinationFormat = SDL_GPU_SHADERFORMAT_MSL;
- destinationValid = true;
- } else if (SDL_strcasecmp(argv[i], "SPIRV") == 0) {
- destinationFormat = SDL_GPU_SHADERFORMAT_SPIRV;
- destinationValid = true;
- } else {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized destination input %s, destination must be DXBC, DXIL, MSL or SPIRV!", argv[i]);
- print_help();
- return 1;
- }
- } else if (SDL_strcmp(arg, "-t") == 0 || SDL_strcmp(arg, "--stage") == 0) {
- if (i + 1 >= argc) {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
- print_help();
- return 1;
- }
- i += 1;
- if (SDL_strcasecmp(argv[i], "vertex") == 0) {
- shaderStage = SDL_SHADERCROSS_SHADERSTAGE_VERTEX;
- stageValid = true;
- } else if (SDL_strcasecmp(argv[i], "fragment") == 0) {
- shaderStage = SDL_SHADERCROSS_SHADERSTAGE_FRAGMENT;
- stageValid = true;
- } else if (SDL_strcasecmp(argv[i], "compute") == 0) {
- shaderStage = SDL_SHADERCROSS_SHADERSTAGE_COMPUTE;
- stageValid = true;
+ return 0;
+ } else if (SDL_strcmp(arg, "-s") == 0 || SDL_strcmp(arg, "--source") == 0) {
+ if (i + 1 >= argc) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
+ print_help();
+ return 1;
+ }
+ i += 1;
+ if (SDL_strcasecmp(argv[i], "spirv") == 0) {
+ spirvSource = true;
+ sourceValid = true;
+ } else if (SDL_strcasecmp(argv[i], "hlsl") == 0) {
+ spirvSource = false;
+ sourceValid = true;
+ } else {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized source input %s, source must be SPIRV or HLSL!", argv[i]);
+ print_help();
+ return 1;
+ }
+ } else if (SDL_strcmp(arg, "-d") == 0 || SDL_strcmp(arg, "--dest") == 0) {
+ if (i + 1 >= argc) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
+ print_help();
+ return 1;
+ }
+ i += 1;
+ if (SDL_strcasecmp(argv[i], "DXBC") == 0) {
+ destinationFormat = SDL_GPU_SHADERFORMAT_DXBC;
+ destinationValid = true;
+ } else if (SDL_strcasecmp(argv[i], "DXIL") == 0) {
+ destinationFormat = SDL_GPU_SHADERFORMAT_DXIL;
+ destinationValid = true;
+ } else if (SDL_strcasecmp(argv[i], "MSL") == 0) {
+ destinationFormat = SDL_GPU_SHADERFORMAT_MSL;
+ destinationValid = true;
+ } else if (SDL_strcasecmp(argv[i], "SPIRV") == 0) {
+ destinationFormat = SDL_GPU_SHADERFORMAT_SPIRV;
+ destinationValid = true;
+ } else {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized destination input %s, destination must be DXBC, DXIL, MSL or SPIRV!", argv[i]);
+ print_help();
+ return 1;
+ }
+ } else if (SDL_strcmp(arg, "-t") == 0 || SDL_strcmp(arg, "--stage") == 0) {
+ if (i + 1 >= argc) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
+ print_help();
+ return 1;
+ }
+ i += 1;
+ if (SDL_strcasecmp(argv[i], "vertex") == 0) {
+ shaderStage = SDL_SHADERCROSS_SHADERSTAGE_VERTEX;
+ stageValid = true;
+ } else if (SDL_strcasecmp(argv[i], "fragment") == 0) {
+ shaderStage = SDL_SHADERCROSS_SHADERSTAGE_FRAGMENT;
+ stageValid = true;
+ } else if (SDL_strcasecmp(argv[i], "compute") == 0) {
+ shaderStage = SDL_SHADERCROSS_SHADERSTAGE_COMPUTE;
+ stageValid = true;
+ } else {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized shader stage input %s, must be vertex, fragment, or compute.", argv[i]);
+ print_help();
+ return 1;
+ }
+ } else if (SDL_strcmp(arg, "-e") == 0 || SDL_strcmp(arg, "--entrypoint") == 0) {
+ if (i + 1 >= argc) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
+ print_help();
+ return 1;
+ }
+ i += 1;
+ entrypointName = argv[i];
+ } else if (SDL_strcmp(arg, "-m") == 0 || SDL_strcmp(arg, "--model") == 0) {
+ if (i + 1 >= argc) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
+ print_help();
+ return 1;
+ }
+ i += 1;
+ shaderModel = SDL_atoi(argv[i]);
+ } else if (SDL_strcmp(arg, "-o") == 0 || SDL_strcmp(arg, "--output") == 0) {
+ if (i + 1 >= argc) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
+ print_help();
+ return 1;
+ }
+ i += 1;
+ outputFilename = argv[i];
+ } else if (SDL_strcmp(arg, "--") == 0) {
+ accept_optionals = false;
} else {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized shader stage input %s, must be vertex, fragment, or compute.", argv[i]);
- print_help();
- return 1;
- }
- } else if (SDL_strcmp(arg, "-e") == 0 || SDL_strcmp(arg, "--entrypoint") == 0) {
- if (i + 1 >= argc) {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
- print_help();
- return 1;
- }
- i += 1;
- entrypointName = argv[i];
- } else if (SDL_strcmp(arg, "-m") == 0 || SDL_strcmp(arg, "--model") == 0) {
- if (i + 1 >= argc) {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
- print_help();
- return 1;
- }
- i += 1;
- shaderModel = SDL_atoi(argv[i]);
- } else if (SDL_strcmp(arg, "-o") == 0 || SDL_strcmp(arg, "--output") == 0) {
- if (i + 1 >= argc) {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s requires an argument", arg);
- print_help();
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s: Unknown argument: %s", argv[0], arg);
+ print_help(1);
return 1;
}
- i += 1;
- outputFilename = argv[i];
} else if (!filename) {
filename = arg;
} else {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s: Unknown argument", argv[0]);
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s: Unknown argument: %s", argv[0], arg);
print_help(1);
}
}
@@ -160,7 +169,7 @@ int main(int argc, char *argv[])
}
fileData = SDL_LoadFile(filename, &fileSize);
if (fileData == NULL) {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s", "Invalid file");
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Invalid file (%s)", SDL_GetError());
return 1;
}
diff --git a/src/version.rc b/src/version.rc
index da758c8..a3c0176 100644
--- a/src/version.rc
+++ b/src/version.rc
@@ -24,7 +24,7 @@ BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "SDL_gpu_shadercross\0"
VALUE "FileVersion", "1, 0, 0, 0\0"
- VALUE "InternalName", "SDL_image\0"
+ VALUE "InternalName", "SDL_gpu_shadercross\0"
VALUE "LegalCopyright", "Copyright (C) 2024 Sam Lantinga\0"
VALUE "OriginalFilename", "SDL_gpu_shadercross.dll\0"
VALUE "ProductName", "Simple DirectMedia Layer\0"