From a483486296d379207d6ccf8932787059b6639ab1 Mon Sep 17 00:00:00 2001 From: Florian Berchtold Date: Sun, 20 Dec 2020 15:20:35 +0100 Subject: [PATCH 1/8] qpoases/3.2.1 --- recipes/qpoases/all/CMakeLists.txt | 7 +++ recipes/qpoases/all/conandata.yml | 4 ++ recipes/qpoases/all/conanfile.py | 61 ++++++++++++++++++ .../qpoases/all/test_package/CMakeLists.txt | 8 +++ recipes/qpoases/all/test_package/conanfile.py | 16 +++++ .../qpoases/all/test_package/test_package.cpp | 62 +++++++++++++++++++ recipes/qpoases/config.yml | 3 + 7 files changed, 161 insertions(+) create mode 100644 recipes/qpoases/all/CMakeLists.txt create mode 100644 recipes/qpoases/all/conandata.yml create mode 100644 recipes/qpoases/all/conanfile.py create mode 100644 recipes/qpoases/all/test_package/CMakeLists.txt create mode 100644 recipes/qpoases/all/test_package/conanfile.py create mode 100644 recipes/qpoases/all/test_package/test_package.cpp create mode 100644 recipes/qpoases/config.yml diff --git a/recipes/qpoases/all/CMakeLists.txt b/recipes/qpoases/all/CMakeLists.txt new file mode 100644 index 0000000000000..06981958954c6 --- /dev/null +++ b/recipes/qpoases/all/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.10) +project(cmake_wrapper) + +include(conanbuildinfo.cmake) +conan_basic_setup() + +add_subdirectory(source_subfolder) diff --git a/recipes/qpoases/all/conandata.yml b/recipes/qpoases/all/conandata.yml new file mode 100644 index 0000000000000..84a9b6ebffb36 --- /dev/null +++ b/recipes/qpoases/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + "3.2.1": + url: "https://github.com/coin-or/qpOASES/archive/releases/3.2.1.tar.gz" + sha256: "a7d153b4e23ee66bd50cdb6e84291d0084d9967a9c788a4d873440a6b10ca13b" diff --git a/recipes/qpoases/all/conanfile.py b/recipes/qpoases/all/conanfile.py new file mode 100644 index 0000000000000..7c08c61369d3b --- /dev/null +++ b/recipes/qpoases/all/conanfile.py @@ -0,0 +1,61 @@ +import glob +import os +from conans import ConanFile, CMake, tools + + +class ConanRecipe(ConanFile): + name = "qpoases" + + description = "Open-source C++ implementation of the recently proposed online active set strategy." + topics = ("conan", "container", "parametric", "quadratic", "programming") + + homepage = "https://github.com/coin-or/qpOASES" + url = "https://github.com/conan-io/conan-center-index" + + license = "LGPL-2.1" + + exports_sources = ["CMakeLists.txt"] + generators = "cmake" + + settings = "os", "arch", "compiler", "build_type" + options = { + "fPIC": [True, False], + "shared": [False], + } + default_options = {"fPIC": True, "shared": False} + + _cmake = None + + @property + def _source_subfolder(self): + return "source_subfolder" + + def source(self): + tools.get(**self.conan_data["sources"][self.version]) + extracted_dir = glob.glob("qpOASES-*/")[0] + os.rename(extracted_dir, self._source_subfolder) + + def _configure_cmake(self): + if self._cmake: + return self._cmake + self._cmake = CMake(self) + self._cmake.definitions["QPOASES_BUILD_EXAMPLES"] = False + self._cmake.configure() + return self._cmake + + def build(self): + cmake = self._configure_cmake() + cmake.build() + + def package(self): + self.copy("LICENSE", dst="licenses", src=self._source_subfolder) + cmake = self._configure_cmake() + cmake.install() + + def package_info(self): + self.cpp_info.names["cmake_find_package"] = "qpOASES" + self.cpp_info.names["cmake_find_package_multi"] = "qpOASES" + + self.cpp_info.components["qpOASES"].names["cmake_find_package"] = "qpOASES" + self.cpp_info.components["qpOASES"].names["cmake_find_package_multi"] = "qpOASES" + self.cpp_info.components["qpOASES"].libs = ["qpOASES"] diff --git a/recipes/qpoases/all/test_package/CMakeLists.txt b/recipes/qpoases/all/test_package/CMakeLists.txt new file mode 100644 index 0000000000000..eccbd4f23916c --- /dev/null +++ b/recipes/qpoases/all/test_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.10) +project(test_package CXX) + +find_package(qpOASES REQUIRED) + +add_executable(test_package test_package.cpp) + +target_link_libraries(test_package PRIVATE qpOASES::qpOASES) diff --git a/recipes/qpoases/all/test_package/conanfile.py b/recipes/qpoases/all/test_package/conanfile.py new file mode 100644 index 0000000000000..d8ea14efb8dbb --- /dev/null +++ b/recipes/qpoases/all/test_package/conanfile.py @@ -0,0 +1,16 @@ +import os + +from conans import ConanFile, CMake, tools + +class TestPackageConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "cmake_find_package" + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if not tools.cross_building(self.settings): + self.run("test_package", run_environment=True) diff --git a/recipes/qpoases/all/test_package/test_package.cpp b/recipes/qpoases/all/test_package/test_package.cpp new file mode 100644 index 0000000000000..4cc35c7cad9d1 --- /dev/null +++ b/recipes/qpoases/all/test_package/test_package.cpp @@ -0,0 +1,62 @@ +// from: https://github.com/coin-or/qpOASES/blob/master/examples/example1.cpp + +#include + + +/** Example for qpOASES main function using the QProblem class. */ +int main( ) +{ + USING_NAMESPACE_QPOASES + + /* Setup data of first QP. */ + real_t H[2*2] = { 1.0, 0.0, 0.0, 0.5 }; + real_t A[1*2] = { 1.0, 1.0 }; + real_t g[2] = { 1.5, 1.0 }; + real_t lb[2] = { 0.5, -2.0 }; + real_t ub[2] = { 5.0, 2.0 }; + real_t lbA[1] = { -1.0 }; + real_t ubA[1] = { 2.0 }; + + /* Setup data of second QP. */ + real_t g_new[2] = { 1.0, 1.5 }; + real_t lb_new[2] = { 0.0, -1.0 }; + real_t ub_new[2] = { 5.0, -0.5 }; + real_t lbA_new[1] = { -2.0 }; + real_t ubA_new[1] = { 1.0 }; + + + /* Setting up QProblem object. */ + QProblem example( 2,1 ); + + Options options; + example.setOptions( options ); + + /* Solve first QP. */ + int_t nWSR = 10; + example.init( H,g,A,lb,ub,lbA,ubA, nWSR ); + + /* Get and print solution of first QP. */ + real_t xOpt[2]; + real_t yOpt[2+1]; + example.getPrimalSolution( xOpt ); + example.getDualSolution( yOpt ); + printf( "\nxOpt = [ %e, %e ]; yOpt = [ %e, %e, %e ]; objVal = %e\n\n", + xOpt[0],xOpt[1],yOpt[0],yOpt[1],yOpt[2],example.getObjVal() ); + + /* Solve second QP. */ + nWSR = 10; + example.hotstart( g_new,lb_new,ub_new,lbA_new,ubA_new, nWSR ); + + /* Get and print solution of second QP. */ + example.getPrimalSolution( xOpt ); + example.getDualSolution( yOpt ); + printf( "\nxOpt = [ %e, %e ]; yOpt = [ %e, %e, %e ]; objVal = %e\n\n", + xOpt[0],xOpt[1],yOpt[0],yOpt[1],yOpt[2],example.getObjVal() ); + + example.printOptions(); + /*example.printProperties();*/ + + /*getGlobalMessageHandler()->listAllMessages();*/ + + return 0; +} diff --git a/recipes/qpoases/config.yml b/recipes/qpoases/config.yml new file mode 100644 index 0000000000000..c09805f11822d --- /dev/null +++ b/recipes/qpoases/config.yml @@ -0,0 +1,3 @@ +versions: + "3.2.1": + folder: all From 147acd9960276c4d9d475977faff4156eb01fe3d Mon Sep 17 00:00:00 2001 From: Florian Berchtold Date: Mon, 21 Dec 2020 10:47:49 +0100 Subject: [PATCH 2/8] comments --- recipes/qpoases/all/CMakeLists.txt | 2 +- recipes/qpoases/all/conanfile.py | 4 +--- recipes/qpoases/all/test_package/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/recipes/qpoases/all/CMakeLists.txt b/recipes/qpoases/all/CMakeLists.txt index 06981958954c6..bd3083b512cb9 100644 --- a/recipes/qpoases/all/CMakeLists.txt +++ b/recipes/qpoases/all/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.1) project(cmake_wrapper) include(conanbuildinfo.cmake) diff --git a/recipes/qpoases/all/conanfile.py b/recipes/qpoases/all/conanfile.py index 7c08c61369d3b..a9f82e7d2ffe9 100644 --- a/recipes/qpoases/all/conanfile.py +++ b/recipes/qpoases/all/conanfile.py @@ -56,6 +56,4 @@ def package_info(self): self.cpp_info.names["cmake_find_package"] = "qpOASES" self.cpp_info.names["cmake_find_package_multi"] = "qpOASES" - self.cpp_info.components["qpOASES"].names["cmake_find_package"] = "qpOASES" - self.cpp_info.components["qpOASES"].names["cmake_find_package_multi"] = "qpOASES" - self.cpp_info.components["qpOASES"].libs = ["qpOASES"] + self.cpp_info.libs = tools.collect_libs(self) diff --git a/recipes/qpoases/all/test_package/CMakeLists.txt b/recipes/qpoases/all/test_package/CMakeLists.txt index eccbd4f23916c..bba0cb766a8a5 100644 --- a/recipes/qpoases/all/test_package/CMakeLists.txt +++ b/recipes/qpoases/all/test_package/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.1) project(test_package CXX) find_package(qpOASES REQUIRED) From 67d243628fe2da64fbfb4435500c777d65a4f35f Mon Sep 17 00:00:00 2001 From: Florian Berchtold Date: Mon, 21 Dec 2020 23:18:21 +0100 Subject: [PATCH 3/8] Update recipes/qpoases/all/conanfile.py Co-authored-by: Uilian Ries --- recipes/qpoases/all/conanfile.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recipes/qpoases/all/conanfile.py b/recipes/qpoases/all/conanfile.py index a9f82e7d2ffe9..6cac2d96d81b6 100644 --- a/recipes/qpoases/all/conanfile.py +++ b/recipes/qpoases/all/conanfile.py @@ -30,6 +30,10 @@ class ConanRecipe(ConanFile): def _source_subfolder(self): return "source_subfolder" + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + def source(self): tools.get(**self.conan_data["sources"][self.version]) extracted_dir = glob.glob("qpOASES-*/")[0] From dbee32ca7aa0686f499df7d4ea41fa209501133f Mon Sep 17 00:00:00 2001 From: Florian Berchtold Date: Mon, 21 Dec 2020 23:27:55 +0100 Subject: [PATCH 4/8] no more glob --- recipes/qpoases/all/conanfile.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/recipes/qpoases/all/conanfile.py b/recipes/qpoases/all/conanfile.py index 6cac2d96d81b6..1f7008df111be 100644 --- a/recipes/qpoases/all/conanfile.py +++ b/recipes/qpoases/all/conanfile.py @@ -1,4 +1,3 @@ -import glob import os from conans import ConanFile, CMake, tools @@ -36,7 +35,7 @@ def config_options(self): def source(self): tools.get(**self.conan_data["sources"][self.version]) - extracted_dir = glob.glob("qpOASES-*/")[0] + extracted_dir = "qpOASES-releases-" + self.version os.rename(extracted_dir, self._source_subfolder) def _configure_cmake(self): From b0c2480760e9ac98bdc102bd7d39754b6b191800 Mon Sep 17 00:00:00 2001 From: Florian Berchtold Date: Tue, 22 Dec 2020 20:32:01 +0100 Subject: [PATCH 5/8] remove shared as option --- recipes/qpoases/all/conanfile.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/recipes/qpoases/all/conanfile.py b/recipes/qpoases/all/conanfile.py index 1f7008df111be..1b1c363f97808 100644 --- a/recipes/qpoases/all/conanfile.py +++ b/recipes/qpoases/all/conanfile.py @@ -17,11 +17,8 @@ class ConanRecipe(ConanFile): generators = "cmake" settings = "os", "arch", "compiler", "build_type" - options = { - "fPIC": [True, False], - "shared": [False], - } - default_options = {"fPIC": True, "shared": False} + options = {"fPIC": [True, False]} + default_options = {"fPIC": True} _cmake = None From 3e8086f4444734f77bc24ae34c7a252bb459319f Mon Sep 17 00:00:00 2001 From: Florian Berchtold Date: Wed, 23 Dec 2020 14:36:52 +0100 Subject: [PATCH 6/8] Apply suggestions from code review Co-authored-by: Anonymous Maarten --- recipes/qpoases/all/test_package/CMakeLists.txt | 3 +++ recipes/qpoases/all/test_package/conanfile.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/recipes/qpoases/all/test_package/CMakeLists.txt b/recipes/qpoases/all/test_package/CMakeLists.txt index bba0cb766a8a5..c1b7652d800ce 100644 --- a/recipes/qpoases/all/test_package/CMakeLists.txt +++ b/recipes/qpoases/all/test_package/CMakeLists.txt @@ -1,6 +1,9 @@ cmake_minimum_required(VERSION 3.1) project(test_package CXX) +include("${CMAKE_BINARY_DIR}/conanbuild.info.cmake") +conan_basic_setup(TARGETS) + find_package(qpOASES REQUIRED) add_executable(test_package test_package.cpp) diff --git a/recipes/qpoases/all/test_package/conanfile.py b/recipes/qpoases/all/test_package/conanfile.py index d8ea14efb8dbb..13035d2d1c7a4 100644 --- a/recipes/qpoases/all/test_package/conanfile.py +++ b/recipes/qpoases/all/test_package/conanfile.py @@ -4,7 +4,7 @@ class TestPackageConan(ConanFile): settings = "os", "compiler", "build_type", "arch" - generators = "cmake_find_package" + generators = "cmake", "cmake_find_package" def build(self): cmake = CMake(self) From 286ca5a5b462543a9c495856a10f2f239d80faf3 Mon Sep 17 00:00:00 2001 From: Florian Berchtold Date: Wed, 23 Dec 2020 21:30:45 +0100 Subject: [PATCH 7/8] Update recipes/qpoases/all/test_package/CMakeLists.txt Co-authored-by: Anonymous Maarten --- recipes/qpoases/all/test_package/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/qpoases/all/test_package/CMakeLists.txt b/recipes/qpoases/all/test_package/CMakeLists.txt index c1b7652d800ce..5dee521e48147 100644 --- a/recipes/qpoases/all/test_package/CMakeLists.txt +++ b/recipes/qpoases/all/test_package/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.1) project(test_package CXX) -include("${CMAKE_BINARY_DIR}/conanbuild.info.cmake") +include("${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") conan_basic_setup(TARGETS) find_package(qpOASES REQUIRED) From 7f49423c4feb91356b975e45ba18303f60aea7d5 Mon Sep 17 00:00:00 2001 From: Florian Berchtold Date: Wed, 23 Dec 2020 21:48:45 +0100 Subject: [PATCH 8/8] c++ std 11 and fixed name of bin --- recipes/qpoases/all/test_package/CMakeLists.txt | 2 ++ recipes/qpoases/all/test_package/conanfile.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/recipes/qpoases/all/test_package/CMakeLists.txt b/recipes/qpoases/all/test_package/CMakeLists.txt index 5dee521e48147..8ed5cd5c3e757 100644 --- a/recipes/qpoases/all/test_package/CMakeLists.txt +++ b/recipes/qpoases/all/test_package/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.1) project(test_package CXX) +set(CMAKE_CXX_STANDARD 11) + include("${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") conan_basic_setup(TARGETS) diff --git a/recipes/qpoases/all/test_package/conanfile.py b/recipes/qpoases/all/test_package/conanfile.py index 13035d2d1c7a4..1df900244a291 100644 --- a/recipes/qpoases/all/test_package/conanfile.py +++ b/recipes/qpoases/all/test_package/conanfile.py @@ -13,4 +13,5 @@ def build(self): def test(self): if not tools.cross_building(self.settings): - self.run("test_package", run_environment=True) + bin_path = os.path.join("bin", "test_package") + self.run(bin_path, run_environment=True)