| 897 | auto const PopulateParser = BIND_POPULATE(PopulateArguments); |
| 898 | |
| 899 | std::pair<bool, bool> PopulatePCTarget(PopulateArguments& args, |
| 900 | cmExecutionStatus& status) |
| 901 | { |
| 902 | |
| 903 | std::string prefix = args.Prefix ? cmStrCat(*args.Prefix, "_"_s) : ""; |
| 904 | |
| 905 | auto& mf = status.GetMakefile(); |
| 906 | auto maybeEnv = HandleCommon(args, status); |
| 907 | |
| 908 | if (!maybeEnv) { |
| 909 | return { !args.Required, false }; |
| 910 | } |
| 911 | auto& pcEnv = maybeEnv->first; |
| 912 | auto& imEnv = maybeEnv->second; |
| 913 | |
| 914 | pcEnv.AllowSysCflags = true; |
| 915 | pcEnv.AllowSysLibs = true; |
| 916 | |
| 917 | pkgProviders providers; |
| 918 | if (args.Providers) { |
| 919 | for (auto const& provider_str : *args.Providers) { |
| 920 | auto assignment = provider_str.find('='); |
| 921 | if (assignment != std::string::npos) { |
| 922 | providers.emplace(provider_str.substr(0, assignment), |
| 923 | provider_str.substr(assignment + 1)); |
| 924 | } else { |
| 925 | imEnv.status.SetError(cmStrCat( |
| 926 | "No '=' found in BIND_PC_REQUIRES argument '", provider_str, '\'')); |
| 927 | cmSystemTools::SetFatalErrorOccurred(); |
| 928 | return { false, false }; |
| 929 | } |
| 930 | } |
| 931 | } |
| 932 | |
| 933 | pkgStack inStack; |
| 934 | std::unordered_map<std::string, cmPkgConfigResult> outStack; |
| 935 | |
| 936 | auto maybePackage = ImportPackage(*args.Package, args.Version, imEnv, pcEnv); |
| 937 | if (!maybePackage) { |
| 938 | return { !args.Required, false }; |
| 939 | } |
| 940 | imEnv.exact = false; |
| 941 | |
| 942 | if (!CheckPackageDependencies(*args.Package, prefix, *maybePackage, inStack, |
| 943 | outStack, providers, imEnv)) { |
| 944 | return { !args.Required, false }; |
| 945 | } |
| 946 | outStack[*args.Package] = std::move(*maybePackage); |
| 947 | |
| 948 | while (!inStack.empty()) { |
| 949 | auto name = inStack.begin()->first; |
| 950 | auto reqs = inStack.begin()->second; |
| 951 | maybePackage = ImportPackage(name, reqs, imEnv, pcEnv); |
| 952 | if (!maybePackage) { |
| 953 | return { !args.Required, false }; |
| 954 | } |
| 955 | if (!CheckPackageDependencies(name, prefix, *maybePackage, inStack, |
| 956 | outStack, providers, imEnv)) { |
no test coverage detected
searching dependent graphs…