From ae7b4f91cc4606a89350b1f3a6d96fd40b73fef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Garci=CC=81a=20Tapia?= Date: Tue, 23 Nov 2021 18:08:15 +0100 Subject: [PATCH] Remove all the examples --- features/cmake/__init__.py | 0 features/cmake/find_package/__init__.py | 0 .../exported_targets_multiconfig/README.md | 85 ---- .../exported_targets_multiconfig/__init__.py | 0 .../exported_targets_multiconfig/build.bat | 23 -- .../exported_targets_multiconfig/build.sh | 27 -- .../bye/__init__.py | 0 .../bye/conanfile.py | 22 -- .../bye/src/CMakeLists.txt | 58 --- .../bye/src/bye.cpp | 15 - .../bye/src/bye.h | 9 - .../bye/src/byeConfig.cmake | 4 - .../hello/__init__.py | 0 .../hello/conanfile.py | 18 - .../hello/src/CMakeLists.txt | 58 --- .../hello/src/hello.cpp | 10 - .../hello/src/hello.h | 9 - .../hello/src/helloConfig.cmake | 1 - .../project/CMakeLists.txt | 6 - .../project/conanfile.txt | 5 - .../project/example.cpp | 6 - .../README.md | 63 --- .../__init__.py | 0 .../build.bat | 25 -- .../build.sh | 32 -- .../bye/__init__.py | 0 .../bye/conanfile.py | 28 -- .../bye/src/CMakeLists.txt | 6 - .../bye/src/bye.cpp | 15 - .../bye/src/bye.h | 9 - .../hello/__init__.py | 0 .../hello/conanfile.py | 26 -- .../hello/src/CMakeLists.txt | 4 - .../hello/src/hello.cpp | 10 - .../hello/src/hello.h | 9 - .../project/CMakeLists.txt | 9 - .../project/conanfile.txt | 5 - .../project/example.cpp | 6 - features/deployment/.gitignore | 3 - features/deployment/CMakeLists.txt | 13 - features/deployment/build.sh | 28 -- features/deployment/conanfile.txt | 10 - features/deployment/deploy.py | 69 ---- features/deployment/md5.cpp | 16 - features/editable/cmake/.gitignore | 6 - features/editable/cmake/build.bat | 51 --- features/editable/cmake/build.sh | 40 -- features/editable/cmake/hello/CMakeLists.txt | 8 - features/editable/cmake/hello/conanfile.txt | 6 - features/editable/cmake/hello/src/hello.cpp | 5 - features/editable/cmake/say/CMakeLists.txt | 12 - features/editable/cmake/say/conanfile.py | 46 --- features/editable/cmake/say/src/say.cpp | 87 ---- features/editable/cmake/say/src/say.h | 9 - features/editable/cmake/say/src/say2.cpp | 87 ---- features/emscripten/.gitignore | 10 - features/emscripten/CMakeLists.txt | 25 -- features/emscripten/build.bat | 5 - features/emscripten/build.sh | 7 - features/emscripten/conanfile.py | 28 -- features/emscripten/conanfile.txt | 8 - features/emscripten/emscripten.profile | 9 - features/emscripten/main.cpp | 7 - features/emscripten/run.cmd | 3 - features/emscripten/run.sh | 4 - features/integrate_build_system/build.bat | 1 - features/integrate_build_system/build.py | 20 - features/integrate_build_system/build.sh | 5 - .../mylib-consumer/conanfile.py | 19 - .../mylib-consumer/main.cpp | 7 - .../mylib-consumer/wscript | 19 - .../waf-build-helper/conanfile.py | 10 - .../waf-build-helper/waf_environment.py | 139 ------- .../waf-generator/conanfile.py | 36 -- .../waf-installer/LICENSE | 25 -- .../waf-installer/conanfile.py | 31 -- .../waf-mylib/conanfile.py | 33 -- .../waf-mylib/include/mylib.hpp | 12 - .../waf-mylib/src/mylib.cpp | 9 - .../integrate_build_system/waf-mylib/wscript | 18 - .../lockfiles/build_order/app1/conanfile.py | 7 - .../lockfiles/build_order/app2/conanfile.py | 7 - features/lockfiles/build_order/build.bat | 1 - features/lockfiles/build_order/build.py | 108 ----- features/lockfiles/build_order/build.sh | 5 - .../lockfiles/build_order/liba/conanfile.py | 6 - .../lockfiles/build_order/libb/conanfile.py | 6 - .../lockfiles/build_order/libc/conanfile.py | 6 - .../lockfiles/build_order/libd/conanfile.py | 7 - features/lockfiles/ci/.gitignore | 2 - features/lockfiles/ci/app1/conanfile.py | 8 - features/lockfiles/ci/app2/conanfile.py | 8 - features/lockfiles/ci/build.bat | 1 - features/lockfiles/ci/build.py | 120 ------ features/lockfiles/ci/build.sh | 5 - features/lockfiles/ci/liba/conanfile.py | 6 - features/lockfiles/ci/libb/conanfile.py | 7 - features/lockfiles/ci/libc/conanfile.py | 7 - features/lockfiles/ci/libd/conanfile.py | 8 - features/lockfiles/intro/build.bat | 1 - features/lockfiles/intro/build.py | 158 -------- features/lockfiles/intro/build.sh | 5 - features/lockfiles/intro/pkga/conanfile.py | 14 - features/lockfiles/intro/pkga/src/helloa.h | 6 - features/lockfiles/intro/pkgb/conanfile.py | 34 -- .../lockfiles/intro/pkgb/src/CMakeLists.txt | 10 - features/lockfiles/intro/pkgb/src/greet.cpp | 11 - features/lockfiles/intro/pkgb/src/hello.cpp | 12 - features/lockfiles/intro/pkgb/src/hellob.h | 3 - features/makefiles/build.bat | 12 - features/makefiles/build.sh | 14 - features/makefiles/helloapp/conanfile.py | 22 -- features/makefiles/helloapp/src/Makefile | 14 - features/makefiles/helloapp/src/app.cpp | 5 - features/makefiles/hellolib/conanfile.py | 23 -- features/makefiles/hellolib/src/Makefile | 14 - features/makefiles/hellolib/src/hello.cpp | 10 - features/makefiles/hellolib/src/hello.h | 9 - features/multi_config/CMakeLists.txt | 26 -- features/multi_config/build.bat | 8 - features/multi_config/build.sh | 11 - features/multi_config/conanfile.py | 71 ---- features/multi_config/hello.cpp | 10 - features/multi_config/hello.h | 9 - .../multi_config/test_package/CMakeLists.txt | 14 - .../multi_config/test_package/conanfile.py | 19 - .../multi_config/test_package/example.cpp | 6 - features/package_development_flow/build.bat | 17 - features/package_development_flow/build.sh | 20 - .../package_development_flow/conanfile.py | 48 --- .../test_package/CMakeLists.txt | 14 - .../test_package/conanfile.py | 25 -- .../test_package/example.cpp | 6 - .../python_requires/reuse_conanfile/build.bat | 4 - .../python_requires/reuse_conanfile/build.sh | 4 - .../reuse_conanfile/consumer/conanfile.py | 13 - .../reuse_conanfile/consumer/src/hello.cpp | 10 - .../reuse_conanfile/consumer/src/hello.h | 9 - .../reuse_conanfile/pyreq/CMakeLists.txt | 9 - .../reuse_conanfile/pyreq/conanfile.py | 52 --- .../reuse_conanfile/pyreq/scm_utils.py | 10 - features/workspace/cmake/.gitignore | 3 - features/workspace/cmake/CMakeLists.txt | 6 - features/workspace/cmake/build.bat | 24 -- features/workspace/cmake/build.sh | 19 - features/workspace/cmake/chat/conanfile.py | 19 - .../workspace/cmake/chat/src/CMakeLists.txt | 17 - features/workspace/cmake/chat/src/app.cpp | 5 - features/workspace/cmake/chat/src/chat.cpp | 7 - features/workspace/cmake/chat/src/chat.h | 3 - features/workspace/cmake/conanws_gcc.yml | 10 - features/workspace/cmake/conanws_vs.yml | 11 - features/workspace/cmake/hello/conanfile.py | 22 -- .../workspace/cmake/hello/src/CMakeLists.txt | 14 - features/workspace/cmake/hello/src/hello.cpp | 11 - features/workspace/cmake/hello/src/hello.h | 3 - features/workspace/cmake/layout_gcc | 15 - features/workspace/cmake/layout_vs | 12 - features/workspace/cmake/say/conanfile.py | 21 - .../workspace/cmake/say/src/CMakeLists.txt | 13 - features/workspace/cmake/say/src/say.cpp | 11 - features/workspace/cmake/say/src/say.h | 4 - libraries/dear-imgui/basic/.gitignore | 2 - libraries/dear-imgui/basic/CMakeLists.txt | 32 -- libraries/dear-imgui/basic/README.md | 31 -- .../dear-imgui/basic/assets/simple-shader.fs | 11 - .../dear-imgui/basic/assets/simple-shader.vs | 18 - libraries/dear-imgui/basic/build.bat | 14 - libraries/dear-imgui/basic/build.sh | 13 - libraries/dear-imgui/basic/conanfile.txt | 16 - libraries/dear-imgui/basic/file_manager.cpp | 24 -- libraries/dear-imgui/basic/file_manager.h | 15 - libraries/dear-imgui/basic/main.cpp | 186 --------- libraries/dear-imgui/basic/opengl_shader.cpp | 99 ----- libraries/dear-imgui/basic/opengl_shader.h | 27 -- libraries/folly/basic/CMakeLists.txt | 11 - libraries/folly/basic/README.md | 22 -- libraries/folly/basic/build.bat | 16 - libraries/folly/basic/build.sh | 14 - libraries/folly/basic/conanfile.txt | 6 - libraries/folly/basic/main.cpp | 24 -- libraries/imgui-opencv-poco/.gitignore | 371 ------------------ libraries/imgui-opencv-poco/CMakeLists.txt | 25 -- libraries/imgui-opencv-poco/README.md | 37 -- libraries/imgui-opencv-poco/app/main.cpp | 14 - libraries/imgui-opencv-poco/conanfile.py | 25 -- libraries/imgui-opencv-poco/data/bird.jpeg | Bin 540411 -> 0 bytes .../imgui-opencv-poco/data/screen-capture.gif | Bin 1488309 -> 0 bytes .../imgui-opencv-poco/include/downloader.h | 40 -- .../include/gui_renderer.hpp | 38 -- libraries/imgui-opencv-poco/msvc/msvc.sln | 31 -- libraries/imgui-opencv-poco/msvc/msvc.vcxproj | 156 -------- .../msvc/msvc.vcxproj.filters | 34 -- .../imgui-opencv-poco/src/downloader.cpp | 40 -- .../imgui-opencv-poco/src/gui_renderer.cpp | 152 ------- libraries/poco/md5/CMakeLists.txt | 22 -- libraries/poco/md5/README.md | 38 -- libraries/poco/md5/build.bat | 16 - libraries/poco/md5/build.sh | 14 - libraries/poco/md5/conanfile.txt | 5 - libraries/poco/md5/md5.cpp | 15 - .../protobuf/serialization/CMakeLists.txt | 19 - libraries/protobuf/serialization/README.md | 21 - libraries/protobuf/serialization/__init__.py | 0 libraries/protobuf/serialization/build.bat | 20 - libraries/protobuf/serialization/build.sh | 18 - .../protobuf/serialization/conanfile.txt | 5 - libraries/protobuf/serialization/main.cc | 19 - libraries/protobuf/serialization/main.py | 15 - libraries/protobuf/serialization/sensor.proto | 13 - 210 files changed, 4740 deletions(-) delete mode 100644 features/cmake/__init__.py delete mode 100644 features/cmake/find_package/__init__.py delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/README.md delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/__init__.py delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/build.bat delete mode 100755 features/cmake/find_package/exported_targets_multiconfig/build.sh delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/bye/__init__.py delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/bye/conanfile.py delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/bye/src/CMakeLists.txt delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/bye/src/bye.cpp delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/bye/src/bye.h delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/bye/src/byeConfig.cmake delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/hello/__init__.py delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/hello/conanfile.py delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/hello/src/CMakeLists.txt delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/hello/src/hello.cpp delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/hello/src/hello.h delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/hello/src/helloConfig.cmake delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/project/CMakeLists.txt delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/project/conanfile.txt delete mode 100644 features/cmake/find_package/exported_targets_multiconfig/project/example.cpp delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/README.md delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/__init__.py delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/build.bat delete mode 100755 features/cmake/find_package/find_cmake_multi_generator_targets/build.sh delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/bye/__init__.py delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/bye/conanfile.py delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/CMakeLists.txt delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/bye.cpp delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/bye.h delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/hello/__init__.py delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/hello/conanfile.py delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/hello/src/CMakeLists.txt delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/hello/src/hello.cpp delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/hello/src/hello.h delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/project/CMakeLists.txt delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/project/conanfile.txt delete mode 100644 features/cmake/find_package/find_cmake_multi_generator_targets/project/example.cpp delete mode 100644 features/deployment/.gitignore delete mode 100644 features/deployment/CMakeLists.txt delete mode 100755 features/deployment/build.sh delete mode 100644 features/deployment/conanfile.txt delete mode 100755 features/deployment/deploy.py delete mode 100644 features/deployment/md5.cpp delete mode 100644 features/editable/cmake/.gitignore delete mode 100644 features/editable/cmake/build.bat delete mode 100755 features/editable/cmake/build.sh delete mode 100644 features/editable/cmake/hello/CMakeLists.txt delete mode 100644 features/editable/cmake/hello/conanfile.txt delete mode 100644 features/editable/cmake/hello/src/hello.cpp delete mode 100644 features/editable/cmake/say/CMakeLists.txt delete mode 100644 features/editable/cmake/say/conanfile.py delete mode 100644 features/editable/cmake/say/src/say.cpp delete mode 100644 features/editable/cmake/say/src/say.h delete mode 100644 features/editable/cmake/say/src/say2.cpp delete mode 100644 features/emscripten/.gitignore delete mode 100644 features/emscripten/CMakeLists.txt delete mode 100755 features/emscripten/build.bat delete mode 100755 features/emscripten/build.sh delete mode 100644 features/emscripten/conanfile.py delete mode 100644 features/emscripten/conanfile.txt delete mode 100644 features/emscripten/emscripten.profile delete mode 100644 features/emscripten/main.cpp delete mode 100755 features/emscripten/run.cmd delete mode 100755 features/emscripten/run.sh delete mode 100644 features/integrate_build_system/build.bat delete mode 100644 features/integrate_build_system/build.py delete mode 100755 features/integrate_build_system/build.sh delete mode 100644 features/integrate_build_system/mylib-consumer/conanfile.py delete mode 100644 features/integrate_build_system/mylib-consumer/main.cpp delete mode 100644 features/integrate_build_system/mylib-consumer/wscript delete mode 100644 features/integrate_build_system/waf-build-helper/conanfile.py delete mode 100644 features/integrate_build_system/waf-build-helper/waf_environment.py delete mode 100644 features/integrate_build_system/waf-generator/conanfile.py delete mode 100644 features/integrate_build_system/waf-installer/LICENSE delete mode 100644 features/integrate_build_system/waf-installer/conanfile.py delete mode 100644 features/integrate_build_system/waf-mylib/conanfile.py delete mode 100644 features/integrate_build_system/waf-mylib/include/mylib.hpp delete mode 100644 features/integrate_build_system/waf-mylib/src/mylib.cpp delete mode 100644 features/integrate_build_system/waf-mylib/wscript delete mode 100644 features/lockfiles/build_order/app1/conanfile.py delete mode 100644 features/lockfiles/build_order/app2/conanfile.py delete mode 100644 features/lockfiles/build_order/build.bat delete mode 100644 features/lockfiles/build_order/build.py delete mode 100755 features/lockfiles/build_order/build.sh delete mode 100644 features/lockfiles/build_order/liba/conanfile.py delete mode 100644 features/lockfiles/build_order/libb/conanfile.py delete mode 100644 features/lockfiles/build_order/libc/conanfile.py delete mode 100644 features/lockfiles/build_order/libd/conanfile.py delete mode 100644 features/lockfiles/ci/.gitignore delete mode 100644 features/lockfiles/ci/app1/conanfile.py delete mode 100644 features/lockfiles/ci/app2/conanfile.py delete mode 100644 features/lockfiles/ci/build.bat delete mode 100755 features/lockfiles/ci/build.py delete mode 100755 features/lockfiles/ci/build.sh delete mode 100644 features/lockfiles/ci/liba/conanfile.py delete mode 100644 features/lockfiles/ci/libb/conanfile.py delete mode 100644 features/lockfiles/ci/libc/conanfile.py delete mode 100644 features/lockfiles/ci/libd/conanfile.py delete mode 100644 features/lockfiles/intro/build.bat delete mode 100644 features/lockfiles/intro/build.py delete mode 100755 features/lockfiles/intro/build.sh delete mode 100644 features/lockfiles/intro/pkga/conanfile.py delete mode 100644 features/lockfiles/intro/pkga/src/helloa.h delete mode 100644 features/lockfiles/intro/pkgb/conanfile.py delete mode 100644 features/lockfiles/intro/pkgb/src/CMakeLists.txt delete mode 100644 features/lockfiles/intro/pkgb/src/greet.cpp delete mode 100644 features/lockfiles/intro/pkgb/src/hello.cpp delete mode 100644 features/lockfiles/intro/pkgb/src/hellob.h delete mode 100644 features/makefiles/build.bat delete mode 100644 features/makefiles/build.sh delete mode 100644 features/makefiles/helloapp/conanfile.py delete mode 100644 features/makefiles/helloapp/src/Makefile delete mode 100644 features/makefiles/helloapp/src/app.cpp delete mode 100644 features/makefiles/hellolib/conanfile.py delete mode 100644 features/makefiles/hellolib/src/Makefile delete mode 100644 features/makefiles/hellolib/src/hello.cpp delete mode 100644 features/makefiles/hellolib/src/hello.h delete mode 100644 features/multi_config/CMakeLists.txt delete mode 100644 features/multi_config/build.bat delete mode 100755 features/multi_config/build.sh delete mode 100644 features/multi_config/conanfile.py delete mode 100644 features/multi_config/hello.cpp delete mode 100644 features/multi_config/hello.h delete mode 100644 features/multi_config/test_package/CMakeLists.txt delete mode 100644 features/multi_config/test_package/conanfile.py delete mode 100644 features/multi_config/test_package/example.cpp delete mode 100644 features/package_development_flow/build.bat delete mode 100755 features/package_development_flow/build.sh delete mode 100644 features/package_development_flow/conanfile.py delete mode 100644 features/package_development_flow/test_package/CMakeLists.txt delete mode 100644 features/package_development_flow/test_package/conanfile.py delete mode 100644 features/package_development_flow/test_package/example.cpp delete mode 100644 features/python_requires/reuse_conanfile/build.bat delete mode 100755 features/python_requires/reuse_conanfile/build.sh delete mode 100644 features/python_requires/reuse_conanfile/consumer/conanfile.py delete mode 100644 features/python_requires/reuse_conanfile/consumer/src/hello.cpp delete mode 100644 features/python_requires/reuse_conanfile/consumer/src/hello.h delete mode 100644 features/python_requires/reuse_conanfile/pyreq/CMakeLists.txt delete mode 100644 features/python_requires/reuse_conanfile/pyreq/conanfile.py delete mode 100644 features/python_requires/reuse_conanfile/pyreq/scm_utils.py delete mode 100644 features/workspace/cmake/.gitignore delete mode 100644 features/workspace/cmake/CMakeLists.txt delete mode 100644 features/workspace/cmake/build.bat delete mode 100755 features/workspace/cmake/build.sh delete mode 100644 features/workspace/cmake/chat/conanfile.py delete mode 100644 features/workspace/cmake/chat/src/CMakeLists.txt delete mode 100644 features/workspace/cmake/chat/src/app.cpp delete mode 100644 features/workspace/cmake/chat/src/chat.cpp delete mode 100644 features/workspace/cmake/chat/src/chat.h delete mode 100644 features/workspace/cmake/conanws_gcc.yml delete mode 100644 features/workspace/cmake/conanws_vs.yml delete mode 100644 features/workspace/cmake/hello/conanfile.py delete mode 100644 features/workspace/cmake/hello/src/CMakeLists.txt delete mode 100644 features/workspace/cmake/hello/src/hello.cpp delete mode 100644 features/workspace/cmake/hello/src/hello.h delete mode 100644 features/workspace/cmake/layout_gcc delete mode 100644 features/workspace/cmake/layout_vs delete mode 100644 features/workspace/cmake/say/conanfile.py delete mode 100644 features/workspace/cmake/say/src/CMakeLists.txt delete mode 100644 features/workspace/cmake/say/src/say.cpp delete mode 100644 features/workspace/cmake/say/src/say.h delete mode 100644 libraries/dear-imgui/basic/.gitignore delete mode 100644 libraries/dear-imgui/basic/CMakeLists.txt delete mode 100644 libraries/dear-imgui/basic/README.md delete mode 100644 libraries/dear-imgui/basic/assets/simple-shader.fs delete mode 100644 libraries/dear-imgui/basic/assets/simple-shader.vs delete mode 100644 libraries/dear-imgui/basic/build.bat delete mode 100755 libraries/dear-imgui/basic/build.sh delete mode 100644 libraries/dear-imgui/basic/conanfile.txt delete mode 100644 libraries/dear-imgui/basic/file_manager.cpp delete mode 100644 libraries/dear-imgui/basic/file_manager.h delete mode 100644 libraries/dear-imgui/basic/main.cpp delete mode 100644 libraries/dear-imgui/basic/opengl_shader.cpp delete mode 100644 libraries/dear-imgui/basic/opengl_shader.h delete mode 100644 libraries/folly/basic/CMakeLists.txt delete mode 100644 libraries/folly/basic/README.md delete mode 100644 libraries/folly/basic/build.bat delete mode 100755 libraries/folly/basic/build.sh delete mode 100644 libraries/folly/basic/conanfile.txt delete mode 100644 libraries/folly/basic/main.cpp delete mode 100644 libraries/imgui-opencv-poco/.gitignore delete mode 100644 libraries/imgui-opencv-poco/CMakeLists.txt delete mode 100644 libraries/imgui-opencv-poco/README.md delete mode 100644 libraries/imgui-opencv-poco/app/main.cpp delete mode 100644 libraries/imgui-opencv-poco/conanfile.py delete mode 100644 libraries/imgui-opencv-poco/data/bird.jpeg delete mode 100644 libraries/imgui-opencv-poco/data/screen-capture.gif delete mode 100644 libraries/imgui-opencv-poco/include/downloader.h delete mode 100644 libraries/imgui-opencv-poco/include/gui_renderer.hpp delete mode 100644 libraries/imgui-opencv-poco/msvc/msvc.sln delete mode 100644 libraries/imgui-opencv-poco/msvc/msvc.vcxproj delete mode 100644 libraries/imgui-opencv-poco/msvc/msvc.vcxproj.filters delete mode 100644 libraries/imgui-opencv-poco/src/downloader.cpp delete mode 100644 libraries/imgui-opencv-poco/src/gui_renderer.cpp delete mode 100644 libraries/poco/md5/CMakeLists.txt delete mode 100644 libraries/poco/md5/README.md delete mode 100755 libraries/poco/md5/build.bat delete mode 100755 libraries/poco/md5/build.sh delete mode 100644 libraries/poco/md5/conanfile.txt delete mode 100644 libraries/poco/md5/md5.cpp delete mode 100644 libraries/protobuf/serialization/CMakeLists.txt delete mode 100644 libraries/protobuf/serialization/README.md delete mode 100644 libraries/protobuf/serialization/__init__.py delete mode 100644 libraries/protobuf/serialization/build.bat delete mode 100755 libraries/protobuf/serialization/build.sh delete mode 100644 libraries/protobuf/serialization/conanfile.txt delete mode 100644 libraries/protobuf/serialization/main.cc delete mode 100644 libraries/protobuf/serialization/main.py delete mode 100644 libraries/protobuf/serialization/sensor.proto diff --git a/features/cmake/__init__.py b/features/cmake/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/features/cmake/find_package/__init__.py b/features/cmake/find_package/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/features/cmake/find_package/exported_targets_multiconfig/README.md b/features/cmake/find_package/exported_targets_multiconfig/README.md deleted file mode 100644 index a3c32120..00000000 --- a/features/cmake/find_package/exported_targets_multiconfig/README.md +++ /dev/null @@ -1,85 +0,0 @@ -Using non-intrusive multi-config CMake with exported targets & find_package -=========================================================================== - -In this example ---------------- - -We are using CMake to declare, export and install the targets of a `bye` library that depends on a `hello` library. -Then using Conan to manage the packages and using these libraries in a project. - -**NOTE**: *This is not* the recommended way to use Conan based on ``find_package`` (look at the "cons") but indeed a possibility. - -Everything is based on the ``find_package`` feature and working with multi-config packages (Release/Debug) to avoid -installing the dependencies every time we change from Debug to Release in the Visual Studio IDE. - - - We have a "hello" library consumed by a "bye" library and a "project" that uses the "bye" function. - - The "hello" library exports its own ``helloTargets.cmake`` files, everything is pure CMake, every time we call - CMake with a different build type CMake exports a ``helloTargets-{build_type}.cmake`` script. - - The conan recipe uses the same binary package for any ``build_type``, by removing the ``build_type`` setting. - - The conan recipe at the ``build`` method invokes CMake both for Release and Debug, generating for the same package. - - The same for the "bye" library. - - -Some useful details of this example ------------------------------------- - - - The ``CMakeLists.txt`` of the consumer project (at folder project) calls only ``find_package`` to manage - the dependencies transparently (both with ``bye`` and ``hello``): - -``` -cmake_minimum_required(VERSION 3.0) -project(PackageTest CXX) - -find_package(bye CONFIG) -add_executable(example example.cpp) -target_link_libraries(example bye::bye) -``` - - - The ``CMakeLists.txt`` files for ``bye`` and ``hello`` are quite similar, the same code except the library name and - dependencies are changed in the first part. So you could use a similar ``CMakeLists.txt`` if you want to follow this - approach. - - It is important to add the ``CONFIG`` option to ``find_package`` so that *module mode* is explicitly skipped by CMake. This helps to - solve issues when there is for example a ``Findbye.cmake`` file in CMake's default modules directory that maybe is loaded instead of the - ``byeConfig.cmake`` generated by Conan. - - The ``helloConfig.cmake`` and ``byeConfig.cmake`` are not auto-generated. They have to manually call `find_dependency` - for all the dependencies and then include the targets. In this case, the ``bye`` library needs to find the ``hello``: - - ``` - include(CMakeFindDependencyMacro) - find_dependency(hello) - - include("${CMAKE_CURRENT_LIST_DIR}/byeTargets.cmake") - ``` - - - The recipes are not even using ``package_info()`` method for the consumers - -Pros ----- - -- If you are going to consume your packages only with CMake, this is a totally non-intrusive and decoupled mechanism. -- You don't need to change anything in the ``CMakeLists.txt`` related to Conan. -- The multi-config mechanism works good, it is very comfortable, only one ``conan install`` for the dependencies. - - -Cons ----- - - - You cannot consume Conan packages with other mechanism than ``CMake find_package``, no ``package_info`` method has been - declared. The logic for the consumer lives exclusively in the ``.cmake`` files installed by CMake, so if I want to use - any package with other build system like ``Autotools`` I won't be able to do it. - - - Any other information about the libraries that a classic ``self.cppinfo`` object might have (like a compilation flag or definition), - won't be applied to the targets automatically. - - - You need to build packages containing all the build_types in the same Conan binary package. The ``find_package`` - mechanism will find only one ``XXXConfig.cmake`` file, so all the ```XXXTarget-{build_type}``` have to be together. - - - The targets are transitive but you need to "model" the dependencies in the ``XXXConfig.cmake`` files, by calling ``find_dependency``, so you are - duplicating information that Conan already knows (dependency graph). - - -How to try it -------------- - - - Open the "build.bat" or "build.sh" to see the steps of the example. If you run it, it will create the packages for "hello" and "bye" - and will build the "project" changing the build_type and verifying that the linked dependencies are correct for the selected build_type. \ No newline at end of file diff --git a/features/cmake/find_package/exported_targets_multiconfig/__init__.py b/features/cmake/find_package/exported_targets_multiconfig/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/features/cmake/find_package/exported_targets_multiconfig/build.bat b/features/cmake/find_package/exported_targets_multiconfig/build.bat deleted file mode 100644 index 7ef40d6c..00000000 --- a/features/cmake/find_package/exported_targets_multiconfig/build.bat +++ /dev/null @@ -1,23 +0,0 @@ -pushd hello -conan create . user/channel -popd - -pushd bye -conan create . user/channel -popd - -pushd project -rd /s /q "build" -mkdir build -pushd build - -conan install .. -cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_paths.cmake -cmake --build . --config Debug -cmake --build . --config Release - -Debug\example -Release\example - -popd -popd diff --git a/features/cmake/find_package/exported_targets_multiconfig/build.sh b/features/cmake/find_package/exported_targets_multiconfig/build.sh deleted file mode 100755 index e6222df0..00000000 --- a/features/cmake/find_package/exported_targets_multiconfig/build.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -set -e -pushd hello -conan create . user/channel -popd - -pushd bye -conan create . user/channel -popd - -pushd project -rm -rf "build" -mkdir build -pushd build - -conan install .. -cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_paths.cmake -DCMAKE_BUILD_TYPE=Debug -cmake --build . -./example - -cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_paths.cmake -DCMAKE_BUILD_TYPE=Release -cmake --build . -./example - -popd -popd diff --git a/features/cmake/find_package/exported_targets_multiconfig/bye/__init__.py b/features/cmake/find_package/exported_targets_multiconfig/bye/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/features/cmake/find_package/exported_targets_multiconfig/bye/conanfile.py b/features/cmake/find_package/exported_targets_multiconfig/bye/conanfile.py deleted file mode 100644 index 26b79abf..00000000 --- a/features/cmake/find_package/exported_targets_multiconfig/bye/conanfile.py +++ /dev/null @@ -1,22 +0,0 @@ -from conans import ConanFile, CMake - - -class ByeConan(ConanFile): - name = "bye" - version = "1.0" - settings = "os", "compiler", "arch" - options = {"shared": [True, False]} - default_options = "shared=False" - generators = "cmake_paths" - exports_sources = "src/*" - requires = "hello/1.0@user/channel" - - def build(self): - for bt in ("Debug", "Release"): - cmake = CMake(self, build_type=bt) - cmake.definitions["CMAKE_TOOLCHAIN_FILE"] = "conan_paths.cmake" - cmake.definitions["CMAKE_FIND_DEBUG_MODE"] = "ON" - - cmake.configure(source_folder="src") - cmake.build() - cmake.install() diff --git a/features/cmake/find_package/exported_targets_multiconfig/bye/src/CMakeLists.txt b/features/cmake/find_package/exported_targets_multiconfig/bye/src/CMakeLists.txt deleted file mode 100644 index ab8bf944..00000000 --- a/features/cmake/find_package/exported_targets_multiconfig/bye/src/CMakeLists.txt +++ /dev/null @@ -1,58 +0,0 @@ -cmake_minimum_required(VERSION 3.0) - -# CHANGE PROJECT NAME, SOURCES AND DEPENDANT TARGETS -project(bye CXX) - -set(TARGET_NAME ${PROJECT_NAME}) -set(${TARGET_NAME}_SRC bye.cpp) -set(${TARGET_NAME}_HEADERS bye.h) -set(TARGETS_TO_FIND hello) -set(DEBUG_LIBRARY_SUFFIX "d") - - -# GENERIC PART -add_library(${TARGET_NAME} ${${TARGET_NAME}_SRC} ${${TARGET_NAME}_HEADERS}) -set_target_properties(${TARGET_NAME} PROPERTIES - PUBLIC_HEADER "${${TARGET_NAME}_HEADERS}" - OUTPUT_NAME "${TARGET_NAME}$<$:${DEBUG_LIBRARY_SUFFIX}>") - -target_include_directories(${TARGET_NAME} PUBLIC - "$" - "$/${CMAKE_INSTALL_INCLUDEDIR}>") - -foreach(dep ${TARGETS_TO_FIND}) - find_package(${dep} CONFIG) - message("BUILD TYPE: ${CMAKE_BUILD_TYPE}") - target_link_libraries(${TARGET_NAME} ${dep}::${dep}) -endforeach() - - -# Write the library and headers -install(TARGETS ${TARGET_NAME} EXPORT ${TARGET_NAME}Targets - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - -# Export the target to be used by other projects -export(EXPORT ${TARGET_NAME}Targets - FILE "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}/${TARGET_NAME}Targets.cmake" - NAMESPACE ${TARGET_NAME}:: -) - -set(ConfigPackageLocation lib/cmake/${TARGET_NAME}) - -# Install the exported target -install(EXPORT ${TARGET_NAME}Targets - FILE ${TARGET_NAME}Targets.cmake - NAMESPACE ${TARGET_NAME}:: - DESTINATION ${ConfigPackageLocation} -) - -# Install the XXXConfig.cmake file -install( - FILES - ${TARGET_NAME}Config.cmake - DESTINATION - ${ConfigPackageLocation} -) diff --git a/features/cmake/find_package/exported_targets_multiconfig/bye/src/bye.cpp b/features/cmake/find_package/exported_targets_multiconfig/bye/src/bye.cpp deleted file mode 100644 index 9468af17..00000000 --- a/features/cmake/find_package/exported_targets_multiconfig/bye/src/bye.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "bye.h" -#include "hello.h" - -void bye(){ - - hello(); - - #ifdef NDEBUG - std::cout << "bye World Release!" <:${DEBUG_LIBRARY_SUFFIX}>") - -target_include_directories(${TARGET_NAME} PUBLIC - "$" - "$/${CMAKE_INSTALL_INCLUDEDIR}>") - -foreach(dep ${TARGETS_TO_FIND}) - find_package(${dep} CONFIG) - target_link_libraries(${TARGET_NAME} ${dep}::${dep}) -endforeach() - - -# Write the library and headers -install(TARGETS ${TARGET_NAME} EXPORT ${TARGET_NAME}Targets - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - -# Export the target to be used by other projects -export(EXPORT ${TARGET_NAME}Targets - FILE "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}/${TARGET_NAME}Targets.cmake" - NAMESPACE ${TARGET_NAME}:: -) - -set(ConfigPackageLocation lib/cmake/${TARGET_NAME}) - -# Install the exported target -install(EXPORT ${TARGET_NAME}Targets - FILE ${TARGET_NAME}Targets.cmake - NAMESPACE ${TARGET_NAME}:: - DESTINATION ${ConfigPackageLocation} -) - -# Install the XXXConfig.cmake file -install( - FILES - ${TARGET_NAME}Config.cmake - DESTINATION - ${ConfigPackageLocation} -) diff --git a/features/cmake/find_package/exported_targets_multiconfig/hello/src/hello.cpp b/features/cmake/find_package/exported_targets_multiconfig/hello/src/hello.cpp deleted file mode 100644 index 235428a0..00000000 --- a/features/cmake/find_package/exported_targets_multiconfig/hello/src/hello.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "hello.h" - -void hello(){ - #ifdef NDEBUG - std::cout << "Hello World Release!" < -#include "bye.h" - -int main() { - bye(); -} diff --git a/features/cmake/find_package/find_cmake_multi_generator_targets/README.md b/features/cmake/find_package/find_cmake_multi_generator_targets/README.md deleted file mode 100644 index 258055c9..00000000 --- a/features/cmake/find_package/find_cmake_multi_generator_targets/README.md +++ /dev/null @@ -1,63 +0,0 @@ -Using non-intrusive multi-config CMake with cmake_find_package_generator_multi -============================================================================== - -In this example ---------------- - -We are using Conan to create for us the necessary ``XXXConfig.cmake`` scripts both for Release and Debug. -Everything is based on the ``find_package`` feature and working with multi-config packages (Release/Debug) to avoid -installing the dependencies every time we change from Debug to Release in the Visual Studio IDE. - - - We have a "hello" library consumed by a "bye" library and a project that uses the "bye" function. - - The "hello" library has a ``package_info()`` method declaring the "hello" library name for the consumers. - - The conan recipe uses a different binary package for any ``build_type``, one package for Debug and other for Release. - - The same for the "bye" library. - - There is a project using targets (CMake 3.x) and linking with "bye" (and hello because of the transitivity) - -Some useful details of this example ------------------------------------- - - - The ``CMakeLists.txt`` files for ``bye`` and ``hello`` are very simple, we are not installing nor exporting anything. - - It is important to add the ``CONFIG`` option to ``find_package`` so that *module mode* is explicitly skipped by CMake. This helps to - solve issues when there is for example a ``FindXXXX.cmake`` file in CMake's default modules directory that maybe is loaded instead of the - ``XXXXConfig.cmake`` generated by Conan. - - This is the one for ``bye``: - ```cmake - find_package(hello CONFIG) - add_library(bye bye.cpp) - target_link_libraries(bye hello::hello) - ``` - - - The recipes are using ``package_info()`` method for the consumers - - The recipes are using ``package()`` method to extract the libraries and headers, instead of using cmake install. - -Pros ----- - -- You can consume the conan packages for ``hello`` and ``bye`` from any build system only specifying the generator - that matches your needs. -- You don't need to change anything in the ``CMakeLists.txt`` related to Conan. -- The multi-config mechanism works good, it is very comfortable, You call ``conan install`` for debug and other for Release - and you are done. -- The generated targets are **completely transitive** and contain all the information about the dependencies. So you need - call ``find_package`` for your direct dependency packages. With the classic CMake targets, you typically need to specify one ``find_package`` - for each dependency that you need, directly or indirectly. - - -Cons ----- - - - You have to assume that the cmake scripts created by this generator **ARE NOT** the same as the `CMake` installation modules files and they - are not replaceable in most cases: - - - Because of the transitivity of the targets (you will need to change your CMakeLists if you were calling ``find_package`` for all the transitive deps) - - The name of the targets and the library name to be used at `find_package(NAME)` might be different for the "official" one. - - -How to try it -------------- - - - Open the "build.bat" or "build.sh" to see the steps of the example. If you run it, it will create the packages for "hello" and "bye" - and will build the "project" changing the build_type and verifying that the linked dependencies are correct for the selected build_type. - - If you are using Linux or Mac you can use almost the same steps in the run.bat adapted to your OSS \ No newline at end of file diff --git a/features/cmake/find_package/find_cmake_multi_generator_targets/__init__.py b/features/cmake/find_package/find_cmake_multi_generator_targets/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/features/cmake/find_package/find_cmake_multi_generator_targets/build.bat b/features/cmake/find_package/find_cmake_multi_generator_targets/build.bat deleted file mode 100644 index b4402238..00000000 --- a/features/cmake/find_package/find_cmake_multi_generator_targets/build.bat +++ /dev/null @@ -1,25 +0,0 @@ -pushd hello -conan create . user/channel -s build_type=Debug -conan create . user/channel -s build_type=Release -popd - -pushd bye -conan create . user/channel -s build_type=Debug -conan create . user/channel -s build_type=Release -popd - -pushd project - -rd /s /q "build" -mkdir build -pushd BUILD -conan install .. -s build_type=Debug -conan install .. -s build_type=Release -cmake .. -cmake --build . --config Debug -cmake --build . --config Release -Debug\example.exe -Release\example.exe - -popd -popd diff --git a/features/cmake/find_package/find_cmake_multi_generator_targets/build.sh b/features/cmake/find_package/find_cmake_multi_generator_targets/build.sh deleted file mode 100755 index ba66978a..00000000 --- a/features/cmake/find_package/find_cmake_multi_generator_targets/build.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -set -e -pushd hello -conan create . user/channel -s build_type=Debug -conan create . user/channel -s build_type=Release -popd - -pushd bye -conan create . user/channel -s build_type=Debug -conan create . user/channel -s build_type=Release -popd - -pushd project - -rm -rf "build" -mkdir build -pushd build - -conan install .. -s build_type=Debug -conan install .. -s build_type=Release - -cmake .. -DCMAKE_BUILD_TYPE=Debug -cmake --build . -./example - -cmake .. -DCMAKE_BUILD_TYPE=Release -cmake --build . -./example - -popd -popd diff --git a/features/cmake/find_package/find_cmake_multi_generator_targets/bye/__init__.py b/features/cmake/find_package/find_cmake_multi_generator_targets/bye/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/features/cmake/find_package/find_cmake_multi_generator_targets/bye/conanfile.py b/features/cmake/find_package/find_cmake_multi_generator_targets/bye/conanfile.py deleted file mode 100644 index c9e023d0..00000000 --- a/features/cmake/find_package/find_cmake_multi_generator_targets/bye/conanfile.py +++ /dev/null @@ -1,28 +0,0 @@ -from conans import ConanFile, CMake - - -class ByeConan(ConanFile): - name = "bye" - version = "1.0" - settings = "os", "compiler", "arch", "build_type" - options = {"shared": [True, False]} - default_options = "shared=False" - generators = "cmake_find_package_multi" - exports_sources = "src/*" - requires = "hello/1.0@user/channel" - - def build(self): - cmake = CMake(self) - cmake.configure(source_folder="src") - cmake.build() - - def package(self): - self.copy("*.h", dst="include", keep_path=False) - self.copy("*.lib", dst="lib", keep_path=False) - self.copy("*.dll", dst="bin", keep_path=False) - self.copy("*.so", dst="lib", keep_path=False) - self.copy("*.dylib", dst="lib", keep_path=False) - self.copy("*.a", dst="lib", keep_path=False) - - def package_info(self): - self.cpp_info.libs.append("bye") diff --git a/features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/CMakeLists.txt b/features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/CMakeLists.txt deleted file mode 100644 index 5c8f1feb..00000000 --- a/features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(PackageTest CXX) - -find_package(hello CONFIG) -add_library(bye bye.cpp) -target_link_libraries(bye hello::hello) diff --git a/features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/bye.cpp b/features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/bye.cpp deleted file mode 100644 index 9468af17..00000000 --- a/features/cmake/find_package/find_cmake_multi_generator_targets/bye/src/bye.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "bye.h" -#include "hello.h" - -void bye(){ - - hello(); - - #ifdef NDEBUG - std::cout << "bye World Release!" < -#include "hello.h" - -void hello(){ - #ifdef NDEBUG - std::cout << "Hello World Release!" < -#include "bye.h" - -int main() { - bye(); -} diff --git a/features/deployment/.gitignore b/features/deployment/.gitignore deleted file mode 100644 index fba716b0..00000000 --- a/features/deployment/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -build -install -md5.run diff --git a/features/deployment/CMakeLists.txt b/features/deployment/CMakeLists.txt deleted file mode 100644 index 522f31cb..00000000 --- a/features/deployment/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(MD5Encrypter) - -find_package(Poco CONFIG REQUIRED) - -add_executable(md5 md5.cpp) -target_link_libraries(md5 Poco::Poco) - -install(TARGETS md5 - RUNTIME DESTINATION bin - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib) - diff --git a/features/deployment/build.sh b/features/deployment/build.sh deleted file mode 100755 index 626c5773..00000000 --- a/features/deployment/build.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -ROOT=${PWD} -PREFIX=${PWD}/install - -mkdir -p build -pushd build - -conan install .. -s build_type=Release --build missing -cmake .. \ - -DCMAKE_PREFIX_PATH=${PWD} \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=${PREFIX} -cmake --build . --target install - -TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)` -curl "https://github.com/megastep/makeself/releases/download/release-2.4.0/makeself-2.4.0.run" --output $TMPDIR/makeself.run -L -chmod +x $TMPDIR/makeself.run -$TMPDIR/makeself.run --target $TMPDIR/makeself - -python ${ROOT}/deploy.py $PREFIX - -$TMPDIR/makeself/makeself.sh $PREFIX ${ROOT}/md5.run "conan-generated makeself.sh" "./conan-entrypoint.sh" - -popd - diff --git a/features/deployment/conanfile.txt b/features/deployment/conanfile.txt deleted file mode 100644 index 6bbb9abe..00000000 --- a/features/deployment/conanfile.txt +++ /dev/null @@ -1,10 +0,0 @@ -[generators] -cmake_find_package_multi -json - -[requires] -poco/1.9.4 - -[options] -*:shared=True - diff --git a/features/deployment/deploy.py b/features/deployment/deploy.py deleted file mode 100755 index 6c50ca48..00000000 --- a/features/deployment/deploy.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 - -from __future__ import print_function -import os -import json -import sys -from distutils.dir_util import copy_tree - -def get_dirs(): - data = json.load(open("conanbuildinfo.json")) - dep_lib_dirs = dict() - dep_bin_dirs = dict() - for dep in data["dependencies"]: - root = dep["rootpath"] - lib_paths = dep["lib_paths"] - bin_paths = dep["bin_paths"] - for lib_path in lib_paths: - if os.listdir(lib_path): - lib_dir = os.path.relpath(lib_path, root) - dep_lib_dirs[lib_path] = lib_dir - for bin_path in bin_paths: - if os.listdir(bin_path): - bin_dir = os.path.relpath(bin_path, root) - dep_bin_dirs[bin_path] = bin_dir - return dep_lib_dirs, dep_bin_dirs - -def chmod_plus_x(name): - if os.name == 'posix': - os.chmod(name, os.stat(name).st_mode | 0o111) - -def create_entry_point(destdir, dep_lib_dirs, dep_bin_dirs): - executable = "md5" - varname = "$PWD" - def _format_dirs(dirs): - return ":".join(["%s/%s" % (varname, d) for d in dirs]) - path = _format_dirs(set(dep_bin_dirs.values())) - ld_library_path = _format_dirs(set(dep_lib_dirs.values())) - exe = varname + "/" + executable - content = """#!/usr/bin/env bash -set -ex -export PATH=$PATH:{path} -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{ld_library_path} -pushd $(dirname {exe}) -$(basename {exe}) -popd -""".format(path=path, - ld_library_path=ld_library_path, - exe=exe) - entrypoint = os.path.join(destdir, "conan-entrypoint.sh") - with open(entrypoint, "w") as f: - f.write(content) - chmod_plus_x(entrypoint) - -def copy_files(destdir, dep_lib_dirs, dep_bin_dirs): - for src_lib_dir, dst_lib_dir in dep_lib_dirs.items(): - copy_tree(src_lib_dir, os.path.join(destdir, dst_lib_dir)) - for src_bin_dir, dst_bin_dir in dep_bin_dirs.items(): - copy_tree(src_bin_dir, os.path.join(destdir, dst_bin_dir)) - -def main(argv): - dep_lib_dirs, dep_bin_dirs = get_dirs() - print(dep_lib_dirs, dep_bin_dirs) - copy_files(argv[1], dep_lib_dirs, dep_bin_dirs) - create_entry_point(argv[1], dep_lib_dirs, dep_bin_dirs) - -if __name__ == '__main__': - main(sys.argv) diff --git a/features/deployment/md5.cpp b/features/deployment/md5.cpp deleted file mode 100644 index 87412ae2..00000000 --- a/features/deployment/md5.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "Poco/MD5Engine.h" -#include "Poco/DigestStream.h" - -#include - -int main(int argc, char** argv) -{ - Poco::MD5Engine md5; - std::string s = "abcdefghijklmnopqrstuvwxyz"; - Poco::DigestOutputStream ds(md5); - ds << s; - ds.close(); - std::cout << "MD5 of \"" << s << "\":" << std::endl; - std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; - return 0; -} diff --git a/features/editable/cmake/.gitignore b/features/editable/cmake/.gitignore deleted file mode 100644 index 8654e205..00000000 --- a/features/editable/cmake/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -hello/build -say/build -conanbuildinfo.txt -conaninfo.txt -graph_info.json -conan.lock diff --git a/features/editable/cmake/build.bat b/features/editable/cmake/build.bat deleted file mode 100644 index e47ca9eb..00000000 --- a/features/editable/cmake/build.bat +++ /dev/null @@ -1,51 +0,0 @@ -@ECHO ON - -RMDIR /Q /S say\build -RMDIR /Q /S hello\build - -REM Put say package in editable mode, and build it -conan editable add say/ say/0.1@user/channel - -PUSHD "say" -REM It is very important to install 2 configurations, if you are building later the 2 configs, so the toolchain is multi-config (runtime libs) -REM There is a bug in 1.40, this needs to be done in the root folder -conan install . -s build_type=Release -conan install . -s build_type=Debug -MKDIR "build" -PUSHD "build" -cmake .. -DCMAKE_TOOLCHAIN_FILE=conan/conan_toolchain.cmake -cmake --build . --config Release -cmake --build . --config Debug -POPD -POPD - -REM Build hello consumer -MKDIR "hello/build" -PUSHD "hello/build" -conan install .. -s build_type=Release -conan install .. -s build_type=Debug -cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -cmake --build . --config Release -cmake --build . --config Debug -"Release/hello.exe" -"Debug/hello.exe" -POPD - -REM Do a modification in the source code of the editable say -PUSHD "say/build" -COPY ..\src\say2.cpp ..\src\say.cpp /Y -TOUCH ..\src\say.cpp -cmake --build . --config Release -cmake --build . --config Debug -POPD - -REM Build and execute the consumer depending on the editable -PUSHD "hello/build" -cmake --build . --config Release -cmake --build . --config Debug -"Release/hello.exe" -"Debug/hello.exe" -POPD - - -conan editable remove say/0.1@user/channel diff --git a/features/editable/cmake/build.sh b/features/editable/cmake/build.sh deleted file mode 100755 index a6a2145a..00000000 --- a/features/editable/cmake/build.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -set -e -set -x - -rm -rf say/cmake-build-release -rm -rf hello/cmake-build-release - - -conan editable add say/ say/0.1@user/channel - -pushd say -conan install . -pushd cmake-build-release -cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=conan/conan_toolchain.cmake -cmake --build . -popd -popd - -mkdir hello/cmake-build-release -pushd hello/cmake-build-release -conan install .. -cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -cmake --build . -./hello -popd - -# Modification to code -pushd say/cmake-build-release -cp ../src/say2.cpp ../src/say.cpp -cmake --build . -popd - -# build consumer again -pushd hello/cmake-build-release -cmake --build . -./hello -popd - -conan editable remove say/0.1@user/channel diff --git a/features/editable/cmake/hello/CMakeLists.txt b/features/editable/cmake/hello/CMakeLists.txt deleted file mode 100644 index a6fd70a5..00000000 --- a/features/editable/cmake/hello/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -cmake_minimum_required(VERSION 3.15) - -project(Hello) - -find_package(say REQUIRED) - -add_executable(hello src/hello.cpp) -target_link_libraries(hello say::say) \ No newline at end of file diff --git a/features/editable/cmake/hello/conanfile.txt b/features/editable/cmake/hello/conanfile.txt deleted file mode 100644 index 77700d0d..00000000 --- a/features/editable/cmake/hello/conanfile.txt +++ /dev/null @@ -1,6 +0,0 @@ -[requires] -say/0.1@user/channel - -[generators] -CMakeToolchain -CMakeDeps \ No newline at end of file diff --git a/features/editable/cmake/hello/src/hello.cpp b/features/editable/cmake/hello/src/hello.cpp deleted file mode 100644 index 4d962b91..00000000 --- a/features/editable/cmake/hello/src/hello.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "say.h" - -int main() { - say(); -} \ No newline at end of file diff --git a/features/editable/cmake/say/CMakeLists.txt b/features/editable/cmake/say/CMakeLists.txt deleted file mode 100644 index e920d50b..00000000 --- a/features/editable/cmake/say/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(say CXX) - -add_library(say src/say.cpp) - -set_target_properties(say PROPERTIES PUBLIC_HEADER "src/say.h") -install(TARGETS say DESTINATION "." - PUBLIC_HEADER DESTINATION include - RUNTIME DESTINATION bin - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - ) diff --git a/features/editable/cmake/say/conanfile.py b/features/editable/cmake/say/conanfile.py deleted file mode 100644 index 486ab5ea..00000000 --- a/features/editable/cmake/say/conanfile.py +++ /dev/null @@ -1,46 +0,0 @@ -from conans import ConanFile -from conan.tools.cmake import CMakeToolchain, CMake -from conan.tools.layout import cmake_layout - - -class SayConan(ConanFile): - name = "say" - version = "0.1" - - # Optional metadata - license = "" - author = " " - url = "" - description = "" - topics = ("", "", "") - - # Binary configuration - settings = "os", "compiler", "build_type", "arch" - options = {"shared": [True, False], "fPIC": [True, False]} - default_options = {"shared": False, "fPIC": True} - - # Sources are located in the same place as this recipe, copy them to the recipe - exports_sources = "CMakeLists.txt", "src/*" - - def config_options(self): - if self.settings.os == "Windows": - del self.options.fPIC - - def layout(self): - cmake_layout(self) - - def generate(self): - tc = CMakeToolchain(self) - tc.generate() - - def build(self): - cmake = CMake(self) - cmake.configure() - cmake.build() - - def package(self): - cmake = CMake(self) - cmake.install() - - def package_info(self): - self.cpp_info.libs = ["say"] diff --git a/features/editable/cmake/say/src/say.cpp b/features/editable/cmake/say/src/say.cpp deleted file mode 100644 index 5d7df08b..00000000 --- a/features/editable/cmake/say/src/say.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include "say.h" - -void say(){ - #ifdef NDEBUG - std::cout << "say/0.1: Hello World Release!\n"; - #else - std::cout << "say/0.1: Hello World Debug!\n"; - #endif - - // ARCHITECTURES - #ifdef _M_X64 - std::cout << " say/0.1: _M_X64 defined\n"; - #endif - - #ifdef _M_IX86 - std::cout << " say/0.1: _M_IX86 defined\n"; - #endif - - #if __i386__ - std::cout << " say/0.1: __i386__ defined\n"; - #endif - - #if __x86_64__ - std::cout << " say/0.1: __x86_64__ defined\n"; - #endif - - // Libstdc++ - #if defined _GLIBCXX_USE_CXX11_ABI - std::cout << " say/0.1: _GLIBCXX_USE_CXX11_ABI "<< _GLIBCXX_USE_CXX11_ABI << "\n"; - #endif - - // COMPILER VERSIONS - #if _MSC_VER - std::cout << " say/0.1: _MSC_VER" << _MSC_VER<< "\n"; - #endif - - #if _MSVC_LANG - std::cout << " say/0.1: _MSVC_LANG" << _MSVC_LANG<< "\n"; - #endif - - #if __cplusplus - std::cout << " say/0.1: __cplusplus" << __cplusplus<< "\n"; - #endif - - #if __INTEL_COMPILER - std::cout << " say/0.1: __INTEL_COMPILER" << __INTEL_COMPILER<< "\n"; - #endif - - #if __GNUC__ - std::cout << " say/0.1: __GNUC__" << __GNUC__<< "\n"; - #endif - - #if __GNUC_MINOR__ - std::cout << " say/0.1: __GNUC_MINOR__" << __GNUC_MINOR__<< "\n"; - #endif - - #if __clang_major__ - std::cout << " say/0.1: __clang_major__" << __clang_major__<< "\n"; - #endif - - #if __clang_minor__ - std::cout << " say/0.1: __clang_minor__" << __clang_minor__<< "\n"; - #endif - - #if __apple_build_version__ - std::cout << " say/0.1: __apple_build_version__" << __apple_build_version__<< "\n"; - #endif - - // SUBSYSTEMS - - #if __MSYS__ - std::cout << " say/0.1: __MSYS__" << __MSYS__<< "\n"; - #endif - - #if __MINGW32__ - std::cout << " say/0.1: __MINGW32__" << __MINGW32__<< "\n"; - #endif - - #if __MINGW64__ - std::cout << " say/0.1: __MINGW64__" << __MINGW64__<< "\n"; - #endif - - #if __CYGWIN__ - std::cout << " say/0.1: __CYGWIN__" << __CYGWIN__<< "\n"; - #endif -} diff --git a/features/editable/cmake/say/src/say.h b/features/editable/cmake/say/src/say.h deleted file mode 100644 index 54d92ac1..00000000 --- a/features/editable/cmake/say/src/say.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#ifdef WIN32 - #define say_EXPORT __declspec(dllexport) -#else - #define say_EXPORT -#endif - -say_EXPORT void say(); diff --git a/features/editable/cmake/say/src/say2.cpp b/features/editable/cmake/say/src/say2.cpp deleted file mode 100644 index a44b9561..00000000 --- a/features/editable/cmake/say/src/say2.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include "say.h" - -void say(){ - #ifdef NDEBUG - std::cout << "say/0.1: Bye World Release!\n"; - #else - std::cout << "say/0.1: Bye World Debug!\n"; - #endif - - // ARCHITECTURES - #ifdef _M_X64 - std::cout << " say/0.1: _M_X64 defined\n"; - #endif - - #ifdef _M_IX86 - std::cout << " say/0.1: _M_IX86 defined\n"; - #endif - - #if __i386__ - std::cout << " say/0.1: __i386__ defined\n"; - #endif - - #if __x86_64__ - std::cout << " say/0.1: __x86_64__ defined\n"; - #endif - - // Libstdc++ - #if defined _GLIBCXX_USE_CXX11_ABI - std::cout << " say/0.1: _GLIBCXX_USE_CXX11_ABI "<< _GLIBCXX_USE_CXX11_ABI << "\n"; - #endif - - // COMPILER VERSIONS - #if _MSC_VER - std::cout << " say/0.1: _MSC_VER" << _MSC_VER<< "\n"; - #endif - - #if _MSVC_LANG - std::cout << " say/0.1: _MSVC_LANG" << _MSVC_LANG<< "\n"; - #endif - - #if __cplusplus - std::cout << " say/0.1: __cplusplus" << __cplusplus<< "\n"; - #endif - - #if __INTEL_COMPILER - std::cout << " say/0.1: __INTEL_COMPILER" << __INTEL_COMPILER<< "\n"; - #endif - - #if __GNUC__ - std::cout << " say/0.1: __GNUC__" << __GNUC__<< "\n"; - #endif - - #if __GNUC_MINOR__ - std::cout << " say/0.1: __GNUC_MINOR__" << __GNUC_MINOR__<< "\n"; - #endif - - #if __clang_major__ - std::cout << " say/0.1: __clang_major__" << __clang_major__<< "\n"; - #endif - - #if __clang_minor__ - std::cout << " say/0.1: __clang_minor__" << __clang_minor__<< "\n"; - #endif - - #if __apple_build_version__ - std::cout << " say/0.1: __apple_build_version__" << __apple_build_version__<< "\n"; - #endif - - // SUBSYSTEMS - - #if __MSYS__ - std::cout << " say/0.1: __MSYS__" << __MSYS__<< "\n"; - #endif - - #if __MINGW32__ - std::cout << " say/0.1: __MINGW32__" << __MINGW32__<< "\n"; - #endif - - #if __MINGW64__ - std::cout << " say/0.1: __MINGW64__" << __MINGW64__<< "\n"; - #endif - - #if __CYGWIN__ - std::cout << " say/0.1: __CYGWIN__" << __CYGWIN__<< "\n"; - #endif -} diff --git a/features/emscripten/.gitignore b/features/emscripten/.gitignore deleted file mode 100644 index 76b68eb3..00000000 --- a/features/emscripten/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -bin -conaninfo.txt -conanbuildinfo.txt -conan_imports_manifest.txt -activate.ps1 -activate.bat -activate.sh -deactivate.ps1 -deactivate.bat -deactivate.sh diff --git a/features/emscripten/CMakeLists.txt b/features/emscripten/CMakeLists.txt deleted file mode 100644 index 50c8898a..00000000 --- a/features/emscripten/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -cmake_minimum_required(VERSION 2.8) - -project(conan-hello-emscripten) - -include(conanbuildinfo.cmake) -conan_basic_setup() - -add_executable(${PROJECT_NAME} main.cpp) - -target_include_directories(${PROJECT_NAME} PRIVATE ${CONAN_INCLUDE_DIRS}) -target_link_libraries(${PROJECT_NAME} PRIVATE ${CONAN_LIBS}) - -set_target_properties(${PROJECT_NAME} PROPERTIES - SUFFIX ".html" - LINK_FLAGS "--emrun") - -install(TARGETS ${PROJECT_NAME} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) - -install(FILES - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.js - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.wasm - DESTINATION bin) diff --git a/features/emscripten/build.bat b/features/emscripten/build.bat deleted file mode 100755 index f1ad5257..00000000 --- a/features/emscripten/build.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off - -conan remove conan-hello-emscripten/* -f -conan create . conan/testing --profile:host=emscripten.profile --profile:build=default --build missing -conan install conanfile.txt --profile:host=emscripten.profile --profile:build=default --build missing diff --git a/features/emscripten/build.sh b/features/emscripten/build.sh deleted file mode 100755 index 7a5b149c..00000000 --- a/features/emscripten/build.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -conan remove conan-hello-emscripten/* -f -conan create . conan/testing --profile:host=emscripten.profile --profile:build=default --build missing -conan install conanfile.txt --profile:host=emscripten.profile --profile:build=default diff --git a/features/emscripten/conanfile.py b/features/emscripten/conanfile.py deleted file mode 100644 index 92a9390b..00000000 --- a/features/emscripten/conanfile.py +++ /dev/null @@ -1,28 +0,0 @@ -from conans import ConanFile, CMake - - -class ConanHelloEmscripten(ConanFile): - name = "conan-hello-emscripten" - version = "1.0" - description = "hello-world example of conan usage with Emscripten" - topics = ("conan", "hello", "emscripten", "js", "javascript") - license = "MIT" - url = "https://github.com/conan-io/examples" - homepage = "https://github.com/conan-io/examples" - settings = {"os": ["Emscripten"]} - requires = "zlib/1.2.11" - exports_sources = ["CMakeLists.txt", "main.cpp"] - generators = ["cmake"] - - def _configure_cmake(self): - cmake = CMake(self) - cmake.configure() - return cmake - - def build(self): - cmake = self._configure_cmake() - cmake.build() - - def package(self): - cmake = self._configure_cmake() - cmake.install() diff --git a/features/emscripten/conanfile.txt b/features/emscripten/conanfile.txt deleted file mode 100644 index 47f9f55a..00000000 --- a/features/emscripten/conanfile.txt +++ /dev/null @@ -1,8 +0,0 @@ -[requires] -conan-hello-emscripten/1.0@conan/testing -[generators] -virtualenv -[imports] -bin, *.html -> ./bin -bin, *.wasm -> ./bin -bin, *.js -> ./bin diff --git a/features/emscripten/emscripten.profile b/features/emscripten/emscripten.profile deleted file mode 100644 index 3d3afd1a..00000000 --- a/features/emscripten/emscripten.profile +++ /dev/null @@ -1,9 +0,0 @@ -[settings] -os=Emscripten -arch=wasm -compiler=clang -compiler.version=14 -build_type=Release - -[build_requires] -emsdk/2.0.30 diff --git a/features/emscripten/main.cpp b/features/emscripten/main.cpp deleted file mode 100644 index d9a34776..00000000 --- a/features/emscripten/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include - -int main() -{ - std::cout << "Using zlib version: " << zlibVersion() << std::endl; -} diff --git a/features/emscripten/run.cmd b/features/emscripten/run.cmd deleted file mode 100755 index e93c47bb..00000000 --- a/features/emscripten/run.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call activate.bat -emrun bin\conan-hello-emscripten.html diff --git a/features/emscripten/run.sh b/features/emscripten/run.sh deleted file mode 100755 index cd187a05..00000000 --- a/features/emscripten/run.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -source activate.sh -emrun ./bin/conan-hello-emscripten.html diff --git a/features/integrate_build_system/build.bat b/features/integrate_build_system/build.bat deleted file mode 100644 index f64fcd65..00000000 --- a/features/integrate_build_system/build.bat +++ /dev/null @@ -1 +0,0 @@ -python build.py \ No newline at end of file diff --git a/features/integrate_build_system/build.py b/features/integrate_build_system/build.py deleted file mode 100644 index ebe981cf..00000000 --- a/features/integrate_build_system/build.py +++ /dev/null @@ -1,20 +0,0 @@ -import os -import subprocess - - -def run(cmd): - ret = os.system(cmd) - if ret != 0: - raise Exception("Failed command: %s" % cmd) - - -def main(): - run("conan create waf-generator user/channel") - run("conan create waf-installer user/channel") - run("conan create waf-build-helper user/channel") - run("conan create waf-mylib user/channel -s compiler.cppstd=14") - run("conan create mylib-consumer waf-consumer/1.0@user/channel -s compiler.cppstd=14") - - -if __name__ == '__main__': - main() diff --git a/features/integrate_build_system/build.sh b/features/integrate_build_system/build.sh deleted file mode 100755 index 35c3146a..00000000 --- a/features/integrate_build_system/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -set -ex - -python build.py \ No newline at end of file diff --git a/features/integrate_build_system/mylib-consumer/conanfile.py b/features/integrate_build_system/mylib-consumer/conanfile.py deleted file mode 100644 index c8c83c11..00000000 --- a/features/integrate_build_system/mylib-consumer/conanfile.py +++ /dev/null @@ -1,19 +0,0 @@ -import os - -from conans import ConanFile, python_requires - -waf_import = python_requires("waf-build-helper/0.1@user/channel") - - -class TestWafConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - name = "waf-consumer" - generators = "Waf" - requires = "mylib-waf/1.0@user/channel" - build_requires = "WafGen/0.1@user/channel", "waf/2.0.19@user/channel" - exports_sources = "wscript", "main.cpp" - - def build(self): - waf = waf_import.WafBuildEnvironment(self) - waf.configure() - waf.build() diff --git a/features/integrate_build_system/mylib-consumer/main.cpp b/features/integrate_build_system/mylib-consumer/main.cpp deleted file mode 100644 index aa6bda0c..00000000 --- a/features/integrate_build_system/mylib-consumer/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int main() { - MyLib mylib; - mylib.PrintMessage("HELLO CONAN-WAF TEST!"); - return 0; -} diff --git a/features/integrate_build_system/mylib-consumer/wscript b/features/integrate_build_system/mylib-consumer/wscript deleted file mode 100644 index f7eeb0ce..00000000 --- a/features/integrate_build_system/mylib-consumer/wscript +++ /dev/null @@ -1,19 +0,0 @@ -#! /usr/bin/env python -# encoding: utf-8 - -top = '.' -out = 'build' - - -def options(opt): - opt.load('compiler_cxx') - - -def configure(conf): - conf.load('compiler_cxx') - conf.load('waf_conan_libs_info', tooldir='.') - conf.load('waf_conan_toolchain', tooldir='.') - - -def build(bld): - bld.program(source='main.cpp', target='app', use=bld.env.CONAN_LIBS) diff --git a/features/integrate_build_system/waf-build-helper/conanfile.py b/features/integrate_build_system/waf-build-helper/conanfile.py deleted file mode 100644 index 019a2eae..00000000 --- a/features/integrate_build_system/waf-build-helper/conanfile.py +++ /dev/null @@ -1,10 +0,0 @@ -import os -import shutil -from conans import ConanFile, tools -from waf_environment import WafBuildEnvironment - - -class PythonRequires(ConanFile): - name = "waf-build-helper" - version = "0.1" - exports = "waf_environment.py" diff --git a/features/integrate_build_system/waf-build-helper/waf_environment.py b/features/integrate_build_system/waf-build-helper/waf_environment.py deleted file mode 100644 index d545c89e..00000000 --- a/features/integrate_build_system/waf-build-helper/waf_environment.py +++ /dev/null @@ -1,139 +0,0 @@ -import os -import shutil -from conans import ConanFile, tools, __version__ as conan_version -from conans.client.build.compiler_flags import libcxx_flag, libcxx_define, format_defines -from conans.model.version import Version -from conans.errors import ConanException - - -class WafBuildEnvironment(object): - def __init__(self, conanfile): - self._conanfile = conanfile - self._settings = self._conanfile.settings - self._arch = self._ss("arch") - self._os = self._ss("os") - self._compiler = self._ss("compiler") - self._compiler_version = self._ss("compiler.version") - self._compiler_libcxx = self._ss("compiler.libcxx") - self._compiler_cppstd = self._ss("compiler.cppstd") - self._build_type = self._ss("build_type") - self._compiler_runtime = self._ss("compiler.runtime") - self._arch_conan2waf = {'x86': 'x86', 'x86_64': 'x64'} - - def _gcc_ver_conan2waf(self, conan_version): - version = [v for v in conan_version.split('.', 3)] - while len(version) < 3: - version.append('0') - return "('{}', '{}', '{}')".format(version[0], version[1], version[2]) - - def _libcxx_flags(self, compiler, libcxx): - lib_flags = [] - if libcxx: - if conan_version >= Version("1.26"): - stdlib_define = libcxx_define(self._settings) - cxxf = libcxx_flag(self._settings) - else: - stdlib_define = libcxx_define(compiler=compiler, libcxx=libcxx) - cxxf = libcxx_flag(compiler=compiler, libcxx=libcxx) - - lib_flags.extend(format_defines([stdlib_define])) - if cxxf: - lib_flags.append(cxxf) - - return lib_flags - - def _cppstd_flag(self): - if conan_version >= Version("1.24"): - return tools.cppstd_flag(self._settings) - else: - from conans.client.build.cppstd_flags import cppstd_flag, cppstd_from_settings - compiler = self._settings.get_safe("compiler") - compiler_version = self._settings.get_safe("compiler.version") - cppstd = cppstd_from_settings(self._settings) - return cppstd_flag(compiler, compiler_version, cppstd) - - - def _toolchain_content(self): - sections = [] - sections.append("def configure(conf):") - sections.append(" if not conf.env.CXXFLAGS:") - sections.append(" conf.env.CXXFLAGS = []") - sections.append(" if not conf.env.LINKFLAGS:") - sections.append(" conf.env.LINKFLAGS = []") - if "Visual Studio" in self._compiler: - # first we set the options for the compiler, then load - if self._compiler_version: - sections.append(" conf.env.MSVC_VERSION = '{}.0'".format( - self._compiler_version)) - try: - sections.append(" conf.env.MSVC_TARGETS = '{}'".format( - self._arch_conan2waf[self._arch])) - except KeyError: - raise ConanException( - "Architecture '%s' not supported" % self._arch) - - sections.append(" conf.env.CXXFLAGS.append('/{}')".format( - self._compiler_runtime)) - - sections.append(" conf.env.CXXFLAGS.extend(['/EHsc'])") - if self._build_type == "Debug": - sections.append(" conf.env.CXXFLAGS.extend(['/Zi', '/FS'])") - sections.append(" conf.env.LINKFLAGS.extend(['/DEBUG'])") - elif self._build_type == "Release": - sections.append( - " conf.env.CXXFLAGS.extend(['/O2', '/Ob1', '/DNDEBUG'])") - else: - sections.append(" conf.env.CC_VERSION = {}".format( - self._gcc_ver_conan2waf(self._compiler_version))) - - cxxf = self._libcxx_flags( - compiler=self._compiler, libcxx=self._compiler_libcxx) - cxxf.append(self._cppstd_flag()) - for flag in cxxf: - sections.append( - " conf.env.CXXFLAGS.append('{}')".format(flag)) - - if self._build_type == "Debug": - sections.append(" conf.env.CXXFLAGS.extend(['-g'])") - elif self._build_type == "Release": - sections.append(" conf.env.CXXFLAGS.extend(['-O3'])") - sections.append("\n") - return "\n".join(sections) - - def _save_toolchain_file(self): - filename = "waf_conan_toolchain.py" - content = self._toolchain_content() - output_path = self._conanfile.build_folder - with open(os.path.join(output_path, filename), 'w') as output_file: - output_file.write(content) - self._conanfile.output.info("Waf Toolchain File created: %s" % (filename)) - - def configure(self, args=None): - self._save_toolchain_file() - args = args or [] - command = "waf configure " + " ".join(arg for arg in args) - if self._compiler_version and "Visual Studio" in self._compiler: - command = command + \ - '--msvc_version="msvc {}.0"'.format(self._compiler_version) - with tools.vcvars(self._settings): - self._run(command) - - def build(self, args=None): - args = args or [] - command = "waf build " + " ".join(arg for arg in args) - with tools.vcvars(self._settings): - self._run(command) - - def _run(self, command): - try: - self._conanfile.run(command) - except Exception as e: - raise ConanException("Error running: {} ({})".format(command, str(e))) - - def _ss(self, setname): - """safe setting""" - return self._settings.get_safe(setname) - - def _so(self, setname): - """safe option""" - return self._conanfile.options.get_safe(setname) diff --git a/features/integrate_build_system/waf-generator/conanfile.py b/features/integrate_build_system/waf-generator/conanfile.py deleted file mode 100644 index c062b830..00000000 --- a/features/integrate_build_system/waf-generator/conanfile.py +++ /dev/null @@ -1,36 +0,0 @@ -from conans.model import Generator -from conans import ConanFile - - -class Waf(Generator): - def _remove_lib_extension(self, libs): - return [lib[0:-4] if lib.endswith(".lib") else lib for lib in libs] - - @property - def filename(self): - return "waf_conan_libs_info.py" - - @property - def content(self): - sections = [] - sections.append("def configure(ctx):") - conan_libs = [] - for dep_name, info in self.deps_build_info.dependencies: - if dep_name not in self.conanfile.build_requires: - dep_name = dep_name.replace("-", "_") - sections.append(" ctx.env.INCLUDES_{} = {}".format( - dep_name, info.include_paths)) - sections.append(" ctx.env.LIBPATH_{} = {}".format( - dep_name, info.lib_paths)) - sections.append(" ctx.env.LIB_{} = {}".format( - dep_name, self._remove_lib_extension(info.libs))) - conan_libs.append(dep_name) - sections.append(" ctx.env.CONAN_LIBS = {}".format(conan_libs)) - sections.append("") - return "\n".join(sections) - - -class WafGeneratorPackage(ConanFile): - name = "WafGen" - version = "0.1" - license = "MIT" diff --git a/features/integrate_build_system/waf-installer/LICENSE b/features/integrate_build_system/waf-installer/LICENSE deleted file mode 100644 index 57a9831c..00000000 --- a/features/integrate_build_system/waf-installer/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/features/integrate_build_system/waf-installer/conanfile.py b/features/integrate_build_system/waf-installer/conanfile.py deleted file mode 100644 index f283badb..00000000 --- a/features/integrate_build_system/waf-installer/conanfile.py +++ /dev/null @@ -1,31 +0,0 @@ -from conans import ConanFile, tools -import os - - -class WAFInstallerConan(ConanFile): - name = "waf" - version = "2.0.19" - description = "Waf is a Python-based build system" - settings = "os_build" - homepage = "https://gitlab.com/ita1024/waf" - license = "BSD" - exports_sources = ["LICENSE"] - - def build(self): - source_url = "https://waf.io/waf-%s" % (self.version) - self.output.warn("Downloading Waf build system: %s" % (source_url)) - tools.download(source_url, "waf") - if self.settings.os_build == "Windows": - tools.download( - "https://gitlab.com/ita1024/waf/raw/waf-{}/utils/waf.bat".format(self.version), "waf.bat") - elif self.settings.os_build == "Linux" or self.settings.os_build == "Macos": - self.run("chmod 755 waf") - - def package(self): - self.copy(pattern="LICENSE", src='.', dst="licenses") - self.copy('waf', src='.', dst="bin", keep_path=False) - self.copy('waf.bat', src='.', dst="bin", keep_path=False) - - def package_info(self): - self.output.info("Using Waf %s version" % self.version) - self.env_info.PATH.append(os.path.join(self.package_folder, "bin")) diff --git a/features/integrate_build_system/waf-mylib/conanfile.py b/features/integrate_build_system/waf-mylib/conanfile.py deleted file mode 100644 index c9b045ae..00000000 --- a/features/integrate_build_system/waf-mylib/conanfile.py +++ /dev/null @@ -1,33 +0,0 @@ -import os -from conans import ConanFile, python_requires - - -class MyLibConan(ConanFile): - python_requires("waf-build-helper/0.1@user/channel") - settings = "os", "compiler", "build_type", "arch" - name = "mylib-waf" - version = "1.0" - license = "MIT" - author = "Conan Team" - description = "Just a simple example of using Conan to package a Waf lib" - topics = ("conan", "libs", "Waf") - exports = "LICENSE" - exports_sources = "wscript", "src/mylib.cpp", "include/mylib.hpp" - build_requires = "waf/2.0.19@user/channel" - - def build(self): - waf = self.python_requires["waf-build-helper"].module.WafBuildEnvironment(self) - waf.configure() - waf.build() - - def package(self): - self.copy("*.hpp", dst="include", src="include", keep_path=False) - self.copy("*.lib", dst="lib", src="build", keep_path=False) - self.copy("*.dll", dst="bin", keep_path=False) - self.copy("*.dylib*", dst="lib", src="build", keep_path=False) - self.copy("*.so", dst="lib", src="build", keep_path=False) - self.copy("*.a", dst="lib", src="build", keep_path=False) - self.copy("LICENSE", dst="licenses", src=".", keep_path=False) - - def package_info(self): - self.cpp_info.libs = ["mylib"] diff --git a/features/integrate_build_system/waf-mylib/include/mylib.hpp b/features/integrate_build_system/waf-mylib/include/mylib.hpp deleted file mode 100644 index 8ba6b50f..00000000 --- a/features/integrate_build_system/waf-mylib/include/mylib.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#include - -class MyLib -{ -public: - MyLib() = default; - ~MyLib () = default; - void PrintMessage(const std::string& message); -}; - diff --git a/features/integrate_build_system/waf-mylib/src/mylib.cpp b/features/integrate_build_system/waf-mylib/src/mylib.cpp deleted file mode 100644 index 60278124..00000000 --- a/features/integrate_build_system/waf-mylib/src/mylib.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "../include/mylib.hpp" - -#include - -void MyLib::PrintMessage(const std::string & message) -{ - std::cout << message << std::endl; -} - diff --git a/features/integrate_build_system/waf-mylib/wscript b/features/integrate_build_system/waf-mylib/wscript deleted file mode 100644 index 3ef16c6c..00000000 --- a/features/integrate_build_system/waf-mylib/wscript +++ /dev/null @@ -1,18 +0,0 @@ -#! /usr/bin/env python -# encoding: utf-8 - -top = '.' -out = 'build' - - -def options(opt): - opt.load('compiler_cxx') - - -def configure(conf): - conf.load('compiler_cxx') - conf.load('waf_conan_toolchain', tooldir='.') - - -def build(bld): - bld.stlib(target='mylib', source='./src/mylib.cpp') diff --git a/features/lockfiles/build_order/app1/conanfile.py b/features/lockfiles/build_order/app1/conanfile.py deleted file mode 100644 index ed4b623e..00000000 --- a/features/lockfiles/build_order/app1/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ - -from conans import ConanFile - -required_conan_version = ">=1.28" - -class App1Conan(ConanFile): - requires = "libd/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/build_order/app2/conanfile.py b/features/lockfiles/build_order/app2/conanfile.py deleted file mode 100644 index adcdddea..00000000 --- a/features/lockfiles/build_order/app2/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ - -from conans import ConanFile - -required_conan_version = ">=1.28" - -class App2Conan(ConanFile): - requires = "libc/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/build_order/build.bat b/features/lockfiles/build_order/build.bat deleted file mode 100644 index f64fcd65..00000000 --- a/features/lockfiles/build_order/build.bat +++ /dev/null @@ -1 +0,0 @@ -python build.py \ No newline at end of file diff --git a/features/lockfiles/build_order/build.py b/features/lockfiles/build_order/build.py deleted file mode 100644 index d49fbf2b..00000000 --- a/features/lockfiles/build_order/build.py +++ /dev/null @@ -1,108 +0,0 @@ -import os, json, shutil -import subprocess -from contextlib import contextmanager - - -def run(cmd, assert_error=False): - print("*********** Running: %s" % cmd) - ret = os.system(cmd) - if ret == 0 and assert_error: - raise Exception("Command unexpectedly succedeed: %s" % cmd) - if ret != 0 and not assert_error: - raise Exception("Failed command: %s" % cmd) - -def load(filename): - with open(filename, "r") as f: - return f.read() - -def rm(path): - if os.path.isfile(path): - os.remove(path) - elif os.path.isdir(path): - shutil.rmtree(path) - -@contextmanager -def chdir(path): - current_path = os.getcwd() - try: - os.chdir(path) - yield - finally: - os.chdir(current_path) - -@contextmanager -def setenv(key, value): - old_value = os.environ.get(key) - os.environ[key] = value - try: - yield - finally: - if old_value is not None: - os.environ[key] = old_value - - -def clean(): - rm("tmp") - rm("app1.lock") - rm("app2.lock") - rm("build_order.json") - rm("build_order2.json") - - -def build_order(): - clean() - - run("conan config set general.default_package_id_mode=full_version_mode") - run("conan export liba liba/0.1@user/testing") - run("conan export libb libb/0.1@user/testing") - run("conan export libc libc/0.1@user/testing") - run("conan export libd libd/0.1@user/testing") - run("conan export app1 app1/0.1@user/testing") - run("conan export app2 app2/0.1@user/testing") - - run("conan lock create --reference=app1/0.1@user/testing --lockfile-out=app1.lock") - print(load("app1.lock")) - run("conan lock build-order app1.lock --json=build_order.json") - print(load("build_order.json")) - - run("conan install app1/0.1@user/testing --build=missing") - run("conan install app2/0.1@user/testing --build=missing") - - run("conan lock create --reference=app1/0.1@user/testing --lockfile-out=app1.lock") - print(load("app1.lock")) - run("conan lock build-order app1.lock --json=build_order.json") - print(load("build_order.json")) # Empty [] - - run("conan lock create --reference=app1/0.1@user/testing --lockfile-out=app1.lock --build") - print(load("app1.lock")) - run("conan lock build-order app1.lock --json=build_order.json") - print(load("build_order.json")) # All deps - - # Modifying libb outside the version range - run("conan create libb libb/2.0@user/testing") - run("conan lock create --reference=app1/0.1@user/testing --lockfile-out=app1.lock") - print(load("app1.lock")) - run("conan lock build-order app1.lock --json=build_order.json") - print(load("build_order.json")) - - # Modifying libb, what needs to be built? - run("conan create libb libb/0.2@user/testing") - run("conan lock create --reference=app1/0.1@user/testing --lockfile-out=app1.lock") - print(load("app1.lock")) - run("conan lock build-order app1.lock --json=build_order.json") - print(load("build_order.json")) - run("conan lock create --reference=app2/0.1@user/testing --lockfile-out=app2.lock") - print(load("app2.lock")) - run("conan lock build-order app2.lock --json=build_order2.json") - print(load("build_order2.json")) - - - - clean() - - -if __name__ == '__main__': - home = os.path.abspath(os.path.join(os.path.dirname(__file__), "tmp")) - with setenv("CONAN_USER_HOME", home): - build_order() - diff --git a/features/lockfiles/build_order/build.sh b/features/lockfiles/build_order/build.sh deleted file mode 100755 index 35c3146a..00000000 --- a/features/lockfiles/build_order/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -set -ex - -python build.py \ No newline at end of file diff --git a/features/lockfiles/build_order/liba/conanfile.py b/features/lockfiles/build_order/liba/conanfile.py deleted file mode 100644 index 8c0c87a4..00000000 --- a/features/lockfiles/build_order/liba/conanfile.py +++ /dev/null @@ -1,6 +0,0 @@ -from conans import ConanFile, tools - -required_conan_version = ">=1.28" - -class PkgaConan(ConanFile): - pass diff --git a/features/lockfiles/build_order/libb/conanfile.py b/features/lockfiles/build_order/libb/conanfile.py deleted file mode 100644 index 43ab94e5..00000000 --- a/features/lockfiles/build_order/libb/conanfile.py +++ /dev/null @@ -1,6 +0,0 @@ -from conans import ConanFile - -required_conan_version = ">=1.28" - -class LibBConan(ConanFile): - requires = "liba/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/build_order/libc/conanfile.py b/features/lockfiles/build_order/libc/conanfile.py deleted file mode 100644 index 50e1ddcd..00000000 --- a/features/lockfiles/build_order/libc/conanfile.py +++ /dev/null @@ -1,6 +0,0 @@ -from conans import ConanFile - -required_conan_version = ">=1.28" - -class LibCConan(ConanFile): - requires = "liba/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/build_order/libd/conanfile.py b/features/lockfiles/build_order/libd/conanfile.py deleted file mode 100644 index 7db1904b..00000000 --- a/features/lockfiles/build_order/libd/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ - -from conans import ConanFile - -required_conan_version = ">=1.28" - -class LibDConan(ConanFile): - requires = "libb/[>0.0 <1.0]@user/testing", "libc/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/ci/.gitignore b/features/lockfiles/ci/.gitignore deleted file mode 100644 index 3fc3532b..00000000 --- a/features/lockfiles/ci/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -release/ -bo.json \ No newline at end of file diff --git a/features/lockfiles/ci/app1/conanfile.py b/features/lockfiles/ci/app1/conanfile.py deleted file mode 100644 index 7b434ceb..00000000 --- a/features/lockfiles/ci/app1/conanfile.py +++ /dev/null @@ -1,8 +0,0 @@ - -from conans import ConanFile - -required_conan_version = ">=1.28" - -class App1Conan(ConanFile): - settings = "build_type" - requires = "libd/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/ci/app2/conanfile.py b/features/lockfiles/ci/app2/conanfile.py deleted file mode 100644 index 1c905a99..00000000 --- a/features/lockfiles/ci/app2/conanfile.py +++ /dev/null @@ -1,8 +0,0 @@ - -from conans import ConanFile - -required_conan_version = ">=1.28" - -class App2Conan(ConanFile): - settings = "build_type" - requires = "libc/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/ci/build.bat b/features/lockfiles/ci/build.bat deleted file mode 100644 index f64fcd65..00000000 --- a/features/lockfiles/ci/build.bat +++ /dev/null @@ -1 +0,0 @@ -python build.py \ No newline at end of file diff --git a/features/lockfiles/ci/build.py b/features/lockfiles/ci/build.py deleted file mode 100755 index 301e19db..00000000 --- a/features/lockfiles/ci/build.py +++ /dev/null @@ -1,120 +0,0 @@ -import os, json, shutil -import subprocess -from contextlib import contextmanager - - -def run(cmd, assert_error=False): - print("*********** Running: %s" % cmd) - ret = os.system(cmd) - if ret == 0 and assert_error: - raise Exception("Command unexpectedly succedeed: %s" % cmd) - if ret != 0 and not assert_error: - raise Exception("Failed command: %s" % cmd) - -def load(filename): - with open(filename, "r") as f: - return f.read() - -def save(filename, content): - with open(filename, "w") as f: - return f.write(content) - - -def rm(path): - if os.path.isfile(path): - os.remove(path) - elif os.path.isdir(path): - shutil.rmtree(path) - -@contextmanager -def chdir(path): - current_path = os.getcwd() - try: - os.chdir(path) - yield - finally: - os.chdir(current_path) - -@contextmanager -def setenv(key, value): - old_value = os.environ.get(key) - os.environ[key] = value - try: - yield - finally: - if old_value is not None: - os.environ[key] = old_value - - -def clean(): - rm("tmp") - rm("locks") - rm("bo_release.json") - rm("bo_debug.json") - - -def ci_pipeline(): - clean() - run("conan config set general.default_package_id_mode=full_version_mode") - for config in ("Release", "Debug"): - run("conan create liba liba/0.1@user/testing -s build_type=%s" % config) - run("conan create libb libb/0.1@user/testing -s build_type=%s" % config) - run("conan create libc libc/0.1@user/testing -s build_type=%s" % config) - run("conan create libd libd/0.1@user/testing -s build_type=%s" % config) - run("conan create app1 app1/0.1@user/testing -s build_type=%s" % config) - run("conan create app2 app2/0.1@user/testing -s build_type=%s" % config) - - # A developer does some change to the libb - with chdir("libb"): - libb = load("conanfile.py") - libb = libb + "# Some changes" - save("conanfile.py", libb) - - run("conan lock create conanfile.py --name=libb --version=0.2 " - "--user=user --channel=testing --lockfile-out=../locks/libb_deps_base.lock --base") - - # Even if liba gets a new 0.2 version, the lockfile will avoid it - run("conan create liba liba/0.2@user/testing") - with chdir("libb"): - # This will be useful to capture the revision - run("conan export . libb/0.2@user/testing --lockfile=../locks/libb_deps_base.lock " - "--lockfile-out=../locks/libb_base.lock") - print(load("../locks/libb_base.lock")) - # Capture the configuration lockfiles, one per configuration - run("conan lock create conanfile.py --name=libb --version=0.2 " - "--user=user --channel=testing --lockfile=../locks/libb_base.lock --lockfile-out=../locks/libb_deps_debug.lock -s build_type=Debug") - run("conan lock create conanfile.py --name=libb --version=0.2 " - "--user=user --channel=testing --lockfile=../locks/libb_base.lock --lockfile-out=../locks/libb_deps_release.lock") - # Now build libb - run("conan create . libb/0.2@user/testing --lockfile=../locks/libb_deps_release.lock") - run("conan create . libb/0.2@user/testing --lockfile=../locks/libb_deps_debug.lock") - - # Capture the app1 base lockfile - run("conan lock create --reference=app1/0.1@user/testing --lockfile=locks/libb_base.lock " - "--lockfile-out=locks/app1_base.lock --base") - # And one lockfile per configuration - run("conan lock create --reference=app1/0.1@user/testing --lockfile=locks/app1_base.lock " - "--lockfile-out=locks/app1_release.lock") - run("conan lock create --reference=app1/0.1@user/testing --lockfile=locks/app1_base.lock " - "--lockfile-out=locks/app1_debug.lock -s build_type=Debug") - - run("conan lock build-order locks/app1_release.lock --json=bo_release.json") - run("conan lock build-order locks/app1_debug.lock --json=bo_debug.json") - build_order_release = json.loads(load("bo_release.json")) - build_order_debug = json.loads(load("bo_debug.json")) - - for level in build_order_release: - for item in level: - ref, pid, context, id_ = item - print(item) - run("conan install %s --build=%s --lockfile=locks/app1_release.lock " - "--lockfile-out=locks/app1_release_updated.lock" % (ref, ref)) - run("conan lock update locks/app1_release.lock locks/app1_release_updated.lock") - - print(load("locks/app1_release.lock")) - clean() - -if __name__ == '__main__': - home = os.path.abspath(os.path.join(os.path.dirname(__file__), "tmp")) - with setenv("CONAN_USER_HOME", home): - ci_pipeline() diff --git a/features/lockfiles/ci/build.sh b/features/lockfiles/ci/build.sh deleted file mode 100755 index 421641ed..00000000 --- a/features/lockfiles/ci/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -set -ex - -python build.py diff --git a/features/lockfiles/ci/liba/conanfile.py b/features/lockfiles/ci/liba/conanfile.py deleted file mode 100644 index 040b059a..00000000 --- a/features/lockfiles/ci/liba/conanfile.py +++ /dev/null @@ -1,6 +0,0 @@ -from conans import ConanFile, tools - -required_conan_version = ">=1.28.0" - -class PkgaConan(ConanFile): - settings = "build_type" diff --git a/features/lockfiles/ci/libb/conanfile.py b/features/lockfiles/ci/libb/conanfile.py deleted file mode 100644 index 580d6395..00000000 --- a/features/lockfiles/ci/libb/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans import ConanFile - -required_conan_version = ">=1.28" - -class LibBConan(ConanFile): - settings = "build_type" - requires = "liba/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/ci/libc/conanfile.py b/features/lockfiles/ci/libc/conanfile.py deleted file mode 100644 index 19335859..00000000 --- a/features/lockfiles/ci/libc/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans import ConanFile - -required_conan_version = ">=1.28" - -class LibCConan(ConanFile): - settings = "build_type" - requires = "liba/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/ci/libd/conanfile.py b/features/lockfiles/ci/libd/conanfile.py deleted file mode 100644 index bfef28b1..00000000 --- a/features/lockfiles/ci/libd/conanfile.py +++ /dev/null @@ -1,8 +0,0 @@ - -from conans import ConanFile - -required_conan_version = ">=1.28" - -class LibDConan(ConanFile): - settings = "build_type" - requires = "libb/[>0.0 <1.0]@user/testing", "libc/[>0.0 <1.0]@user/testing" diff --git a/features/lockfiles/intro/build.bat b/features/lockfiles/intro/build.bat deleted file mode 100644 index f64fcd65..00000000 --- a/features/lockfiles/intro/build.bat +++ /dev/null @@ -1 +0,0 @@ -python build.py \ No newline at end of file diff --git a/features/lockfiles/intro/build.py b/features/lockfiles/intro/build.py deleted file mode 100644 index c33b42f8..00000000 --- a/features/lockfiles/intro/build.py +++ /dev/null @@ -1,158 +0,0 @@ -import os, json, shutil, sys -import platform -import subprocess -from contextlib import contextmanager - - -def run(cmd, assert_error=False): - print("*********** Running: %s" % cmd) - ret = os.system(cmd) - if ret == 0 and assert_error: - raise Exception("Command unexpectedly succedeed: %s" % cmd) - if ret != 0 and not assert_error: - raise Exception("Failed command: %s" % cmd) - -def load(filename): - with open(filename, "r") as f: - return f.read() - -def rm(path): - if os.path.isfile(path): - os.remove(path) - elif os.path.isdir(path): - shutil.rmtree(path) - -@contextmanager -def chdir(path): - current_path = os.getcwd() - try: - os.chdir(path) - yield - finally: - os.chdir(current_path) - -@contextmanager -def setenv(key, value): - old_value = os.environ.get(key) - os.environ[key] = value - try: - yield - finally: - if old_value is not None: - os.environ[key] = old_value - - -def clean(): - rm("tmp") - rm("pkgb/build") - rm("pkgb/locks") - rm("consume") - run("conan remove '*' -f") - -def single_config(): - clean() - - run("conan config set general.default_package_id_mode=full_version_mode") - run("conan create pkga pkga/0.1@user/testing") - - with chdir("pkgb"): - run("conan lock create conanfile.py --user=user --channel=testing --lockfile-out=locks/pkgb_deps.lock") - print(load("locks/pkgb_deps.lock")) - - run("conan create pkga pkga/0.2@user/testing") - - os.makedirs("pkgb/build") - with chdir("pkgb/build"): - run("conan install ..") - if platform.system() == "Windows": - run('cmake ../src -G "{}"'.format(os.getenv("CMAKE_GENERATOR"))) - else: - run("cmake ../src -DCMAKE_BUILD_TYPE=Release") - run("cmake --build . --config Release") - run(os.sep.join(["bin", "greet"])) - - run("conan install .. --lockfile=../locks/pkgb_deps.lock") - run("cmake --build . --config Release") - run(os.sep.join(["bin", "greet"])) - - run("conan install .. --lockfile=../locks/pkgb_deps.lock --build=pkga", assert_error=True) - - with chdir("pkgb"): - run("conan create . user/stable --lockfile=locks/pkgb_deps.lock", assert_error=True) - run("conan create . user/testing --lockfile=locks/pkgb_deps.lock --lockfile-out=locks/pkgb.lock") - print(load("locks/pkgb.lock")) - run("conan create . user/testing --lockfile=locks/pkgb.lock", assert_error=True) - run("conan create . user/testing --lockfile=locks/pkgb_deps.lock") - - os.makedirs("consume") - with chdir("consume"): - run("conan install pkgb/0.1@user/testing --lockfile=../pkgb/locks/pkgb.lock") - run(os.sep.join(["bin", "greet"])) - - clean() - -def multi_config(): - # Multi-configuration - clean() - - run("conan create pkga pkga/0.1@user/testing") - run("conan create pkga pkga/0.1@user/testing -s build_type=Debug") - - with chdir("pkgb"): - run("conan lock create conanfile.py --user=user --channel=testing --lockfile-out=locks/pkgb_release.lock") - run("conan lock create conanfile.py --user=user --channel=testing --lockfile-out=locks/pkgb_debug.lock -s build_type=Debug") - rm("locks") - run("conan lock create conanfile.py --user=user --channel=testing --lockfile-out=locks/pkgb_base.lock --base") - run("conan lock create conanfile.py --user=user --channel=testing --lockfile=locks/pkgb_base.lock --lockfile-out=locks/pkgb_deps_debug.lock -s build_type=Debug") - run("conan lock create conanfile.py --user=user --channel=testing --lockfile=locks/pkgb_base.lock --lockfile-out=locks/pkgb_deps_release.lock") - print(load("locks/pkgb_base.lock")) - print(load("locks/pkgb_deps_release.lock")) - print(load("locks/pkgb_deps_debug.lock")) - - run("conan create pkga pkga/0.2@user/testing") - run("conan create pkga pkga/0.2@user/testing -s build_type=Debug") - - os.makedirs("pkgb/build") - with chdir("pkgb/build"): - for config in ("Release", "Debug"): - run("conan install .. --lockfile=../locks/pkgb_deps_%s.lock -s build_type=%s" % (config.lower(), config), assert_error=True) - run("conan install .. --lockfile=../locks/pkgb_deps_%s.lock" % config.lower()) - if platform.system() == "Windows": - run('cmake ../src -G "{}"'.format(os.getenv("CMAKE_GENERATOR"))) - else: - run("cmake ../src -DCMAKE_BUILD_TYPE=%s" % config) - run("cmake --build . --config %s" % config) - run(os.sep.join(["bin", "greet"])) - run("conan install .. -s build_type=%s" % config) - run("cmake --build . --config %s" % config) - run(os.sep.join(["bin", "greet"])) - - run("conan install .. --lockfile=../locks/pkgb_deps_%s.lock --build=pkga" % config.lower(), assert_error=True) - - - with chdir("pkgb"): - for config in ("Release", "Debug"): - run("conan create . user/stable --lockfile=locks/pkgb_deps_%s.lock" % config.lower(), assert_error=True) - run("conan create . user/testing --lockfile=locks/pkgb_deps_%s.lock --lockfile-out=locks/pkgb_%s.lock" % (config.lower(), config.lower())) - print(load("locks/pkgb_%s.lock" % config.lower())) - run("conan create . user/testing --lockfile=locks/pkgb_%s.lock" % config.lower(), assert_error=True) - - os.makedirs("consume") - with chdir("consume"): - for config in ("Release", "Debug"): - run("conan install pkgb/0.1@user/testing --lockfile=../pkgb/locks/pkgb_%s.lock" % config.lower()) - run(os.sep.join(["bin", "greet"])) - - clean() - - -if __name__ == '__main__': - home = os.path.abspath(os.path.join(os.path.dirname(__file__), "tmp")) - with setenv("CONAN_USER_HOME", home): - if platform.system() == "Windows": - if not os.getenv("CMAKE_GENERATOR"): - print("CMAKE_GENERATOR environment variable not defined. " - "Please define the CMake generator in the CMAKE_GENERATOR environment variable.") - sys.exit() - single_config() - multi_config() diff --git a/features/lockfiles/intro/build.sh b/features/lockfiles/intro/build.sh deleted file mode 100755 index 35c3146a..00000000 --- a/features/lockfiles/intro/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -set -ex - -python build.py \ No newline at end of file diff --git a/features/lockfiles/intro/pkga/conanfile.py b/features/lockfiles/intro/pkga/conanfile.py deleted file mode 100644 index 9aa36086..00000000 --- a/features/lockfiles/intro/pkga/conanfile.py +++ /dev/null @@ -1,14 +0,0 @@ -from conans import ConanFile, tools - -required_conan_version = ">=1.28" - -class PkgaConan(ConanFile): - settings = "build_type" - exports_sources = "src/*" - - def build(self): - tools.replace_in_file("src/helloa.h", "%V%", self.version) - tools.replace_in_file("src/helloa.h", "%BT%", str(self.settings.build_type)) - - def package(self): - self.copy("*.h", dst="include", src="src") diff --git a/features/lockfiles/intro/pkga/src/helloa.h b/features/lockfiles/intro/pkga/src/helloa.h deleted file mode 100644 index ae3f72bf..00000000 --- a/features/lockfiles/intro/pkga/src/helloa.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once -#include - -inline void helloA(){ - std::cout << "HelloA %V% %BT%\n"; -} diff --git a/features/lockfiles/intro/pkgb/conanfile.py b/features/lockfiles/intro/pkgb/conanfile.py deleted file mode 100644 index f2d803b1..00000000 --- a/features/lockfiles/intro/pkgb/conanfile.py +++ /dev/null @@ -1,34 +0,0 @@ -from conans import ConanFile, CMake - -required_conan_version = ">=1.28" - -class PkgbConan(ConanFile): - name = "pkgb" - version = "0.1" - settings = "os", "compiler", "build_type", "arch" - options = {"shared": [True, False]} - default_options = {"shared": False} - generators = "cmake" - exports_sources = "src/*" - requires = "pkga/[>0.0]@user/testing" - - def build(self): - cmake = CMake(self) - cmake.configure(source_folder="src") - cmake.build() - - def package(self): - self.copy("*.h", dst="include", src="src") - self.copy("*.lib", dst="lib", keep_path=False) - self.copy("*.dll", dst="bin", keep_path=False) - self.copy("*.dylib*", dst="lib", keep_path=False) - self.copy("*.so", dst="lib", keep_path=False) - self.copy("*.a", dst="lib", keep_path=False) - self.copy("greet*", dst="bin", src="bin", keep_path=False) - - def deploy(self): - self.copy("*", dst="bin", src="bin", keep_path=False) - self.copy_deps("*", dst="bin", src="bin", keep_path=False) - - def package_info(self): - self.cpp_info.libs = ["pkgb"] diff --git a/features/lockfiles/intro/pkgb/src/CMakeLists.txt b/features/lockfiles/intro/pkgb/src/CMakeLists.txt deleted file mode 100644 index 7b24b734..00000000 --- a/features/lockfiles/intro/pkgb/src/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -cmake_minimum_required(VERSION 2.8) -project(MyHello CXX) - -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup() - -add_library(pkgb hello.cpp) - -add_executable(greet greet.cpp) -target_link_libraries(greet PRIVATE pkgb) diff --git a/features/lockfiles/intro/pkgb/src/greet.cpp b/features/lockfiles/intro/pkgb/src/greet.cpp deleted file mode 100644 index 46f8f2ff..00000000 --- a/features/lockfiles/intro/pkgb/src/greet.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "hellob.h" - -int main(){ - helloB(); - #ifdef NDEBUG - std::cout << "Greetings Release!" < -#include "hellob.h" -#include "helloa.h" - -void helloB(){ - helloA(); - #ifdef NDEBUG - std::cout << "HelloB Release!" < -#include "hello.h" - -void hello(){ - #ifdef NDEBUG - std::cout << "Hello World Release!" < -#include "hello.h" - -void hello(){ - #if !defined NDEBUG - std::cout << "Hello World Debug!" << std::endl; - #else - std::cout << "Hello World Release!" << std::endl; - #endif -} diff --git a/features/multi_config/hello.h b/features/multi_config/hello.h deleted file mode 100644 index f8a8424b..00000000 --- a/features/multi_config/hello.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#ifdef WIN32 - #define HELLO_EXPORT __declspec(dllexport) -#else - #define HELLO_EXPORT -#endif - -HELLO_EXPORT void hello(); diff --git a/features/multi_config/test_package/CMakeLists.txt b/features/multi_config/test_package/CMakeLists.txt deleted file mode 100644 index fe93e804..00000000 --- a/features/multi_config/test_package/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(PackageTest CXX) - -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup() - -add_executable(example example.cpp) -if (CONAN_SETTINGS_BUILD_TYPE STREQUAL "Debug") - message("CONAN_LIBS_DEBUG: ${CONAN_LIBS_DEBUG}") - target_link_libraries(example ${CONAN_LIBS_DEBUG}) -else() - message("CONAN_LIBS_RELEASE: ${CONAN_LIBS_RELEASE}") - target_link_libraries(example ${CONAN_LIBS_RELEASE}) -endif() diff --git a/features/multi_config/test_package/conanfile.py b/features/multi_config/test_package/conanfile.py deleted file mode 100644 index 025e3bcf..00000000 --- a/features/multi_config/test_package/conanfile.py +++ /dev/null @@ -1,19 +0,0 @@ -import os -from six import StringIO -from conans import ConanFile, CMake - - -class HelloTestConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "cmake" - - def build(self): - cmake = CMake(self) - cmake.configure() - cmake.build() - - def test(self): - os.chdir("bin") - output = StringIO() - self.run(".%sexample" % os.sep, run_environment=True, output=output) - assert ("Hello World {}!".format(str(self.settings.build_type)) in output.getvalue()), output.getvalue() diff --git a/features/multi_config/test_package/example.cpp b/features/multi_config/test_package/example.cpp deleted file mode 100644 index 4a5549c5..00000000 --- a/features/multi_config/test_package/example.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include "hello.h" - -int main() { - hello(); -} diff --git a/features/package_development_flow/build.bat b/features/package_development_flow/build.bat deleted file mode 100644 index e0f7748e..00000000 --- a/features/package_development_flow/build.bat +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO ON - -RMDIR /Q /S tmp - -conan source . --source-folder=tmp/source -conan install . --install-folder=tmp/build -conan build . --source-folder=tmp/source --build-folder=tmp/build -conan package . --source-folder=tmp/source --build-folder=tmp/build --package-folder=tmp/package - -REM NOTE: Use --force to prevent ERROR: Package already exists -conan export-pkg . user/testing --source-folder=tmp/source --build-folder=tmp/build --force - -REM You can also test the package that was just exported -conan test test_package Hello/1.0@user/testing - -REM Finally, run a full create, does all of the above + test_package -conan create . user/testing diff --git a/features/package_development_flow/build.sh b/features/package_development_flow/build.sh deleted file mode 100755 index 49ace031..00000000 --- a/features/package_development_flow/build.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -e -set -x - -rm -rf tmp - -conan source . --source-folder=tmp/source -conan install . --install-folder=tmp/build -conan build . --source-folder=tmp/source --build-folder=tmp/build -conan package . --source-folder=tmp/source --build-folder=tmp/build --package-folder=tmp/package - -# NOTE: Use --force to prevent ERROR: Package already exists -conan export-pkg . user/testing --source-folder=tmp/source --build-folder=tmp/build --force - -# You can also test the package that was just exported -conan test test_package Hello/1.0@user/testing - -# Finally, run a full create, does all of the above + test_package -conan create . user/testing diff --git a/features/package_development_flow/conanfile.py b/features/package_development_flow/conanfile.py deleted file mode 100644 index 11579013..00000000 --- a/features/package_development_flow/conanfile.py +++ /dev/null @@ -1,48 +0,0 @@ -from conans import ConanFile, CMake, tools - - -class HelloConan(ConanFile): - name = "Hello" - version = "1.0" - license = "" - author = " " - url = "" - description = "" - topics = ("", "", "") - settings = "os", "compiler", "build_type", "arch" - options = {"shared": [True, False]} - default_options = "shared=False" - generators = "cmake" - - def source(self): - self.run("git clone https://github.com/conan-io/hello.git") - self.run("cd hello") - # This small hack might be useful to guarantee proper /MT /MD linkage - # in MSVC if the packaged project doesn't have variables to set it - # properly - tools.replace_in_file("hello/CMakeLists.txt", "PROJECT(HelloWorld)", - '''PROJECT(HelloWorld) -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup()''') - - def build(self): - cmake = CMake(self) - cmake.configure(source_folder="hello") - cmake.build() - - # Explicit way: - # self.run('cmake %s/hello %s' - # % (self.source_folder, cmake.command_line)) - # self.run("cmake --build . %s" % cmake.build_config) - - def package(self): - self.copy("*.h", dst="include", src="hello") - self.copy("*hello.lib", dst="lib", keep_path=False) - self.copy("*.dll", dst="bin", keep_path=False) - self.copy("*.so", dst="lib", keep_path=False) - self.copy("*.dylib", dst="lib", keep_path=False) - self.copy("*.a", dst="lib", keep_path=False) - - def package_info(self): - self.cpp_info.libs = ["hello"] - diff --git a/features/package_development_flow/test_package/CMakeLists.txt b/features/package_development_flow/test_package/CMakeLists.txt deleted file mode 100644 index ad6dc6eb..00000000 --- a/features/package_development_flow/test_package/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(PackageTest CXX) - -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup() - -add_executable(example example.cpp) -target_link_libraries(example ${CONAN_LIBS}) - -# CTest is a testing tool that can be used to test your project. -# enable_testing() -# add_test(NAME example -# WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin -# COMMAND example) diff --git a/features/package_development_flow/test_package/conanfile.py b/features/package_development_flow/test_package/conanfile.py deleted file mode 100644 index c8b87833..00000000 --- a/features/package_development_flow/test_package/conanfile.py +++ /dev/null @@ -1,25 +0,0 @@ -import os - -from conans import ConanFile, CMake, tools - - -class HelloTestConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "cmake" - - def build(self): - cmake = CMake(self) - # Current dir is "test_package/build/" and CMakeLists.txt is - # in "test_package" - cmake.configure() - cmake.build() - - def imports(self): - self.copy("*.dll", dst="bin", src="bin") - self.copy("*.dylib*", dst="bin", src="lib") - self.copy('*.so*', dst='bin', src='lib') - - def test(self): - if not tools.cross_building(self.settings): - os.chdir("bin") - self.run(".%sexample" % os.sep) diff --git a/features/package_development_flow/test_package/example.cpp b/features/package_development_flow/test_package/example.cpp deleted file mode 100644 index 4a5549c5..00000000 --- a/features/package_development_flow/test_package/example.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include "hello.h" - -int main() { - hello(); -} diff --git a/features/python_requires/reuse_conanfile/build.bat b/features/python_requires/reuse_conanfile/build.bat deleted file mode 100644 index 23c8a4fd..00000000 --- a/features/python_requires/reuse_conanfile/build.bat +++ /dev/null @@ -1,4 +0,0 @@ -@ECHO ON - -conan create pyreq user/channel -conan create consumer user/channel diff --git a/features/python_requires/reuse_conanfile/build.sh b/features/python_requires/reuse_conanfile/build.sh deleted file mode 100755 index a2d879be..00000000 --- a/features/python_requires/reuse_conanfile/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -conan create pyreq user/channel -conan create consumer user/channel diff --git a/features/python_requires/reuse_conanfile/consumer/conanfile.py b/features/python_requires/reuse_conanfile/consumer/conanfile.py deleted file mode 100644 index 4b970624..00000000 --- a/features/python_requires/reuse_conanfile/consumer/conanfile.py +++ /dev/null @@ -1,13 +0,0 @@ -from conans import ConanFile, CMake, python_requires - - -base = python_requires("pyreq/version@user/channel") - -class ConsumerConan(base.get_conanfile()): - name = "consumer" - version = base.get_version() - - # All the recipe attributes and methods are defined in - # the python_requires imported source, it is a very - # easy way to share all the business logic across - # all the recipes in the same company diff --git a/features/python_requires/reuse_conanfile/consumer/src/hello.cpp b/features/python_requires/reuse_conanfile/consumer/src/hello.cpp deleted file mode 100644 index 235428a0..00000000 --- a/features/python_requires/reuse_conanfile/consumer/src/hello.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "hello.h" - -void hello(){ - #ifdef NDEBUG - std::cout << "Hello World Release!" < -#include -#include "say.h" - -void say(std::string msg){ - #ifdef NDEBUG - std::cout << "Release: " << msg < - -void say(std::string msg); \ No newline at end of file diff --git a/libraries/dear-imgui/basic/.gitignore b/libraries/dear-imgui/basic/.gitignore deleted file mode 100644 index 9c29bcef..00000000 --- a/libraries/dear-imgui/basic/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -bindings/ -build/ \ No newline at end of file diff --git a/libraries/dear-imgui/basic/CMakeLists.txt b/libraries/dear-imgui/basic/CMakeLists.txt deleted file mode 100644 index 9917ea61..00000000 --- a/libraries/dear-imgui/basic/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -cmake_minimum_required(VERSION 3.0) -project(dear-imgui-conan CXX) - -set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}) -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}) - -# CONFIG option is important so that CMake doesnt search for modules into the default modules directory -find_package(imgui CONFIG) -find_package(glfw3 CONFIG) -find_package(glew CONFIG) - -add_executable( dear-imgui-conan - main.cpp - opengl_shader.cpp - file_manager.cpp - opengl_shader.h - file_manager.h - bindings/imgui_impl_glfw.cpp - bindings/imgui_impl_opengl3.cpp - bindings/imgui_impl_glfw.h - bindings/imgui_impl_opengl3.h - assets/simple-shader.vs - assets/simple-shader.fs ) - -add_custom_command(TARGET dear-imgui-conan - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/assets/simple-shader.vs ${PROJECT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/assets/simple-shader.fs ${PROJECT_BINARY_DIR} -) - -target_compile_definitions(dear-imgui-conan PUBLIC IMGUI_IMPL_OPENGL_LOADER_GLEW) -target_link_libraries(dear-imgui-conan imgui::imgui GLEW::glew_s glfw::glfw) diff --git a/libraries/dear-imgui/basic/README.md b/libraries/dear-imgui/basic/README.md deleted file mode 100644 index 61516266..00000000 --- a/libraries/dear-imgui/basic/README.md +++ /dev/null @@ -1,31 +0,0 @@ -## Conan Dear ImGui example - -1. Install conan: https://docs.conan.io/en/latest/installation.html -2. Clone this repo: `git clone https://github.com/conan-io/examples.git` -3. Install dependencies, compile and run - -## Windows with Visual Studio: - -```bash -cd examples/libraries/dear-imgui/basic -mkdir build -cd build -conan install .. -s build_type=Release -conan install .. -s build_type=Debug -cmake .. -G "Visual Studio 15 2017 Win64" -cmake --build . --config Release -cd Release -dear-imgui-conan -``` - -## Linux: - -```bash -cd examples/libraries/dear-imgui/basic -mkdir build -cd build -conan install .. -s build_type=Release -cmake .. -DCMAKE_BUILD_TYPE=Release -cmake --build . -./dear-imgui-conan -``` diff --git a/libraries/dear-imgui/basic/assets/simple-shader.fs b/libraries/dear-imgui/basic/assets/simple-shader.fs deleted file mode 100644 index b392169e..00000000 --- a/libraries/dear-imgui/basic/assets/simple-shader.fs +++ /dev/null @@ -1,11 +0,0 @@ -#version 330 core - -out vec4 FragColor; - -in vec3 vertexColor; -uniform vec3 color; - -void main() -{ - FragColor = vec4(color*vertexColor,1.0); -} diff --git a/libraries/dear-imgui/basic/assets/simple-shader.vs b/libraries/dear-imgui/basic/assets/simple-shader.vs deleted file mode 100644 index 42777049..00000000 --- a/libraries/dear-imgui/basic/assets/simple-shader.vs +++ /dev/null @@ -1,18 +0,0 @@ -#version 330 core - -layout (location = 0) in vec3 position; -layout (location = 1) in vec3 color; - -out vec3 vertexColor; - -uniform float rotation; -uniform vec2 translation; - -void main() -{ - vec2 rotated_pos; - rotated_pos.x = translation.x + position.x*cos(rotation) - position.y*sin(rotation); - rotated_pos.y = translation.y + position.x*sin(rotation) + position.y*cos(rotation); - gl_Position = vec4(rotated_pos.x, rotated_pos.y, position.z, 1.0); - vertexColor = color; -} diff --git a/libraries/dear-imgui/basic/build.bat b/libraries/dear-imgui/basic/build.bat deleted file mode 100644 index 4d941ff8..00000000 --- a/libraries/dear-imgui/basic/build.bat +++ /dev/null @@ -1,14 +0,0 @@ -if "%CMAKE_GENERATOR%"=="" ( - ECHO CMAKE_GENERATOR environment variable not defined. Please define the CMake generator in the CMAKE_GENERATOR environment variable. -) -else ( - @ECHO ON - - RMDIR /Q /S build - MKDIR build - PUSHD build - - conan install .. - cmake .. -G "%CMAKE_GENERATOR%" - cmake --build . --config Release -) diff --git a/libraries/dear-imgui/basic/build.sh b/libraries/dear-imgui/basic/build.sh deleted file mode 100755 index 56d26a90..00000000 --- a/libraries/dear-imgui/basic/build.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -set -e -set -x - -rm -rf build -mkdir build -pushd build - -export CONAN_SYSREQUIRES_MODE=enabled -conan install .. --build=missing -cmake .. -DCMAKE_BUILD_TYPE=Release -cmake --build . diff --git a/libraries/dear-imgui/basic/conanfile.txt b/libraries/dear-imgui/basic/conanfile.txt deleted file mode 100644 index 90ca7413..00000000 --- a/libraries/dear-imgui/basic/conanfile.txt +++ /dev/null @@ -1,16 +0,0 @@ -[requires] -imgui/1.74 -glfw/3.3.2 -glew/2.1.0 - -[generators] -cmake_find_package_multi - -[options] -glew:shared=False - -[imports] -./res/bindings, imgui_impl_glfw.cpp -> ../bindings -./res/bindings, imgui_impl_opengl3.cpp -> ../bindings -./res/bindings, imgui_impl_glfw.h -> ../bindings -./res/bindings, imgui_impl_opengl3.h -> ../bindings \ No newline at end of file diff --git a/libraries/dear-imgui/basic/file_manager.cpp b/libraries/dear-imgui/basic/file_manager.cpp deleted file mode 100644 index 3f4dbe01..00000000 --- a/libraries/dear-imgui/basic/file_manager.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "file_manager.h" - -FileManager::FileManager() -{ -} - -FileManager::~FileManager() -{ -} - -std::string FileManager::read(const std::string& filename) { - std::ifstream file; - file.exceptions (std::ifstream::failbit | std::ifstream::badbit); - std::stringstream file_stream; - try { - file.open(filename.c_str()); - file_stream << file.rdbuf(); - file.close(); - } - catch (std::ifstream::failure e) { - std::cout << "Error reading Shader File!" << std::endl; - } - return file_stream.str(); -} diff --git a/libraries/dear-imgui/basic/file_manager.h b/libraries/dear-imgui/basic/file_manager.h deleted file mode 100644 index 74d22d3e..00000000 --- a/libraries/dear-imgui/basic/file_manager.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -class FileManager -{ -public: - FileManager(); - ~FileManager(); - static std::string read(const std::string& filename); -}; - diff --git a/libraries/dear-imgui/basic/main.cpp b/libraries/dear-imgui/basic/main.cpp deleted file mode 100644 index f9fb75ea..00000000 --- a/libraries/dear-imgui/basic/main.cpp +++ /dev/null @@ -1,186 +0,0 @@ -#include "imgui.h" -#include "bindings/imgui_impl_glfw.h" -#include "bindings/imgui_impl_opengl3.h" -#include "opengl_shader.h" -#include "file_manager.h" -#include -#include -#include - -#include // Initialize with glewInit() - -// Include glfw3.h after our OpenGL definitions -#include - -#define PI 3.14159265358979323846 - -static void glfw_error_callback(int error, const char *description) -{ - fprintf(stderr, "Glfw Error %d: %s\n", error, description); -} - -void render_conan_logo() -{ - ImDrawList *draw_list = ImGui::GetWindowDrawList(); - float sz = 300.0f; - static ImVec4 col1 = ImVec4(68.0 / 255.0, 83.0 / 255.0, 89.0 / 255.0, 1.0f); - static ImVec4 col2 = ImVec4(40.0 / 255.0, 60.0 / 255.0, 80.0 / 255.0, 1.0f); - static ImVec4 col3 = ImVec4(50.0 / 255.0, 65.0 / 255.0, 82.0 / 255.0, 1.0f); - static ImVec4 col4 = ImVec4(20.0 / 255.0, 40.0 / 255.0, 60.0 / 255.0, 1.0f); - const ImVec2 p = ImGui::GetCursorScreenPos(); - float x = p.x + 4.0f, y = p.y + 4.0f; - draw_list->AddQuadFilled(ImVec2(x, y + 0.25 * sz), ImVec2(x + 0.5 * sz, y + 0.5 * sz), ImVec2(x + sz, y + 0.25 * sz), ImVec2(x + 0.5 * sz, y), ImColor(col1)); - draw_list->AddQuadFilled(ImVec2(x, y + 0.25 * sz), ImVec2(x + 0.5 * sz, y + 0.5 * sz), ImVec2(x + 0.5 * sz, y + 1.0 * sz), ImVec2(x, y + 0.75 * sz), ImColor(col2)); - draw_list->AddQuadFilled(ImVec2(x + 0.5 * sz, y + 0.5 * sz), ImVec2(x + sz, y + 0.25 * sz), ImVec2(x + sz, y + 0.75 * sz), ImVec2(x + 0.5 * sz, y + 1.0 * sz), ImColor(col3)); - draw_list->AddLine(ImVec2(x + 0.75 * sz, y + 0.375 * sz), ImVec2(x + 0.75 * sz, y + 0.875 * sz), ImColor(col4)); - draw_list->AddBezierCurve(ImVec2(x + 0.72 * sz, y + 0.24 * sz), ImVec2(x + 0.68 * sz, y + 0.15 * sz), ImVec2(x + 0.48 * sz, y + 0.13 * sz), ImVec2(x + 0.39 * sz, y + 0.17 * sz), ImColor(col4), 10, 18); - draw_list->AddBezierCurve(ImVec2(x + 0.39 * sz, y + 0.17 * sz), ImVec2(x + 0.2 * sz, y + 0.25 * sz), ImVec2(x + 0.3 * sz, y + 0.35 * sz), ImVec2(x + 0.49 * sz, y + 0.38 * sz), ImColor(col4), 10, 18); -} - -void create_triangle(unsigned int &vbo, unsigned int &vao, unsigned int &ebo) -{ - - // create the triangle - float triangle_vertices[] = { - 0.0f, 0.25f, 0.0f, // position vertex 1 - 1.0f, 0.0f, 0.0f, // color vertex 1 - 0.25f, -0.25f, 0.0f, // position vertex 1 - 0.0f, 1.0f, 0.0f, // color vertex 1 - -0.25f, -0.25f, 0.0f, // position vertex 1 - 0.0f, 0.0f, 1.0f, // color vertex 1 - }; - unsigned int triangle_indices[] = { - 0, 1, 2}; - glGenVertexArrays(1, &vao); - glGenBuffers(1, &vbo); - glGenBuffers(1, &ebo); - glBindVertexArray(vao); - glBindBuffer(GL_ARRAY_BUFFER, vbo); - glBufferData(GL_ARRAY_BUFFER, sizeof(triangle_vertices), triangle_vertices, GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(triangle_indices), triangle_indices, GL_STATIC_DRAW); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void *)0); - glEnableVertexAttribArray(0); - glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void *)(3 * sizeof(float))); - glEnableVertexAttribArray(1); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindVertexArray(0); -} - -int main(int, char **) -{ - // Setup window - glfwSetErrorCallback(glfw_error_callback); - if (!glfwInit()) - return 1; - - // Decide GL+GLSL versions -#if __APPLE__ - // GL 3.2 + GLSL 150 - const char *glsl_version = "#version 150"; - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 3.2+ only - glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // Required on Mac -#else - // GL 3.0 + GLSL 130 - const char *glsl_version = "#version 130"; - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - //glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 3.2+ only - //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // 3.0+ only -#endif - - // Create window with graphics context - GLFWwindow *window = glfwCreateWindow(1280, 720, "Dear ImGui - Conan", NULL, NULL); - if (window == NULL) - return 1; - glfwMakeContextCurrent(window); - glfwSwapInterval(1); // Enable vsync - - bool err = glewInit() != GLEW_OK; - - if (err) - { - fprintf(stderr, "Failed to initialize OpenGL loader!\n"); - return 1; - } - - int screen_width, screen_height; - glfwGetFramebufferSize(window, &screen_width, &screen_height); - glViewport(0, 0, screen_width, screen_height); - - // create our geometries - unsigned int vbo, vao, ebo; - create_triangle(vbo, vao, ebo); - - // init shader - Shader triangle_shader; - triangle_shader.init(FileManager::read("simple-shader.vs"), FileManager::read("simple-shader.fs")); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO &io = ImGui::GetIO(); - // Setup Platform/Renderer bindings - ImGui_ImplGlfw_InitForOpenGL(window, true); - ImGui_ImplOpenGL3_Init(glsl_version); - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - - while (!glfwWindowShouldClose(window)) - { - glfwPollEvents(); - glClearColor(0.45f, 0.55f, 0.60f, 1.00f); - glClear(GL_COLOR_BUFFER_BIT); - - // feed inputs to dear imgui, start new frame - ImGui_ImplOpenGL3_NewFrame(); - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); - - // rendering our geometries - triangle_shader.use(); - glBindVertexArray(vao); - glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0); - glBindVertexArray(0); - - // render your GUI - ImGui::Begin("Triangle Position/Color"); - static float rotation = 0.0; - ImGui::SliderFloat("rotation", &rotation, 0, 2 * PI); - static float translation[] = {0.0, 0.0}; - ImGui::SliderFloat2("position", translation, -1.0, 1.0); - static float color[4] = { 1.0f,1.0f,1.0f,1.0f }; - // pass the parameters to the shader - triangle_shader.setUniform("rotation", rotation); - triangle_shader.setUniform("translation", translation[0], translation[1]); - // color picker - ImGui::ColorEdit3("color", color); - // multiply triangle's color with this color - triangle_shader.setUniform("color", color[0], color[1], color[2]); - ImGui::End(); - - ImGui::Begin("Conan logo"); - render_conan_logo(); - ImGui::End(); - // Render dear imgui into screen - ImGui::Render(); - ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); - - int display_w, display_h; - glfwGetFramebufferSize(window, &display_w, &display_h); - glViewport(0, 0, display_w, display_h); - glfwSwapBuffers(window); - } - - // Cleanup - ImGui_ImplOpenGL3_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - ImGui::DestroyContext(); - - glfwDestroyWindow(window); - glfwTerminate(); - - return 0; -} diff --git a/libraries/dear-imgui/basic/opengl_shader.cpp b/libraries/dear-imgui/basic/opengl_shader.cpp deleted file mode 100644 index cd33229e..00000000 --- a/libraries/dear-imgui/basic/opengl_shader.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "opengl_shader.h" - -#include -#include -#include -#include -#include - -Shader::Shader() { -} - -void Shader::init(const std::string& vertex_code, const std::string& fragment_code) { - vertex_code_ = vertex_code; - fragment_code_ = fragment_code; - compile(); - link(); -} - -void Shader::compile() { - const char* vcode = vertex_code_.c_str(); - vertex_id_ = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_id_, 1, &vcode, NULL); - glCompileShader(vertex_id_); - - const char* fcode = fragment_code_.c_str(); - fragment_id_ = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_id_, 1, &fcode, NULL); - glCompileShader(fragment_id_); - checkCompileErr(); -} - -void Shader::link() { - id_ = glCreateProgram(); - glAttachShader(id_, vertex_id_); - glAttachShader(id_, fragment_id_); - glLinkProgram(id_); - checkLinkingErr(); - glDeleteShader(vertex_id_); - glDeleteShader(fragment_id_); -} - -void Shader::use() { - glUseProgram(id_); -} - -template<> -void Shader::setUniform(const std::string& name, int val) { - glUniform1i(glGetUniformLocation(id_, name.c_str()), val); -} - -template<> -void Shader::setUniform(const std::string& name, bool val) { - glUniform1i(glGetUniformLocation(id_, name.c_str()), val); -} - -template<> -void Shader::setUniform(const std::string& name, float val) { - glUniform1f(glGetUniformLocation(id_, name.c_str()), val); -} - -template<> -void Shader::setUniform(const std::string& name, float val1, float val2) { - glUniform2f(glGetUniformLocation(id_, name.c_str()), val1, val2); -} - -template<> -void Shader::setUniform(const std::string& name, float val1, float val2, float val3) { - glUniform3f(glGetUniformLocation(id_, name.c_str()), val1, val2, val3); -} - -template<> -void Shader::setUniform(const std::string& name, float* val) { - glUniformMatrix4fv(glGetUniformLocation(id_, name.c_str()), 1, GL_FALSE, val); -} - -void Shader::checkCompileErr() { - int success; - char infoLog[1024]; - glGetShaderiv(vertex_id_, GL_COMPILE_STATUS, &success); - if (!success) { - glGetShaderInfoLog(vertex_id_, 1024, NULL, infoLog); - std::cout << "Error compiling Vertex Shader:\n" << infoLog << std::endl; - } - glGetShaderiv(fragment_id_, GL_COMPILE_STATUS, &success); - if (!success) { - glGetShaderInfoLog(fragment_id_, 1024, NULL, infoLog); - std::cout << "Error compiling Fragment Shader:\n" << infoLog << std::endl; - } -} - -void Shader::checkLinkingErr() { - int success; - char infoLog[1024]; - glGetProgramiv(id_, GL_LINK_STATUS, &success); - if (!success) { - glGetProgramInfoLog(id_, 1024, NULL, infoLog); - std::cout << "Error Linking Shader Program:\n" << infoLog << std::endl; - } -} diff --git a/libraries/dear-imgui/basic/opengl_shader.h b/libraries/dear-imgui/basic/opengl_shader.h deleted file mode 100644 index a4d1b8ab..00000000 --- a/libraries/dear-imgui/basic/opengl_shader.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef opengl_shader_hpp -#define opengl_shader_hpp - -#include -#include - -class Shader -{ -public: - Shader(); - void init(const std::string& vertex_code, const std::string& fragment_code); - void use(); - template void setUniform(const std::string& name, T val); - template void setUniform(const std::string& name, T val1, T val2); - template void setUniform(const std::string& name, T val1, T val2, T val3); - -private: - void checkCompileErr(); - void checkLinkingErr(); - void compile(); - void link(); - unsigned int vertex_id_, fragment_id_, id_; - std::string vertex_code_; - std::string fragment_code_; -}; - -#endif /* opengl_shader_hpp */ diff --git a/libraries/folly/basic/CMakeLists.txt b/libraries/folly/basic/CMakeLists.txt deleted file mode 100644 index 3d55df2c..00000000 --- a/libraries/folly/basic/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.1.3) -project(folly_example CXX) - -set(CMAKE_VERBOSE_MAKEFILE ON) - -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup(TARGETS) - -add_executable(${PROJECT_NAME} main.cpp) -target_link_libraries(${PROJECT_NAME} CONAN_PKG::folly) -set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 14) \ No newline at end of file diff --git a/libraries/folly/basic/README.md b/libraries/folly/basic/README.md deleted file mode 100644 index 4ffa8316..00000000 --- a/libraries/folly/basic/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Conan Folly Example - -## Folly example using Conan for blog post - -- Conan.io blog: https://blog.conan.io -- Blog post about Folly: https://blog.conan.io/2018/11/19/Using-Facebook-Folly-with-Conan.html - -#### How to build -To build this project using cmake: - - git clone https://github.com/conan-io/examples.git conan-examples - cd conan-examples/libraries/folly/basic - mkdir build && cd build - conan install .. - cmake .. - cmake --build . - bin/folly_example - -#### Requirements -- CMake >=3.1.3 -- C++ compiler with C++14 support (Folly requirement) -- Conan >=1.9.1 diff --git a/libraries/folly/basic/build.bat b/libraries/folly/basic/build.bat deleted file mode 100644 index ed93b256..00000000 --- a/libraries/folly/basic/build.bat +++ /dev/null @@ -1,16 +0,0 @@ -if "%CMAKE_GENERATOR%"=="" ( - ECHO CMAKE_GENERATOR environment variable not defined. Please define the CMake generator in the CMAKE_GENERATOR environment variable. -) -else ( - @ECHO ON - - RMDIR /Q /S build - MKDIR build - PUSHD build - - conan install .. - cmake .. -G "%CMAKE_GENERATOR%" - cmake --build . --config Release - - bin\folly_example.exe -) diff --git a/libraries/folly/basic/build.sh b/libraries/folly/basic/build.sh deleted file mode 100755 index 1bd5aa9f..00000000 --- a/libraries/folly/basic/build.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -set -e -set -x - -rm -rf build -mkdir build -pushd build - -conan install .. --build=missing -cmake .. -DCMAKE_BUILD_TYPE=Release -cmake --build . - -bin/folly_example diff --git a/libraries/folly/basic/conanfile.txt b/libraries/folly/basic/conanfile.txt deleted file mode 100644 index 071fff3d..00000000 --- a/libraries/folly/basic/conanfile.txt +++ /dev/null @@ -1,6 +0,0 @@ -[requires] -folly/2020.08.10.00 -openssl/1.1.1k - -[generators] -cmake \ No newline at end of file diff --git a/libraries/folly/basic/main.cpp b/libraries/folly/basic/main.cpp deleted file mode 100644 index 6b0ada85..00000000 --- a/libraries/folly/basic/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -static void print_uri(const folly::fbstring& value) { - const folly::Uri uri(value); - const auto authority = folly::format("The authority from {} is {}", uri.fbstr(), uri.authority()); - std::cout << authority << std::endl; -} - -int main() { - folly::ThreadedExecutor executor; - folly::Promise promise; - folly::Future future = promise.getSemiFuture().via(&executor); - folly::Future unit = std::move(future).thenValue(print_uri); - promise.setValue("https://conan.io/"); - std::move(unit).get(); - return EXIT_SUCCESS; -} diff --git a/libraries/imgui-opencv-poco/.gitignore b/libraries/imgui-opencv-poco/.gitignore deleted file mode 100644 index 8571d98a..00000000 --- a/libraries/imgui-opencv-poco/.gitignore +++ /dev/null @@ -1,371 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -.vscode/ -build/ -CMakeLists.txt.user -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -_deps - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ -imgui.ini -include/imgui_impl_glfw.h -include/imgui_impl_opengl3.h -src/imgui_impl_glfw.cpp -src/imgui_impl_opengl3.cpp -msvc/conan -msvc/include -msvc/src diff --git a/libraries/imgui-opencv-poco/CMakeLists.txt b/libraries/imgui-opencv-poco/CMakeLists.txt deleted file mode 100644 index b505e9ca..00000000 --- a/libraries/imgui-opencv-poco/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -# set minimum cmake version -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) - -# project name and language -project(imgui-opencv LANGUAGES CXX) -set(CMAKE_CXX_STANDARD 11) - -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup() - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) - -add_executable(imgui-opencv - app/main.cpp - src/imgui_impl_glfw.cpp - src/imgui_impl_opengl3.cpp - src/gui_renderer.cpp - src/downloader.cpp - include/imgui_impl_glfw.h - include/imgui_impl_opengl3.h - include/gui_renderer.hpp - include/downloader.h -) - -target_link_libraries(imgui-opencv ${CONAN_LIBS}) \ No newline at end of file diff --git a/libraries/imgui-opencv-poco/README.md b/libraries/imgui-opencv-poco/README.md deleted file mode 100644 index 5ff4eb1f..00000000 --- a/libraries/imgui-opencv-poco/README.md +++ /dev/null @@ -1,37 +0,0 @@ -## imgui - opencv - -Just a simple demo to add opencv, imgui and poco libraries to a project using Conan.io -The program will download a picture from the Internet and apply a threshold to the image with the desired level through an slider. - -![use](https://raw.githubusercontent.com/conan-io/examples/master/libraries/imgui-opencv-poco/data/screen-capture.gif) - -## How to use: - -This project provides 2 build systems. CMake one should work for all platforms. It also integrates a Visual Studio project, only -for those interested in the pure Visual Studio integration without using CMake, but not mandatory, you can use the CMake one for -Windows and having CMake compile with Visual Studio compiler. - -1. Install conan: https://docs.conan.io/en/latest/installation.html -2. Clone this repo: `git clone https://github.com/conan-io/examples.git` -3. `cd libraries/imgui-opencv-poco` - -For CMake - -4. `mkdir build && cd build` -5. `conan install ..` -6. `conan build ..` -7. `./bin/imgui-opencv` - -For Visual Studio 16 2019 - -4. `cd msvc` -5. `conan install .. -g=MSBuildDeps -if=conan` -6. Open msvc.sln -7. Change to Release and x64 configuration in IDE -8. Build solution & run - - -#### App running -* You can use a custom url to load your image -* Click 'Open' to open the image -* Apply a threshold with the slider diff --git a/libraries/imgui-opencv-poco/app/main.cpp b/libraries/imgui-opencv-poco/app/main.cpp deleted file mode 100644 index 826894ce..00000000 --- a/libraries/imgui-opencv-poco/app/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// demo application to run a shader that -// opens an image from the internet -// and applies a threshold -// using Imgui, Opencv and Poco - -#include "../include/gui_renderer.hpp" - -int main(int, char **) -{ - GUIRenderer renderer; - renderer.InitGUI(); - renderer.Render(); - return 0; -} diff --git a/libraries/imgui-opencv-poco/conanfile.py b/libraries/imgui-opencv-poco/conanfile.py deleted file mode 100644 index 48285142..00000000 --- a/libraries/imgui-opencv-poco/conanfile.py +++ /dev/null @@ -1,25 +0,0 @@ -from conans import ConanFile, CMake - - -class ImguiOpencvDemo(ConanFile): - settings = "os", "compiler", "build_type", "arch" - requires = "imgui/1.79",\ - "glfw/3.3.2",\ - "glew/2.1.0",\ - "opencv/2.4.13.7",\ - "poco/1.10.1" - - generators = "cmake" - - def build(self): - cmake = CMake(self) - cmake.configure() - cmake.build() - - def imports(self): - self.copy("*.dll", dst="bin", src="bin") - self.copy("*.dylib*", dst="bin", src="lib") - self.copy("imgui_impl_glfw.cpp", dst="../src", src="./res/bindings") - self.copy("imgui_impl_opengl3.cpp", dst="../src", src="./res/bindings") - self.copy("imgui_impl_glfw.h*", dst="../include", src="./res/bindings") - self.copy("imgui_impl_opengl3.h*", dst="../include", src="./res/bindings") diff --git a/libraries/imgui-opencv-poco/data/bird.jpeg b/libraries/imgui-opencv-poco/data/bird.jpeg deleted file mode 100644 index abd74103c69efdaf26985dade0453c5f7f4076a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540411 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%0D*U|21OU1~NeopcHiIMEL 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