-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
idna: add recipe #22891
idna: add recipe #22891
Changes from 7 commits
a5369f8
24e0e6c
03ed369
1c49cff
5528026
fa4b539
017850f
ea3121a
8bc296f
c33982d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
cmake_minimum_required(VERSION 3.15) | ||
project(cmake_wrapper) | ||
|
||
add_subdirectory(${IDNA_SRC_DIR}) | ||
|
||
include(GNUInstallDirs) | ||
|
||
install( | ||
TARGETS ada-idna | ||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} | ||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} | ||
) | ||
|
||
install( | ||
FILES | ||
${IDNA_SRC_DIR}/include/idna.h | ||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} | ||
) | ||
|
||
install( | ||
DIRECTORY | ||
${IDNA_SRC_DIR}/include/ada | ||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
sources: | ||
"cci.20240115": | ||
url: "https://github.com/ada-url/idna/archive/01c745f27b20e508195cf73e859da35716244f33.tar.gz" | ||
sha256: "177952f68e9f691785c936490dc154c456b953b5609f6c04e2ad4374ebda8d01" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
from conan import ConanFile | ||
from conan.errors import ConanInvalidConfiguration | ||
from conan.tools.files import get, copy | ||
from conan.tools.build import check_min_cppstd | ||
from conan.tools.scm import Version | ||
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout | ||
uilianries marked this conversation as resolved.
Show resolved
Hide resolved
|
||
from conan.tools.env import VirtualBuildEnv | ||
import os | ||
|
||
required_conan_version = ">=1.52.0" | ||
|
||
class IdnaConan(ConanFile): | ||
name = "idna" | ||
description = "C++ library implementing the to_ascii and to_unicode functions from the Unicode Technical Standard." | ||
license = "Apache-2.0 OR MIT" | ||
toge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
url = "https://github.com/conan-io/conan-center-index" | ||
homepage = "https://github.com/ada-url/idna/" | ||
topics = ("unicode", "icu") | ||
package_type = "static-library" | ||
settings = "os", "arch", "compiler", "build_type" | ||
options = { | ||
"fPIC": [True, False], | ||
} | ||
default_options = { | ||
"fPIC": True, | ||
} | ||
|
||
@property | ||
def _min_cppstd(self): | ||
return 17 | ||
|
||
@property | ||
def _compilers_minimum_version(self): | ||
return { | ||
"gcc": "8", | ||
"clang": "7", | ||
"apple-clang": "12", | ||
"Visual Studio": "16", | ||
"msvc": "192", | ||
} | ||
|
||
def export_sources(self): | ||
copy(self, "CMakeLists.txt", src=self.recipe_folder, dst=self.export_sources_folder) | ||
|
||
def config_options(self): | ||
if self.settings.os == "Windows": | ||
del self.options.fPIC | ||
|
||
def layout(self): | ||
cmake_layout(self, src_folder="src") | ||
|
||
def validate(self): | ||
if self.settings.compiler.get_safe("cppstd"): | ||
check_min_cppstd(self, self._min_cppstd) | ||
minimum_version = self._compilers_minimum_version.get(str(self.settings.compiler), False) | ||
if minimum_version and Version(self.settings.compiler.version) < minimum_version: | ||
raise ConanInvalidConfiguration( | ||
f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." | ||
) | ||
|
||
def build_requirements(self): | ||
self.tool_requires("cmake/[>=3.16 <4]") | ||
|
||
def source(self): | ||
get(self, **self.conan_data["sources"][self.version], strip_root=True) | ||
|
||
def generate(self): | ||
VirtualBuildEnv(self).generate() | ||
|
||
tc = CMakeToolchain(self) | ||
toge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
tc.variables["BUILD_TESTING"] = False | ||
toge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
tc.variables["IDNA_SRC_DIR"] = self.source_folder.replace("\\", "/") | ||
tc.generate() | ||
|
||
def build(self): | ||
cmake = CMake(self) | ||
cmake.configure(build_script_folder=os.path.join(self.source_folder, os.pardir)) | ||
cmake.build() | ||
|
||
def package(self): | ||
copy(self, pattern="LICENSE-*", dst=os.path.join(self.package_folder, "licenses"), src=self.source_folder) | ||
cmake = CMake(self) | ||
cmake.install() | ||
|
||
def package_info(self): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ran out of time to look into this specificly, but it seems like upstream expects different naming than There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @RubenRBS |
||
self.cpp_info.libs = ["ada-idna"] | ||
self.cpp_info.set_property("cmake_file_name", "ada-idna") | ||
self.cpp_info.set_property("cmake_target_name", "ada-idna") |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
cmake_minimum_required(VERSION 3.15) | ||
project(test_package LANGUAGES CXX) | ||
|
||
find_package(ada-idna REQUIRED CONFIG) | ||
|
||
add_executable(${PROJECT_NAME} test_package.cpp) | ||
target_link_libraries(${PROJECT_NAME} PRIVATE ada-idna) | ||
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
from conan import ConanFile | ||
from conan.tools.build import can_run | ||
from conan.tools.cmake import cmake_layout, CMake | ||
import os | ||
|
||
|
||
class TestPackageConan(ConanFile): | ||
settings = "os", "arch", "compiler", "build_type" | ||
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" | ||
test_type = "explicit" | ||
|
||
def layout(self): | ||
cmake_layout(self) | ||
|
||
def requirements(self): | ||
self.requires(self.tested_reference_str) | ||
|
||
def build(self): | ||
cmake = CMake(self) | ||
cmake.configure() | ||
cmake.build() | ||
|
||
def test(self): | ||
if can_run(self): | ||
bin_path = os.path.join(self.cpp.build.bindir, "test_package") | ||
self.run(bin_path, env="conanrun") |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
#include <iostream> | ||
#include <string_view> | ||
|
||
#include "idna.h" | ||
|
||
int main(void) { | ||
std::string_view input = reinterpret_cast<const char*>(u8"meßagefactory.ca"); // non-empty UTF-8 string, must be percent decoded | ||
std::string idna_ascii = ada::idna::to_ascii(input); | ||
if(idna_ascii.empty()) { | ||
// There was an error. | ||
} | ||
std::cout << idna_ascii << std::endl; | ||
// outputs 'xn--meagefactory-m9a.ca' if the input is u8"meßagefactory.ca" | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
versions: | ||
"cci.20240115": | ||
folder: all |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be probably nicer to apply this as a patch to the current version, then it can be easily dropped in future versions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
They indeed dropped: ada-url/idna#41
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agree, we can simplify here if we package the latest commit @toge :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@RubenRBS
Thanks a lot!
I will update this PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed