xmake.lua 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package("coin-or-clp")
  2. set_homepage("https://github.com/coin-or/Clp")
  3. set_description("COIN-OR Linear Programming Solver")
  4. set_license("EPL-2.0")
  5. add_urls("https://github.com/coin-or/Clp/archive/refs/tags/releases/$(version).tar.gz",
  6. "https://github.com/coin-or/Clp.git")
  7. add_versions("1.17.10", "0d79ece896cdaa4a3855c37f1c28e6c26285f74d45f635046ca0b6d68a509885")
  8. if is_plat("mingw") and is_subhost("msys") then
  9. add_extsources("pacman::coin-or-clp")
  10. elseif is_plat("linux") then
  11. add_extsources("apt::coinor-libclp-dev", "pacman::coin-or-clp")
  12. elseif is_plat("macosx") then
  13. add_extsources("brew::clp")
  14. end
  15. on_load(function (package)
  16. package:add("deps", "coin-or-coinutils", "coin-or-osi")
  17. package:add("defines", "COIN_HAS_COINUTILS", "COIN_HAS_OSI")
  18. if package:is_plat("linux") then
  19. package:add("deps", "lapack")
  20. end
  21. end)
  22. add_includedirs("include", "include/coin")
  23. on_install(function (package)
  24. io.replace("Clp/src/ClpSolve.cpp", "#define UFL_BARRIER", "", {plain = true})
  25. io.replace("Clp/src/ClpSolver.cpp", "extern glp_tran *cbc_glp_tran;\nextern glp_prob *cbc_glp_prob;",
  26. "glp_tran *cbc_glp_tran = NULL;\nglp_prob *cbc_glp_prob = NULL;", {plain = true})
  27. io.replace("Clp/src/CbcOrClpParam.cpp", [[#include "CoinTime.hpp"]],
  28. [[#include "CoinTime.hpp"
  29. #include "CoinFinite.hpp"]], {plain = true})
  30. io.gsub("Clp/src/config.h.in", "# *undef (.-)\n", "${define %1}\n")
  31. os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
  32. import("package.tools.xmake").install(package)
  33. end)
  34. on_test(function (package)
  35. assert(package:check_cxxsnippets({test = [[
  36. #include <ClpSimplex.hpp>
  37. void test() {
  38. ClpSimplex model;
  39. double obj[] = {1.0, 1.0};
  40. CoinPackedMatrix matrix;
  41. matrix.setDimensions(0, 2);
  42. double colLB[] = {0.0, 0.0};
  43. double colUB[] = {COIN_DBL_MAX, COIN_DBL_MAX};
  44. model.loadProblem(matrix, colLB, colUB, obj, nullptr, nullptr);
  45. model.primal();
  46. }
  47. ]]}, {configs = {languages = "c++11"}}))
  48. end)