| 132 | #endif |
| 133 | |
| 134 | void MznDriver::setLocation(const QString &mznDistribPath) |
| 135 | { |
| 136 | clear(); |
| 137 | |
| 138 | _mznDistribPath = mznDistribPath; |
| 139 | MznProcess p; |
| 140 | QRegularExpression version_regexp("version (\\d+)\\.(\\d+)\\.(\\d+)"); |
| 141 | _minizincExecutable = QStringList({"minizinc"}); |
| 142 | |
| 143 | #ifdef Q_OS_MAC |
| 144 | int isTranslated = 0; |
| 145 | { |
| 146 | size_t size = sizeof(isTranslated); |
| 147 | if (sysctlbyname("sysctl.proc_translated", &isTranslated, &size, NULL, 0) == -1) { |
| 148 | isTranslated = 0; |
| 149 | } |
| 150 | } |
| 151 | |
| 152 | if (isTranslated) { |
| 153 | _minizincExecutable = QStringList({"arch", "-arch", "arm64", "minizinc"}); |
| 154 | } |
| 155 | for (int i = 0; i <= isTranslated; i++) { |
| 156 | if (i == 1) { |
| 157 | _minizincExecutable = QStringList({"minizinc"}); |
| 158 | } |
| 159 | try { |
| 160 | auto result = p.run({"--version"}); |
| 161 | _versionString = result.stdOut + result.stdErr; |
| 162 | QRegularExpressionMatch path_match = version_regexp.match(_versionString); |
| 163 | if (path_match.hasMatch()) { |
| 164 | break; |
| 165 | } |
| 166 | } catch (ProcessError& e) { |
| 167 | if (i == isTranslated) { |
| 168 | clear(); |
| 169 | throw; |
| 170 | } |
| 171 | } |
| 172 | } |
| 173 | #else |
| 174 | try { |
| 175 | auto result = p.run({"--version"}); |
| 176 | _versionString = result.stdOut + result.stdErr; |
| 177 | } catch (ProcessError&) { |
| 178 | clear(); |
| 179 | throw; |
| 180 | } |
| 181 | #endif |
| 182 | |
| 183 | QRegularExpressionMatch path_match = version_regexp.match(_versionString); |
| 184 | if (path_match.hasMatch()) { |
| 185 | _version = QVersionNumber( |
| 186 | path_match.captured(1).toInt(), |
| 187 | path_match.captured(2).toInt(), |
| 188 | path_match.captured(3).toInt() |
| 189 | ); |
| 190 | } else { |
| 191 | QString message = _versionString; |
no test coverage detected