MCPcopy Create free account
hub / github.com/Kitware/CMake / PopulatePCTarget

Function PopulatePCTarget

Source/cmCMakePkgConfigCommand.cxx:899–968  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

897auto const PopulateParser = BIND_POPULATE(PopulateArguments);
898
899std::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)) {

Callers 2

HandlePopulateCommandFunction · 0.85
HandleImportCommandFunction · 0.85

Calls 14

HandleCommonFunction · 0.85
ImportPackageFunction · 0.85
CheckPackageDependenciesFunction · 0.85
moveFunction · 0.85
CreateCMakeTargetFunction · 0.85
emplaceMethod · 0.80
eraseMethod · 0.80
cmStrCatFunction · 0.70
GetMakefileMethod · 0.45
findMethod · 0.45
substrMethod · 0.45
SetErrorMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…