11 #include <sys/types.h> 
   17 #elif __APPLE__ && __MACH__ 
   19 #include <mach-o/dyld.h> 
   33             std::ifstream ifile(filename.c_str());
 
   40             DWORD ftyp = GetFileAttributesA(folder.c_str());
 
   41             if (ftyp == INVALID_FILE_ATTRIBUTES)
 
   46             if (ftyp & FILE_ATTRIBUTE_DIRECTORY)
 
   48                 if (0 == access(folder.c_str(), R_OK))
 
   59             if (stat(folder.c_str(), &sb) == 0 && S_ISDIR(sb.st_mode))
 
   61                 if (0 == access(folder.c_str(), R_OK))
 
   74             DWORD ret = GetModuleFileNameA(NULL, buf, 
sizeof(buf));
 
   75             if (ret == 0 || ret == 
sizeof(buf))
 
   79             return std::filesystem::path(buf);
 
   80 #elif __APPLE__ && __MACH__ 
   81             uint32_t size = 
sizeof(buf);
 
   82             int ret       = _NSGetExecutablePath(buf, &size);
 
   89             std::filesystem::path p(std::filesystem::canonical(buf, ec));
 
   90             return p.parent_path().make_preferred();
 
   92             ssize_t size = readlink(
"/proc/self/exe", buf, 
sizeof(buf));
 
   93             std::string path(buf, size);
 
   95             auto p = std::filesystem::canonical(path, ec);
 
   96             return p.make_preferred().parent_path();
 
  102             auto environ_path = std::getenv(
"HAL_BASE_PATH");
 
  105                 return std::filesystem::path(environ_path).make_preferred();
 
  109             while (std::filesystem::exists(bin_dir))
 
  111                 if (std::filesystem::exists(bin_dir / 
"hal", ec))
 
  113                     return bin_dir.parent_path();
 
  115                 if (!bin_dir.has_relative_path())
 
  119                 bin_dir = bin_dir.parent_path();
 
  121             std::filesystem::path which_result = 
which(
"hal");
 
  122             if (!which_result.empty())
 
  124                 return which_result.parent_path().parent_path();
 
  126             die(
"core", 
"Cannot determine base path of hal installation. Please set the environment variable HAL_BASE_PATH. Giving up!");
 
  131             std::vector<std::filesystem::path> path_hints = {
 
  137             for (
const auto& path : path_hints)
 
  140                 if (std::filesystem::exists(path / 
"hal_plugins", ec))
 
  146             return std::filesystem::path();
 
  151             std::vector<std::filesystem::path> path_hints = {
 
  159             std::filesystem::path dir = std::filesystem::path(getenv(
"HOME")) / 
".local/share/hal";
 
  160             std::filesystem::create_directories(dir);
 
  166             std::vector<std::filesystem::path> path_hints = {
 
  174             std::filesystem::path dir = std::filesystem::path(getenv(
"HOME")) / 
".config/hal";
 
  175             std::filesystem::create_directories(dir);
 
  182             std::filesystem::create_directories(dir);
 
  188             std::vector<std::filesystem::path> path_hints = {
 
  197             std::vector<std::filesystem::path> path_hints = {
 
  202                 std::filesystem::path(getenv(
"HOME")) / 
"plugins/",
 
  209             for (
const auto& path : path_hints)
 
  212                 if (std::filesystem::exists(path, ec))
 
  217             return std::filesystem::path();
 
  220         std::filesystem::path 
get_file(std::string file_name, std::vector<std::filesystem::path> path_hints)
 
  222             if (file_name.empty())
 
  224                 return std::filesystem::path();
 
  227             for (
const auto& path : path_hints)
 
  230                 if (std::filesystem::exists(std::filesystem::path(path), ec1))
 
  232                     std::filesystem::path file_path = std::filesystem::path(path) / std::filesystem::path(file_name).string();
 
  234                     if (std::filesystem::exists(file_path, ec2))
 
  240             return std::filesystem::path();
 
  243         std::filesystem::path 
which(
const std::string& 
name, 
const std::string& path)
 
  247                 return std::filesystem::path();
 
  249             std::string internal_path = path;
 
  250             if (internal_path.empty())
 
  252                 internal_path = std::getenv(
"PATH");
 
  255             const char which_delimiter = 
';';
 
  256             return std::filesystem::path();    
 
  258             const char which_delimiter = 
':';
 
  260             auto folders = 
split(internal_path, which_delimiter, 
false);
 
  261             for (
const auto& folder : folders)
 
  265                 std::filesystem::path p = std::filesystem::path(folder) / 
name;
 
  268                 if (stat(p.c_str(), &sb) == 0 && sb.st_mode & S_IXUSR)
 
  273             return std::filesystem::path();
 
  278             const auto tmp_dir = std::filesystem::temp_directory_path();
 
  280             std::random_device dev;
 
  281             std::mt19937 prng(dev());
 
  282             std::uniform_int_distribution<uint64_t> rand(0);
 
  284             for (
u32 i = 0; i < max_attmeps; i++)
 
  286                 std::stringstream ss;
 
  287                 ss << std::setw(16) << std::setfill(
'0') << std::hex << rand(prng);
 
  288                 std::filesystem::path tmp_path = tmp_dir / (prefix + ss.str());
 
  290                 if (std::filesystem::create_directories(tmp_path))
 
  296             return ERR(
"failed to create unique temporary directory path");
 
  301             return R
"(pybind11 (https://github.com/pybind/pybind11): 
  302 Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>, All rights reserved. 
  304 Redistribution and use in source and binary forms, with or without 
  305 modification, are permitted provided that the following conditions are met: 
  307 1. Redistributions of source code must retain the above copyright notice, this 
  308    list of conditions and the following disclaimer. 
  310 2. Redistributions in binary form must reproduce the above copyright notice, 
  311    this list of conditions and the following disclaimer in the documentation 
  312    and/or other materials provided with the distribution. 
  314 3. Neither the name of the copyright holder nor the names of its contributors 
  315    may be used to endorse or promote products derived from this software 
  316    without specific prior written permission. 
  318 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
  319 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  320 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  321 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 
  322 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  323 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
  324 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
  325 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
  326 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
  327 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  329 Please also refer to the file CONTRIBUTING.md, which clarifies licensing of 
  330 external contributions to this project including patches, pull requests, etc. 
  332 ================================================================================= 
  334 rapidjson (https://github.com/Tencent/rapidjson): 
  336 Tencent is pleased to support the open source community by making RapidJSON 
  339 Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.  All 
  342 If you have downloaded a copy of the RapidJSON binary from Tencent, please 
  343 note that the RapidJSON binary is licensed under the MIT License. If you have 
  344 downloaded a copy of the RapidJSON source code from Tencent, please note that 
  345 RapidJSON source code is licensed under the MIT License, except for the 
  346 third-party components listed below which are subject to different license 
  347 terms.  Your integration of RapidJSON into your own projects may require 
  348 compliance with the MIT License, as well as the other licenses applicable to 
  349 the third-party components included within RapidJSON. To avoid the problematic 
  350 JSON license in your own projects, it's sufficient to exclude the 
  351 bin/jsonchecker/ directory, as it's the only code under the JSON license. A 
  352 copy of the MIT License is included in this file. 
  354 Other dependencies and licenses: 
  356 Open Source Software Licensed Under the BSD License: 
  357 -------------------------------------------------------------------- 
  359 The msinttypes r29 Copyright (c) 2006-2013 Alexander Chemeris All rights 
  362 Redistribution and use in source and binary forms, with or without 
  363 modification, are permitted provided that the following conditions are met: 
  365 * Redistributions of source code must retain the above copyright notice, this 
  366   list of conditions and the following disclaimer. 
  367 * Redistributions in binary form must reproduce the above copyright notice, 
  368   this list of conditions and the following disclaimer in the documentation 
  369   and/or other materials provided with the distribution. 
  370 * Neither the name of  copyright holder nor the names of its contributors may 
  371   be used to endorse or promote products derived from this software without 
  372   specific prior written permission. 
  374 THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY 
  375 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  376 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  377 DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY 
  378 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  379 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
  380 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
  381 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
  382 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
  383 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  385 Open Source Software Licensed Under the JSON License: 
  386 -------------------------------------------------------------------- 
  388 json.org Copyright (c) 2002 JSON.org All Rights Reserved. 
  390 JSON_checker Copyright (c) 2002 JSON.org All Rights Reserved. 
  393 Terms of the JSON License: 
  394 --------------------------------------------------- 
  396 Permission is hereby granted, free of charge, to any person obtaining a copy 
  397 of this software and associated documentation files (the "Software"), to deal 
  398 in the Software without restriction, including without limitation the rights 
  399 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
  400 copies of the Software, and to permit persons to whom the Software is 
  401 furnished to do so, subject to the following conditions: 
  403 The above copyright notice and this permission notice shall be included in all 
  404 copies or substantial portions of the Software. 
  406 The Software shall be used for Good, not Evil. 
  408 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  409 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  410 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
  411 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
  412 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
  413 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
  417 Terms of the MIT License: 
  418 -------------------------------------------------------------------- 
  420 Permission is hereby granted, free of charge, to any person obtaining a copy 
  421 of this software and associated documentation files (the "Software"), to deal 
  422 in the Software without restriction, including without limitation the rights 
  423 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
  424 copies of the Software, and to permit persons to whom the Software is 
  425 furnished to do so, subject to the following conditions: 
  427 The above copyright notice and this permission notice shall be included in all 
  428 copies or substantial portions of the Software. 
  430 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  431 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  432 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
  433 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
  434 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
  435 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
  438 ================================================================================= 
  440 sanitizers-cmake (https://github.com/arsenm/sanitizers-cmake): 
  441 The MIT License (MIT) 
  444     2013 Matthew Arsenault 
  445     2015-2016 RWTH Aachen University, Federal Republic of Germany 
  447 Permission is hereby granted, free of charge, to any person obtaining a copy of 
  448 this software and associated documentation files (the "Software"), to deal in 
  449 the Software without restriction, including without limitation the rights to 
  450 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 
  451 the Software, and to permit persons to whom the Software is furnished to do so, 
  452 subject to the following conditions: 
  454 The above copyright notice and this permission notice shall be included in all 
  455 copies or substantial portions of the Software. 
  457 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  458 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 
  459 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 
  460 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
  461 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 
  462 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
  464 ================================================================================= 
  466 spdlog (https://github.com/gabime/spdlog): 
  467 The MIT License (MIT) 
  469 Copyright (c) 2016 Gabi Melman. 
  471 Permission is hereby granted, free of charge, to any person obtaining a copy 
  472 of this software and associated documentation files (the "Software"), to deal 
  473 in the Software without restriction, including without limitation the rights 
  474 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
  475 copies of the Software, and to permit persons to whom the Software is 
  476 furnished to do so, subject to the following conditions: 
  478 The above copyright notice and this permission notice shall be included in 
  479 all copies or substantial portions of the Software. 
  481 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  482 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  483 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE 
  484 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
  485 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
  486 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
  489 ================================================================================= 
  491 Boost (https://www.boost.org/) 
  492 Boost Software License - Version 1.0 - August 17th, 2003 
  494 Permission is hereby granted, free of charge, to any person or organization 
  495 obtaining a copy of the software and accompanying documentation covered by 
  496 this license (the "Software") to use, reproduce, display, distribute, 
  497 execute, and transmit the Software, and to prepare derivative works of the 
  498 Software, and to permit third-parties to whom the Software is furnished to 
  499 do so, all subject to the following: 
  501 The copyright notices in the Software and this entire statement, including 
  502 the above license grant, this restriction and the following disclaimer, 
  503 must be included in all copies of the Software, in whole or in part, and 
  504 all derivative works of the Software, unless such copies or derivative 
  505 works are solely in the form of machine-executable object code generated by 
  506 a source language processor. 
  508 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  509 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  510 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 
  511 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 
  512 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 
  513 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
  514 DEALINGS IN THE SOFTWARE. 
  516 ================================================================================= 
  518 Qt (https://www.qt.io/) 
  519             GNU LESSER GENERAL PUBLIC LICENSE 
  521  The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd. 
  522  Contact: http://www.qt.io/licensing/ 
  524  You may use, distribute and copy the Qt Toolkit under the terms of 
  525  GNU Lesser General Public License version 3, which is displayed below. 
  526  This license makes reference to the version 3 of the GNU General 
  527  Public License, which you can find in the LICENSE.GPLv3 file. 
  529 ------------------------------------------------------------------------- 
  531             GNU LESSER GENERAL PUBLIC LICENSE 
  532                 Version 3, 29 June 2007 
  534  Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/> 
  535 Everyone is permitted to copy and distribute verbatim copies of this 
  536 licensedocument, but changing it is not allowed. 
  538 This version of the GNU Lesser General Public License incorporates 
  539 the terms and conditions of version 3 of the GNU General Public 
  540 License, supplemented by the additional permissions listed below. 
  542 0. Additional Definitions. 
  544  As used herein, “this License” refers to version 3 of the GNU Lesser 
  545 General Public License, and the “GNU GPL” refers to version 3 of the 
  546 GNU General Public License. 
  548  “The Library” refers to a covered work governed by this License, 
  549 other than an Application or a Combined Work as defined below. 
  551  An “Application” is any work that makes use of an interface provided 
  552 by the Library, but which is not otherwise based on the Library. 
  553 Defining a subclass of a class defined by the Library is deemed a mode 
  554 of using an interface provided by the Library. 
  556  A “Combined Work” is a work produced by combining or linking an 
  557 Application with the Library. The particular version of the Library 
  558 with which the Combined Work was made is also called the “Linked 
  561  The “Minimal Corresponding Source” for a Combined Work means the 
  562 Corresponding Source for the Combined Work, excluding any source code 
  563 for portions of the Combined Work that, considered in isolation, are 
  564 based on the Application, and not on the Linked Version. 
  566  The “Corresponding Application Code” for a Combined Work means the 
  567 object code and/or source code for the Application, including any data 
  568 and utility programs needed for reproducing the Combined Work from the 
  569 Application, but excluding the System Libraries of the Combined Work. 
  571 1. Exception to Section 3 of the GNU GPL. 
  573  You may convey a covered work under sections 3 and 4 of this License 
  574 without being bound by section 3 of the GNU GPL. 
  576 2. Conveying Modified Versions. 
  578  If you modify a copy of the Library, and, in your modifications, a 
  579 facility refers to a function or data to be supplied by an Application 
  580 that uses the facility (other than as an argument passed when the 
  581 facility is invoked), then you may convey a copy of the modified 
  584     a) under this License, provided that you make a good faith effort 
  585     to ensure that, in the event an Application does not supply the 
  586     function or data, the facility still operates, and performs 
  587     whatever part of its purpose remains meaningful, or 
  589     b) under the GNU GPL, with none of the additional permissions of 
  590     this License applicable to that copy. 
  592 3. Object Code Incorporating Material from Library Header Files. 
  594  The object code form of an Application may incorporate material from 
  595 a header file that is part of the Library. You may convey such object 
  596 code under terms of your choice, provided that, if the incorporated 
  597 material is not limited to numerical parameters, data structure 
  598 layouts and accessors, or small macros, inline functions and templates 
  599 (ten or fewer lines in length), you do both of the following: 
  601     a) Give prominent notice with each copy of the object code that 
  602     the Library is used in it and that the Library and its use are 
  603     covered by this License. 
  605     b) Accompany the object code with a copy of the GNU GPL and this 
  610  You may convey a Combined Work under terms of your choice that, taken 
  611 together, effectively do not restrict modification of the portions of 
  612 the Library contained in the Combined Work and reverse engineering for 
  613 debugging such modifications, if you also do each of the following: 
  615     a) Give prominent notice with each copy of the Combined Work that 
  616     the Library is used in it and that the Library and its use are 
  617     covered by this License. 
  619     b) Accompany the Combined Work with a copy of the GNU GPL and this 
  622     c) For a Combined Work that displays copyright notices during 
  623     execution, include the copyright notice for the Library among 
  624     these notices, as well as a reference directing the user to the 
  625     copies of the GNU GPL and this license document. 
  627     d) Do one of the following: 
  629         0) Convey the Minimal Corresponding Source under the terms of 
  630         this License, and the Corresponding Application Code in a form 
  631         suitable for, and under terms that permit, the user to 
  632         recombine or relink the Application with a modified version of 
  633         the Linked Version to produce a modified Combined Work, in the 
  634         manner specified by section 6 of the GNU GPL for conveying 
  635         Corresponding Source. 
  637         1) Use a suitable shared library mechanism for linking with 
  638         the Library. A suitable mechanism is one that (a) uses at run 
  639         time a copy of the Library already present on the user's 
  640         computer system, and (b) will operate properly with a modified 
  641         version of the Library that is interface-compatible with the 
  644     e) Provide Installation Information, but only if you would 
  645     otherwise be required to provide such information under section 6 
  646     of the GNU GPL, and only to the extent that such information is 
  647     necessary to install and execute a modified version of the 
  648     Combined Work produced by recombining or relinking the Application 
  649     with a modified version of the Linked Version. (If you use option 
  650     4d0, the Installation Information must accompany the Minimal 
  651     Corresponding Source and Corresponding Application Code. If you 
  652     use option 4d1, you must provide the Installation Information in 
  653     the manner specified by section 6 of the GNU GPL for conveying 
  654     Corresponding Source.) 
  656 5. Combined Libraries. 
  658  You may place library facilities that are a work based on the Library 
  659 side by side in a single library together with other library 
  660 facilities that are not Applications and are not covered by this 
  661 License, and convey such a combined library under terms of your 
  662 choice, if you do both of the following: 
  664     a) Accompany the combined library with a copy of the same work 
  665     based on the Library, uncombined with any other library 
  666     facilities, conveyed under the terms of this License. 
  668     b) Give prominent notice with the combined library that part of 
  669     it is a work based on the Library, and explaining where to find 
  670     the accompanying uncombined form of the same work. 
  672 6. Revised Versions of the GNU Lesser General Public License. 
  674  The Free Software Foundation may publish revised and/or new versions 
  675 of the GNU Lesser General Public License from time to time. Such new 
  676 versions will be similar in spirit to the present version, but may 
  677 differ in detail to address new problems or concerns. 
  679 Each version is given a distinguishing version number. If the Library 
  680 as you received it specifies that a certain numbered version of the 
  681 GNU Lesser General Public License “or any later version” applies to 
  682 it, you have the option of following the terms and conditions either 
  683 of that published version or of any later version published by the 
  684 Free Software Foundation. If the Library as you received it does not 
  685 specify a version number of the GNU Lesser General Public License, 
  686 you may choose any version of the GNU Lesser General Public License 
  687 ever published by the Free Software Foundation. 
  689 If the Library as you received it specifies that a proxy can decide 
  690 whether future versions of the GNU Lesser General Public License shall 
  691 apply, that proxy's public statement of acceptance of any version is 
  692 permanent authorization for you to choose that version for the Library. 
  700                 return OK(std::stoull(s, 
nullptr, base));
 
  702             catch (
const std::invalid_argument& e)
 
  704                 return ERR(
"could not get u64 from string '" + s + 
"': " + e.what());
 
  706             catch (
const std::out_of_range& e)
 
  708                 return ERR(
"could not get u64 from string '" + s + 
"': " + e.what());
 
  711             return ERR(
"encountered unknown error");
 
  718                 return OK((
u32)std::stoul(s, 
nullptr, base));
 
  720             catch (
const std::invalid_argument& e)
 
  722                 return ERR(
"could not get u32 from string '" + s + 
"': " + e.what());
 
  724             catch (
const std::out_of_range& e)
 
  726                 return ERR(
"could not get u32 from string '" + s + 
"': " + e.what());
 
  729             return ERR(
"encountered unknown error");
 
std::filesystem::path get_config_directory()
std::filesystem::path get_user_share_directory()
std::filesystem::path get_first_directory_exists(std::vector< std::filesystem::path > path_hints)
CORE_API std::vector< T > split(const T &s, const char delim, bool obey_brackets=false)
std::filesystem::path get_share_directory()
Result< std::filesystem::path > get_unique_temp_directory(const std::string &prefix, const u32 max_attmeps)
std::vector< std::filesystem::path > get_gate_library_directories()
std::filesystem::path get_base_directory()
std::string get_open_source_licenses()
std::filesystem::path get_library_directory()
Result< u64 > wrapped_stoull(const std::string &s, const u32 base)
std::filesystem::path get_user_config_directory()
Result< u32 > wrapped_stoul(const std::string &s, const u32 base)
std::vector< std::filesystem::path > get_plugin_directories()
std::filesystem::path which(const std::string &name, const std::string &path)
std::filesystem::path get_default_log_directory(std::filesystem::path source_file)
bool folder_exists_and_is_accessible(const std::filesystem::path &folder)
bool file_exists(const std::string &filename)
std::filesystem::path get_binary_directory()
std::filesystem::path get_file(std::string file_name, std::vector< std::filesystem::path > path_hints)
std::error_code error_code