Fix //+build system

This commit is contained in:
gingerBill
2019-11-05 20:02:11 +00:00
parent 8a46b493fd
commit 689aa4d734
+21 -19
View File
@@ -4585,8 +4585,12 @@ String build_tag_get_token(String s, String *out) {
while (n < s.len) { while (n < s.len) {
Rune rune = 0; Rune rune = 0;
isize width = gb_utf8_decode(&s[n], s.len-n, &rune); isize width = gb_utf8_decode(&s[n], s.len-n, &rune);
if (rune_is_whitespace(rune)) { if (n == 0 && rune == ',') {
*out = substring(s, n+width, s.len); *out = substring(s, width, s.len);
return substring(s, 0, width);
}
if (!rune_is_letter(rune) && !rune_is_digit(rune)) {
*out = substring(s, n, s.len);
return substring(s, 0, n); return substring(s, 0, n);
} }
n += width; n += width;
@@ -4606,9 +4610,14 @@ bool parse_build_tag(Token token_for_pos, String s) {
bool any_correct = false; bool any_correct = false;
while (s.len > 0) {
bool this_kind_correct = true;
do { do {
String p = build_tag_get_token(s, &s); String p = build_tag_get_token(s, &s);
if (p.len == 0) break; if (p.len == 0) break;
if (p == ",") break;
bool is_notted = false; bool is_notted = false;
if (p[0] == '!') { if (p[0] == '!') {
is_notted = true; is_notted = true;
@@ -4624,22 +4633,16 @@ bool parse_build_tag(Token token_for_pos, String s) {
TargetArchKind arch = get_target_arch_from_string(p); TargetArchKind arch = get_target_arch_from_string(p);
if (os != TargetOs_Invalid) { if (os != TargetOs_Invalid) {
GB_ASSERT(arch == TargetArch_Invalid); GB_ASSERT(arch == TargetArch_Invalid);
any_correct = true; if (is_notted && os == build_context.metrics.os) {
if (is_notted) { this_kind_correct = false;
if (os != build_context.metrics.os) { } else if (os != build_context.metrics.os) {
return true; this_kind_correct = false;
}
} else if (os == build_context.metrics.os) {
return true;
} }
} else if (arch != TargetArch_Invalid) { } else if (arch != TargetArch_Invalid) {
any_correct = true; if (is_notted && arch == build_context.metrics.arch) {
if (is_notted) { this_kind_correct = false;
if (arch != build_context.metrics.arch) { } else if (arch != build_context.metrics.arch) {
return true; this_kind_correct = false;
}
} else if (arch == build_context.metrics.arch) {
return true;
} }
} }
if (os == TargetOs_Invalid && arch == TargetArch_Invalid) { if (os == TargetOs_Invalid && arch == TargetArch_Invalid) {
@@ -4649,11 +4652,10 @@ bool parse_build_tag(Token token_for_pos, String s) {
} }
} while (s.len > 0); } while (s.len > 0);
if (any_correct) { any_correct = any_correct || this_kind_correct;
return false;
} }
return true; return any_correct;
} }
String dir_from_path(String path) { String dir_from_path(String path) {