authorgravatar for stephen@hexops.comStephen Gutekanst <stephen@hexops.com> 2022-02-21 12:51:23-07:00
committergravatar for stephen@hexops.comStephen Gutekanst <stephen@hexops.com> 2022-02-21 12:52:10-07:00
logfb61db1ee40e08e939613dc8448ac619a05bf91d
treefcd7cf4db42105721a91d78b70592b3fee6b83b6
parent2bd10f4db98fd313c6743477ad36b139652a8dd5

zig build: use orelse to fetch next argument

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>

1 files changed, 149 insertions(+), 115 deletions(-)

src/main.zig+149-115
......@@ -770,7 +770,7 @@ fn buildOutputType(
770770 _ = process_args_iter.skip(); // e.g. "build-lib"
771771 var resp_file_args_iter: ?ArgIteratorResponseFile = null;
772772
773 var getNextArg = (struct {
773 const getNextArg = (struct {
774774 pub fn getNextArg(_process_args_iter: *process.ArgIterator, maybe_resp_file_args_iter: *?ArgIteratorResponseFile) ?[:0]const u8 {
775775 if (_process_args_iter.next()) |proc_arg| return proc_arg;
776776 if (maybe_resp_file_args_iter.*) |*iter| return iter.next();
......@@ -822,45 +822,49 @@ fn buildOutputType(
822822 cur_pkg = cur_pkg.parent orelse
823823 fatal("encountered --pkg-end with no matching --pkg-begin", .{});
824824 } else if (mem.eql(u8, arg, "--main-pkg-path")) {
825 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
826 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
827 main_pkg_path = next_arg.?;
825 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
826 fatal("expected parameter after {s}", .{arg});
827 };
828 main_pkg_path = next_arg;
828829 } else if (mem.eql(u8, arg, "-cflags")) {
829830 extra_cflags.shrinkRetainingCapacity(0);
830831 while (true) {
831 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
832 if (next_arg == null) fatal("expected -- after -cflags", .{});
833 if (mem.eql(u8, next_arg.?, "--")) break;
834 try extra_cflags.append(next_arg.?);
832 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
833 fatal("expected -- after -cflags", .{});
834 };
835 if (mem.eql(u8, next_arg, "--")) break;
836 try extra_cflags.append(next_arg);
835837 }
836838 } else if (mem.eql(u8, arg, "--color")) {
837 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
838 if (next_arg == null) fatal("expected [auto|on|off] after --color", .{});
839 color = std.meta.stringToEnum(Color, next_arg.?) orelse {
840 fatal("expected [auto|on|off] after --color, found '{s}'", .{next_arg.?});
839 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
840 fatal("expected [auto|on|off] after --color", .{});
841 };
842 color = std.meta.stringToEnum(Color, next_arg) orelse {
843 fatal("expected [auto|on|off] after --color, found '{s}'", .{next_arg});
841844 };
842845 } else if (mem.eql(u8, arg, "--subsystem")) {
843 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
844 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
845 if (mem.eql(u8, next_arg.?, "console")) {
846 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
847 fatal("expected parameter after {s}", .{arg});
848 };
849 if (mem.eql(u8, next_arg, "console")) {
846850 subsystem = .Console;
847 } else if (mem.eql(u8, next_arg.?, "windows")) {
851 } else if (mem.eql(u8, next_arg, "windows")) {
848852 subsystem = .Windows;
849 } else if (mem.eql(u8, next_arg.?, "posix")) {
853 } else if (mem.eql(u8, next_arg, "posix")) {
850854 subsystem = .Posix;
851 } else if (mem.eql(u8, next_arg.?, "native")) {
855 } else if (mem.eql(u8, next_arg, "native")) {
852856 subsystem = .Native;
853 } else if (mem.eql(u8, next_arg.?, "efi_application")) {
857 } else if (mem.eql(u8, next_arg, "efi_application")) {
854858 subsystem = .EfiApplication;
855 } else if (mem.eql(u8, next_arg.?, "efi_boot_service_driver")) {
859 } else if (mem.eql(u8, next_arg, "efi_boot_service_driver")) {
856860 subsystem = .EfiBootServiceDriver;
857 } else if (mem.eql(u8, next_arg.?, "efi_rom")) {
861 } else if (mem.eql(u8, next_arg, "efi_rom")) {
858862 subsystem = .EfiRom;
859 } else if (mem.eql(u8, next_arg.?, "efi_runtime_driver")) {
863 } else if (mem.eql(u8, next_arg, "efi_runtime_driver")) {
860864 subsystem = .EfiRuntimeDriver;
861865 } else {
862866 fatal("invalid: --subsystem: '{s}'. Options are:\n{s}", .{
863 next_arg.?,
867 next_arg,
864868 \\ console
865869 \\ windows
866870 \\ posix
......@@ -873,67 +877,81 @@ fn buildOutputType(
873877 });
874878 }
875879 } else if (mem.eql(u8, arg, "-O")) {
876 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
877 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
878 optimize_mode_string = next_arg.?;
880 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
881 fatal("expected parameter after {s}", .{arg});
882 };
883 optimize_mode_string = next_arg;
879884 } else if (mem.eql(u8, arg, "--entry")) {
880 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
881 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
882 entry = next_arg.?;
885 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
886 fatal("expected parameter after {s}", .{arg});
887 };
888 entry = next_arg;
883889 } else if (mem.eql(u8, arg, "--stack")) {
884 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
885 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
886 stack_size_override = std.fmt.parseUnsigned(u64, next_arg.?, 0) catch |err| {
890 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
891 fatal("expected parameter after {s}", .{arg});
892 };
893 stack_size_override = std.fmt.parseUnsigned(u64, next_arg, 0) catch |err| {
887894 fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) });
888895 };
889896 } else if (mem.eql(u8, arg, "--image-base")) {
890 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
891 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
892 image_base_override = std.fmt.parseUnsigned(u64, next_arg.?, 0) catch |err| {
897 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
898 fatal("expected parameter after {s}", .{arg});
899 };
900 image_base_override = std.fmt.parseUnsigned(u64, next_arg, 0) catch |err| {
893901 fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) });
894902 };
895903 } else if (mem.eql(u8, arg, "--name")) {
896 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
897 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
898 provided_name = next_arg.?;
904 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
905 fatal("expected parameter after {s}", .{arg});
906 };
907 provided_name = next_arg;
899908 } else if (mem.eql(u8, arg, "-rpath")) {
900 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
901 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
902 try rpath_list.append(next_arg.?);
909 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
910 fatal("expected parameter after {s}", .{arg});
911 };
912 try rpath_list.append(next_arg);
903913 } else if (mem.eql(u8, arg, "--library-directory") or mem.eql(u8, arg, "-L")) {
904 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
905 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
906 try lib_dirs.append(next_arg.?);
914 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
915 fatal("expected parameter after {s}", .{arg});
916 };
917 try lib_dirs.append(next_arg);
907918 } else if (mem.eql(u8, arg, "-F")) {
908 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
909 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
910 try framework_dirs.append(next_arg.?);
919 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
920 fatal("expected parameter after {s}", .{arg});
921 };
922 try framework_dirs.append(next_arg);
911923 } else if (mem.eql(u8, arg, "-framework")) {
912 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
913 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
914 try frameworks.append(next_arg.?);
924 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
925 fatal("expected parameter after {s}", .{arg});
926 };
927 try frameworks.append(next_arg);
915928 } else if (mem.eql(u8, arg, "-install_name")) {
916 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
917 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
918 install_name = next_arg.?;
929 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
930 fatal("expected parameter after {s}", .{arg});
931 };
932 install_name = next_arg;
919933 } else if (mem.eql(u8, arg, "-T") or mem.eql(u8, arg, "--script")) {
920 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
921 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
922 linker_script = next_arg.?;
934 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
935 fatal("expected parameter after {s}", .{arg});
936 };
937 linker_script = next_arg;
923938 } else if (mem.eql(u8, arg, "--version-script")) {
924 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
925 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
926 version_script = next_arg.?;
939 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
940 fatal("expected parameter after {s}", .{arg});
941 };
942 version_script = next_arg;
927943 } else if (mem.eql(u8, arg, "--library") or mem.eql(u8, arg, "-l")) {
928 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
929 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
944 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
945 fatal("expected parameter after {s}", .{arg});
946 };
930947 // We don't know whether this library is part of libc or libc++ until
931948 // we resolve the target, so we simply append to the list for now.
932 try system_libs.put(next_arg.?, .{ .needed = false });
949 try system_libs.put(next_arg, .{ .needed = false });
933950 } else if (mem.eql(u8, arg, "--needed-library") or mem.eql(u8, arg, "-needed-l")) {
934 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
935 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
936 try system_libs.put(next_arg.?, .{ .needed = true });
951 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
952 fatal("expected parameter after {s}", .{arg});
953 };
954 try system_libs.put(next_arg, .{ .needed = true });
937955 } else if (mem.eql(u8, arg, "-D") or
938956 mem.eql(u8, arg, "-isystem") or
939957 mem.eql(u8, arg, "-I") or
......@@ -942,29 +960,34 @@ fn buildOutputType(
942960 mem.eql(u8, arg, "-iframework") or
943961 mem.eql(u8, arg, "-iframeworkwithsysroot"))
944962 {
945 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
946 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
963 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
964 fatal("expected parameter after {s}", .{arg});
965 };
947966 try clang_argv.append(arg);
948 try clang_argv.append(next_arg.?);
967 try clang_argv.append(next_arg);
949968 } else if (mem.eql(u8, arg, "--version")) {
950 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
951 if (next_arg == null) fatal("expected parameter after --version", .{});
952 version = std.builtin.Version.parse(next_arg.?) catch |err| {
953 fatal("unable to parse --version '{s}': {s}", .{ next_arg.?, @errorName(err) });
969 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
970 fatal("expected parameter after {s}", .{arg});
971 };
972 version = std.builtin.Version.parse(next_arg) catch |err| {
973 fatal("unable to parse --version '{s}': {s}", .{ next_arg, @errorName(err) });
954974 };
955975 have_version = true;
956976 } else if (mem.eql(u8, arg, "-target")) {
957 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
958 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
959 target_arch_os_abi = next_arg.?;
977 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
978 fatal("expected parameter after {s}", .{arg});
979 };
980 target_arch_os_abi = next_arg;
960981 } else if (mem.eql(u8, arg, "-mcpu")) {
961 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
962 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
963 target_mcpu = next_arg.?;
982 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
983 fatal("expected parameter after {s}", .{arg});
984 };
985 target_mcpu = next_arg;
964986 } else if (mem.eql(u8, arg, "-mcmodel")) {
965 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
966 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
967 machine_code_model = parseCodeModel(next_arg.?);
987 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
988 fatal("expected parameter after {s}", .{arg});
989 };
990 machine_code_model = parseCodeModel(next_arg);
968991 } else if (mem.startsWith(u8, arg, "-ofmt=")) {
969992 target_ofmt = arg["-ofmt=".len..];
970993 } else if (mem.startsWith(u8, arg, "-mcpu=")) {
......@@ -974,50 +997,60 @@ fn buildOutputType(
974997 } else if (mem.startsWith(u8, arg, "-O")) {
975998 optimize_mode_string = arg["-O".len..];
976999 } else if (mem.eql(u8, arg, "--dynamic-linker")) {
977 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
978 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
979 target_dynamic_linker = next_arg.?;
1000 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1001 fatal("expected parameter after {s}", .{arg});
1002 };
1003 target_dynamic_linker = next_arg;
9801004 } else if (mem.eql(u8, arg, "--sysroot")) {
981 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
982 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
983 sysroot = next_arg.?;
1005 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1006 fatal("expected parameter after {s}", .{arg});
1007 };
1008 sysroot = next_arg;
9841009 try clang_argv.append("-isysroot");
985 try clang_argv.append(next_arg.?);
1010 try clang_argv.append(next_arg);
9861011 } else if (mem.eql(u8, arg, "--libc")) {
987 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
988 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
989 libc_paths_file = next_arg.?;
1012 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1013 fatal("expected parameter after {s}", .{arg});
1014 };
1015 libc_paths_file = next_arg;
9901016 } else if (mem.eql(u8, arg, "--test-filter")) {
991 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
992 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
993 test_filter = next_arg.?;
1017 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1018 fatal("expected parameter after {s}", .{arg});
1019 };
1020 test_filter = next_arg;
9941021 } else if (mem.eql(u8, arg, "--test-name-prefix")) {
995 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
996 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
997 test_name_prefix = next_arg.?;
1022 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1023 fatal("expected parameter after {s}", .{arg});
1024 };
1025 test_name_prefix = next_arg;
9981026 } else if (mem.eql(u8, arg, "--test-cmd")) {
999 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
1000 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
1001 try test_exec_args.append(next_arg.?);
1027 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1028 fatal("expected parameter after {s}", .{arg});
1029 };
1030 try test_exec_args.append(next_arg);
10021031 } else if (mem.eql(u8, arg, "--cache-dir")) {
1003 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
1004 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
1005 override_local_cache_dir = next_arg.?;
1032 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1033 fatal("expected parameter after {s}", .{arg});
1034 };
1035 override_local_cache_dir = next_arg;
10061036 } else if (mem.eql(u8, arg, "--global-cache-dir")) {
1007 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
1008 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
1009 override_global_cache_dir = next_arg.?;
1037 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1038 fatal("expected parameter after {s}", .{arg});
1039 };
1040 override_global_cache_dir = next_arg;
10101041 } else if (mem.eql(u8, arg, "--zig-lib-dir")) {
1011 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
1012 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
1013 override_lib_dir = next_arg.?;
1042 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1043 fatal("expected parameter after {s}", .{arg});
1044 };
1045 override_lib_dir = next_arg;
10141046 } else if (mem.eql(u8, arg, "--debug-log")) {
1015 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
1016 if (next_arg == null) fatal("expected parameter after {s}", .{arg});
1047 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1048 fatal("expected parameter after {s}", .{arg});
1049 };
10171050 if (!build_options.enable_logging) {
10181051 std.log.warn("Zig was compiled without logging enabled (-Dlog). --debug-log has no effect.", .{});
10191052 } else {
1020 try log_scopes.append(gpa, next_arg.?);
1053 try log_scopes.append(gpa, next_arg);
10211054 }
10221055 } else if (mem.eql(u8, arg, "--debug-link-snapshot")) {
10231056 if (!build_options.enable_link_snapshots) {
......@@ -1190,9 +1223,10 @@ fn buildOutputType(
11901223 } else if (mem.eql(u8, arg, "-fno-allow-shlib-undefined")) {
11911224 linker_allow_shlib_undefined = false;
11921225 } else if (mem.eql(u8, arg, "-z")) {
1193 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter);
1194 if (next_arg == null) fatal("expected linker extension flag after '{s}'", .{arg});
1195 const z_arg = next_arg.?;
1226 const next_arg = getNextArg(&process_args_iter, &resp_file_args_iter) orelse {
1227 fatal("expected parameter after {s}", .{arg});
1228 };
1229 const z_arg = next_arg;
11961230 if (mem.eql(u8, z_arg, "nodelete")) {
11971231 linker_z_nodelete = true;
11981232 } else if (mem.eql(u8, z_arg, "notext")) {