| ... | ... | @@ -1889,8 +1889,116 @@ pub fn resolveInputs( |
| 1889 | 1889 | mem.reverse(UnresolvedInput, unresolved_inputs.items); |
| 1890 | 1890 | |
| 1891 | 1891 | syslib: while (unresolved_inputs.pop()) |unresolved_input| { |
| 1892 | | const name_query: UnresolvedInput.NameQuery = switch (unresolved_input) { |
| 1893 | | .name_query => |nq| nq, |
| 1892 | switch (unresolved_input) { |
| 1893 | .name_query => |name_query| { |
| 1894 | const query = name_query.query; |
| 1895 | |
| 1896 | // Checked in the first pass above while looking for libc libraries. |
| 1897 | assert(!fs.path.isAbsolute(name_query.name)); |
| 1898 | |
| 1899 | checked_paths.clearRetainingCapacity(); |
| 1900 | |
| 1901 | switch (query.search_strategy) { |
| 1902 | .mode_first, .no_fallback => { |
| 1903 | // check for preferred mode |
| 1904 | for (lib_directories) |lib_directory| switch (try resolveLibInput( |
| 1905 | gpa, |
| 1906 | arena, |
| 1907 | unresolved_inputs, |
| 1908 | resolved_inputs, |
| 1909 | &checked_paths, |
| 1910 | &ld_script_bytes, |
| 1911 | lib_directory, |
| 1912 | name_query, |
| 1913 | target, |
| 1914 | query.preferred_mode, |
| 1915 | color, |
| 1916 | )) { |
| 1917 | .ok => continue :syslib, |
| 1918 | .no_match => {}, |
| 1919 | }; |
| 1920 | // check for fallback mode |
| 1921 | if (query.search_strategy == .no_fallback) { |
| 1922 | try failed_libs.append(arena, .{ |
| 1923 | .name = name_query.name, |
| 1924 | .strategy = query.search_strategy, |
| 1925 | .checked_paths = try arena.dupe(u8, checked_paths.items), |
| 1926 | .preferred_mode = query.preferred_mode, |
| 1927 | }); |
| 1928 | continue :syslib; |
| 1929 | } |
| 1930 | for (lib_directories) |lib_directory| switch (try resolveLibInput( |
| 1931 | gpa, |
| 1932 | arena, |
| 1933 | unresolved_inputs, |
| 1934 | resolved_inputs, |
| 1935 | &checked_paths, |
| 1936 | &ld_script_bytes, |
| 1937 | lib_directory, |
| 1938 | name_query, |
| 1939 | target, |
| 1940 | query.fallbackMode(), |
| 1941 | color, |
| 1942 | )) { |
| 1943 | .ok => continue :syslib, |
| 1944 | .no_match => {}, |
| 1945 | }; |
| 1946 | try failed_libs.append(arena, .{ |
| 1947 | .name = name_query.name, |
| 1948 | .strategy = query.search_strategy, |
| 1949 | .checked_paths = try arena.dupe(u8, checked_paths.items), |
| 1950 | .preferred_mode = query.preferred_mode, |
| 1951 | }); |
| 1952 | continue :syslib; |
| 1953 | }, |
| 1954 | .paths_first => { |
| 1955 | for (lib_directories) |lib_directory| { |
| 1956 | // check for preferred mode |
| 1957 | switch (try resolveLibInput( |
| 1958 | gpa, |
| 1959 | arena, |
| 1960 | unresolved_inputs, |
| 1961 | resolved_inputs, |
| 1962 | &checked_paths, |
| 1963 | &ld_script_bytes, |
| 1964 | lib_directory, |
| 1965 | name_query, |
| 1966 | target, |
| 1967 | query.preferred_mode, |
| 1968 | color, |
| 1969 | )) { |
| 1970 | .ok => continue :syslib, |
| 1971 | .no_match => {}, |
| 1972 | } |
| 1973 | |
| 1974 | // check for fallback mode |
| 1975 | switch (try resolveLibInput( |
| 1976 | gpa, |
| 1977 | arena, |
| 1978 | unresolved_inputs, |
| 1979 | resolved_inputs, |
| 1980 | &checked_paths, |
| 1981 | &ld_script_bytes, |
| 1982 | lib_directory, |
| 1983 | name_query, |
| 1984 | target, |
| 1985 | query.fallbackMode(), |
| 1986 | color, |
| 1987 | )) { |
| 1988 | .ok => continue :syslib, |
| 1989 | .no_match => {}, |
| 1990 | } |
| 1991 | } |
| 1992 | try failed_libs.append(arena, .{ |
| 1993 | .name = name_query.name, |
| 1994 | .strategy = query.search_strategy, |
| 1995 | .checked_paths = try arena.dupe(u8, checked_paths.items), |
| 1996 | .preferred_mode = query.preferred_mode, |
| 1997 | }); |
| 1998 | continue :syslib; |
| 1999 | }, |
| 2000 | } |
| 2001 | }, |
| 1894 | 2002 | .ambiguous_name => |an| { |
| 1895 | 2003 | // First check the path relative to the current working directory. |
| 1896 | 2004 | // If the file is a library and is not found there, check the library search paths as well. |
| ... | ... | @@ -1960,113 +2068,6 @@ pub fn resolveInputs( |
| 1960 | 2068 | try resolved_inputs.append(gpa, .{ .dso_exact = dso_exact }); |
| 1961 | 2069 | continue; |
| 1962 | 2070 | }, |
| 1963 | | }; |
| 1964 | | const query = name_query.query; |
| 1965 | | |
| 1966 | | // Checked in the first pass above while looking for libc libraries. |
| 1967 | | assert(!fs.path.isAbsolute(name_query.name)); |
| 1968 | | |
| 1969 | | checked_paths.clearRetainingCapacity(); |
| 1970 | | |
| 1971 | | switch (query.search_strategy) { |
| 1972 | | .mode_first, .no_fallback => { |
| 1973 | | // check for preferred mode |
| 1974 | | for (lib_directories) |lib_directory| switch (try resolveLibInput( |
| 1975 | | gpa, |
| 1976 | | arena, |
| 1977 | | unresolved_inputs, |
| 1978 | | resolved_inputs, |
| 1979 | | &checked_paths, |
| 1980 | | &ld_script_bytes, |
| 1981 | | lib_directory, |
| 1982 | | name_query, |
| 1983 | | target, |
| 1984 | | query.preferred_mode, |
| 1985 | | color, |
| 1986 | | )) { |
| 1987 | | .ok => continue :syslib, |
| 1988 | | .no_match => {}, |
| 1989 | | }; |
| 1990 | | // check for fallback mode |
| 1991 | | if (query.search_strategy == .no_fallback) { |
| 1992 | | try failed_libs.append(arena, .{ |
| 1993 | | .name = name_query.name, |
| 1994 | | .strategy = query.search_strategy, |
| 1995 | | .checked_paths = try arena.dupe(u8, checked_paths.items), |
| 1996 | | .preferred_mode = query.preferred_mode, |
| 1997 | | }); |
| 1998 | | continue :syslib; |
| 1999 | | } |
| 2000 | | for (lib_directories) |lib_directory| switch (try resolveLibInput( |
| 2001 | | gpa, |
| 2002 | | arena, |
| 2003 | | unresolved_inputs, |
| 2004 | | resolved_inputs, |
| 2005 | | &checked_paths, |
| 2006 | | &ld_script_bytes, |
| 2007 | | lib_directory, |
| 2008 | | name_query, |
| 2009 | | target, |
| 2010 | | query.fallbackMode(), |
| 2011 | | color, |
| 2012 | | )) { |
| 2013 | | .ok => continue :syslib, |
| 2014 | | .no_match => {}, |
| 2015 | | }; |
| 2016 | | try failed_libs.append(arena, .{ |
| 2017 | | .name = name_query.name, |
| 2018 | | .strategy = query.search_strategy, |
| 2019 | | .checked_paths = try arena.dupe(u8, checked_paths.items), |
| 2020 | | .preferred_mode = query.preferred_mode, |
| 2021 | | }); |
| 2022 | | continue :syslib; |
| 2023 | | }, |
| 2024 | | .paths_first => { |
| 2025 | | for (lib_directories) |lib_directory| { |
| 2026 | | // check for preferred mode |
| 2027 | | switch (try resolveLibInput( |
| 2028 | | gpa, |
| 2029 | | arena, |
| 2030 | | unresolved_inputs, |
| 2031 | | resolved_inputs, |
| 2032 | | &checked_paths, |
| 2033 | | &ld_script_bytes, |
| 2034 | | lib_directory, |
| 2035 | | name_query, |
| 2036 | | target, |
| 2037 | | query.preferred_mode, |
| 2038 | | color, |
| 2039 | | )) { |
| 2040 | | .ok => continue :syslib, |
| 2041 | | .no_match => {}, |
| 2042 | | } |
| 2043 | | |
| 2044 | | // check for fallback mode |
| 2045 | | switch (try resolveLibInput( |
| 2046 | | gpa, |
| 2047 | | arena, |
| 2048 | | unresolved_inputs, |
| 2049 | | resolved_inputs, |
| 2050 | | &checked_paths, |
| 2051 | | &ld_script_bytes, |
| 2052 | | lib_directory, |
| 2053 | | name_query, |
| 2054 | | target, |
| 2055 | | query.fallbackMode(), |
| 2056 | | color, |
| 2057 | | )) { |
| 2058 | | .ok => continue :syslib, |
| 2059 | | .no_match => {}, |
| 2060 | | } |
| 2061 | | } |
| 2062 | | try failed_libs.append(arena, .{ |
| 2063 | | .name = name_query.name, |
| 2064 | | .strategy = query.search_strategy, |
| 2065 | | .checked_paths = try arena.dupe(u8, checked_paths.items), |
| 2066 | | .preferred_mode = query.preferred_mode, |
| 2067 | | }); |
| 2068 | | continue :syslib; |
| 2069 | | }, |
| 2070 | 2071 | } |
| 2071 | 2072 | @compileError("unreachable"); |
| 2072 | 2073 | } |