From 61d9e8699687342c2e32c32c8d4eb71760d5d290 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 26 Jun 2021 17:33:24 +0200 Subject: Use fork/exec instead of popen. Add Path class --- src/CmakeModule.cpp | 53 +++++++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 28 deletions(-) (limited to 'src/CmakeModule.cpp') diff --git a/src/CmakeModule.cpp b/src/CmakeModule.cpp index 5bf9400..a706e64 100644 --- a/src/CmakeModule.cpp +++ b/src/CmakeModule.cpp @@ -131,10 +131,10 @@ namespace sibs // CMakeLists.txt may contain: set(CMAKE_MODULE_PATH "PathToModules"). This needs to be replaced with list append, // otherwise our added module path is replaced. // It may work to do like vcpkg instead - to use -DCMAKE_TOOLCHAIN_FILE program argument to specify path to script (https://github.com/Microsoft/vcpkg/blob/master/docs/examples/using-sqlite.md) - vector globalLibDependencies; + vector globalLibDependencies; #if OS_FAMILY == OS_FAMILY_POSIX - vector pkgConfigDependencies; - for(PackageListDependency *dependency : config.getPackageListDependencies()) + vector pkgConfigDependencies; + for(const PackageListDependency &dependency : config.getPackageListDependencies()) { Result pkgConfigDependencyValidation = PkgConfig::validatePkgConfigPackageVersionExists(dependency); if(pkgConfigDependencyValidation.isOk()) @@ -153,7 +153,7 @@ namespace sibs { printf("%s, using global lib...\n", pkgConfigLinkerFlagsResult.getErrMsg().c_str()); globalLibDependencies.reserve(globalLibDependencies.size() + pkgConfigDependencies.size()); - for (PackageListDependency *pkgConfigDependency : pkgConfigDependencies) + for (const PackageListDependency &pkgConfigDependency : pkgConfigDependencies) { globalLibDependencies.push_back(pkgConfigDependency); } @@ -165,7 +165,7 @@ namespace sibs dynamicLinkerFlagCallbackFunc(pkgConfigLinkerFlagsResult.unwrap()); } #else - for (PackageListDependency *dependency : config.getPackageListDependencies()) + for (const PackageListDependency &dependency : config.getPackageListDependencies()) { globalLibDependencies.push_back(dependency); } @@ -194,8 +194,7 @@ namespace sibs _putenv("CXXFLAGS=-fPIC"); #endif #endif - FileString cmd = cmakePath; - cmd += TINYDIR_STRING(" "); + std::vector cmd = { cmakePath }; FileString cflags = TINYDIR_STRING("-fPIC"); FileString cxxflags; @@ -240,56 +239,57 @@ namespace sibs } cxxflags = cflags; - cmd += TINYDIR_STRING(" \"-DCMAKE_C_FLAGS=") + cflags + TINYDIR_STRING("\""); - cmd += TINYDIR_STRING(" \"-DCMAKE_CXX_FLAGS=") + cxxflags + TINYDIR_STRING("\" "); + cmd.push_back(TINYDIR_STRING("-DCMAKE_C_FLAGS=") + cflags); + cmd.push_back(TINYDIR_STRING("-DCMAKE_CXX_FLAGS=") + cxxflags); switch(config.getPackageType()) { case PackageType::EXECUTABLE: { - cmd += config.getCmakeArgs(); + auto cmake_args = config.getCmakeArgs(); + cmd.insert(cmd.end(), cmake_args.begin(), cmake_args.end()); break; } case PackageType::STATIC: { - cmd += config.getCmakeArgsStatic(); + auto cmake_args = config.getCmakeArgsStatic(); + cmd.insert(cmd.end(), cmake_args.begin(), cmake_args.end()); break; } case PackageType::DYNAMIC: case PackageType::LIBRARY: { - cmd += config.getCmakeArgsDynamic(); + auto cmake_args = config.getCmakeArgsDynamic(); + cmd.insert(cmd.end(), cmake_args.begin(), cmake_args.end()); break; } } - //cmd += TINYDIR_STRING(" -DCMAKE_SKIP_RPATH=\"1\""); - cmd += TINYDIR_STRING(" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"); - cmd += TINYDIR_STRING(" \"-B"); - cmd += buildPath; - cmd += TINYDIR_STRING("\" \"-H"); + //cmd.push_back(TINYDIR_STRING("-DCMAKE_SKIP_RPATH=1")); + cmd.push_back(TINYDIR_STRING("-DCMAKE_EXPORT_COMPILE_COMMANDS=ON")); + cmd.push_back(TINYDIR_STRING("-B") + buildPath); + cmd.push_back(TINYDIR_STRING("-H")); switch(config.getPackageType()) { case PackageType::EXECUTABLE: { - cmd += config.getCmakeDir(); + cmd.back() += config.getCmakeDir(); break; } case PackageType::STATIC: { - cmd += config.getCmakeDirStatic(); + cmd.back() += config.getCmakeDirStatic(); break; } case PackageType::DYNAMIC: case PackageType::LIBRARY: { - cmd += config.getCmakeDirDynamic(); + cmd.back() += config.getCmakeDirDynamic(); break; } } - cmd += TINYDIR_STRING("\""); - nprintf("Compiling with cmake with arguments: %s\n", cmd.c_str()); + //nprintf("Compiling with cmake with arguments: %s\n", cmd.c_str()); - Result execResult = exec(cmd.c_str(), true); + Result execResult = exec(cmd, true); if(execResult.isOk()) { if(execResult.unwrap().exitCode != 0) @@ -298,11 +298,8 @@ namespace sibs else return Result::Err(execResult); - FileString ninjaCommand = TINYDIR_STRING("ninja -C \""); - ninjaCommand += buildPath; - ninjaCommand += TINYDIR_STRING("\""); - nprintf("Compiling cmake generated ninja file: %s\n", ninjaCommand.c_str()); - execResult = exec(ninjaCommand.c_str(), true); + //nprintf("Compiling cmake generated ninja file: %s\n", buildPath.c_str()); + execResult = exec({ TINYDIR_STRING("ninja"), TINYDIR_STRING("-C"), buildPath }, true); if(execResult.isOk()) { if(execResult.unwrap().exitCode != 0) -- cgit v1.2.3