Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions features/compatible_packages/app/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.15)
project(app)

include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_executable(app src/main.cpp)
target_link_libraries(app ${CONAN_LIBS})
33 changes: 33 additions & 0 deletions features/compatible_packages/app/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from conans import ConanFile, tools, CMake
from conans.errors import ConanInvalidConfiguration


class Recipe(ConanFile):
name = "app"
version = "1.0"

settings = "os", "compiler", "build_type", "arch"
license = "MIT"
author = "Conan Team"
description = "App, requires nothing special"

generators = "cmake", "cmake_find_package"
exports_sources = "CMakeLists.txt", "src/main.cpp"

options = {'use_hidden': [True, False]}
default_options = {'use_hidden': False}

def requirements(self):
if self.options.use_hidden:
self.requires("hidden/1.0")
else:
self.requires("library/1.0")

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
self.copy("app*", dst="bin", src="bin", keep_path=False)
self.copy("LICENSE", dst="licenses", src=".", keep_path=False)
7 changes: 7 additions & 0 deletions features/compatible_packages/app/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

#include <iostream>
#include <mylib.h>

int main() {
std::cout << "compute(10, 2) = " << compute(10, 2) << std::endl;
}
7 changes: 7 additions & 0 deletions features/compatible_packages/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
set -x
set -e

conan export library/conanfile.py library/1.0@
conan export app/conanfile.py app/1.0@

conan install app/1.0@ --build=missing
10 changes: 10 additions & 0 deletions features/compatible_packages/hidden/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
cmake_minimum_required(VERSION 3.15)
project(mylib)

include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
add_library(mylib src/mylib.cpp)
44 changes: 44 additions & 0 deletions features/compatible_packages/hidden/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from conans import ConanFile, tools, CMake
from conans.errors import ConanInvalidConfiguration


class Recipe(ConanFile):
name = "hidden"
version = "1.0"

settings = "os", "compiler", "build_type", "arch"
license = "MIT"
author = "Conan Team"
description = "Library requires C++14 to build, but API is C++11 compatible"

generators = "cmake"
exports_sources = "CMakeLists.txt", "src/mylib.cpp", "include/mylib.h"

def configure(self):
if self.settings.compiler.get_safe('cppstd'):
tools.check_min_cppstd(self, "11")

def validate(self):
if self.settings.compiler.get_safe('cppstd'):
tools.check_min_cppstd(self, "14")

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
self.copy("*.h", dst="include", src="include", keep_path=False)
self.copy("*.lib", dst="lib", src="lib", keep_path=False)
self.copy("*.a", dst="lib", src="lib", keep_path=False)
self.copy("LICENSE", dst="licenses", src=".", keep_path=False)

def package_info(self):
self.cpp_info.libs = ["mylib"]

def package_id(self):
for cppstd in ("11", "14", "17", "20"):
for gnu in ("", "gnu"):
compatible_pkg = self.info.clone()
compatible_pkg.settings.compiler.cppstd = "{}{}".format(gnu, cppstd)
self.compatible_packages.append(compatible_pkg)
2 changes: 2 additions & 0 deletions features/compatible_packages/hidden/include/mylib.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

auto compute(int a, float b) -> float;
8 changes: 8 additions & 0 deletions features/compatible_packages/hidden/src/mylib.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

#include <utility>
#include "../include/mylib.h"

auto compute(int a, float b) -> float {
auto p = std::make_pair(a, b);
return std::get<int>(p)/std::get<float>(p);
}
8 changes: 8 additions & 0 deletions features/compatible_packages/library/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.15)
project(mylib)

include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
add_library(mylib src/mylib.cpp)
42 changes: 42 additions & 0 deletions features/compatible_packages/library/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from conans import ConanFile, tools, CMake
from conans.errors import ConanInvalidConfiguration


class Recipe(ConanFile):
name = "library"
version = "1.0"

settings = "os", "compiler", "build_type", "arch"
license = "MIT"
author = "Conan Team"
description = "Library requires C++14 to build, but API is C++11 compatible"

generators = "cmake"
exports_sources = "CMakeLists.txt", "src/mylib.cpp", "include/mylib.h"

def configure(self):
tools.check_min_cppstd(self, "11")

def validate(self):
tools.check_min_cppstd(self, "14")

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
self.copy("*.h", dst="include", src="include", keep_path=False)
self.copy("*.lib", dst="lib", src="lib", keep_path=False)
self.copy("*.a", dst="lib", src="lib", keep_path=False)
self.copy("LICENSE", dst="licenses", src=".", keep_path=False)

def package_info(self):
self.cpp_info.libs = ["mylib"]

def package_id(self):
for cppstd in ("11", "14", "17", "20"):
for gnu in ("", "gnu"):
compatible_pkg = self.info.clone()
compatible_pkg.settings.compiler.cppstd = "{}{}".format(gnu, cppstd)
self.compatible_packages.append(compatible_pkg)
2 changes: 2 additions & 0 deletions features/compatible_packages/library/include/mylib.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

auto compute(int a, float b) -> float;
8 changes: 8 additions & 0 deletions features/compatible_packages/library/src/mylib.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

#include <utility>
#include "../include/mylib.h"

auto compute(int a, float b) -> float {
auto p = std::make_pair(a, b);
return std::get<int>(p)/std::get<float>(p);
}