Skip to content
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

[libjuice] Add new port #13703

Merged
merged 12 commits into from
Oct 23, 2020
9 changes: 9 additions & 0 deletions ports/libjuice/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Source: libjuice
Version: 0.5.2
Homepage: https://github.com/paullouisageneau/libjuice
Description: The library is a simplified implementation of the Interactive Connectivity Establishment (ICE) protocol in C for POSIX platforms (including Linux and Apple macOS) and Microsoft Windows.

Feature: nettle
Build-Depends: nettle
Description: Use nettle for HMAC computation instead of the Builtin

103 changes: 103 additions & 0 deletions ports/libjuice/fix-for-vcpkg.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index be72a2a..9221da9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,6 +41,9 @@ set(LIBJUICE_SOURCES
set(LIBJUICE_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/include/juice/juice.h
)
+set(LIBJUICE_PRIVATE_HEADERS
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/socket.h
+)

set(TESTS_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/test/main.c
@@ -54,67 +57,56 @@ set(TESTS_SOURCES
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

-add_library(juice SHARED ${LIBJUICE_SOURCES})
+if(BUILD_SHARED_LIBS)
+ add_library(juice SHARED ${LIBJUICE_SOURCES})
+else()
+ add_library(juice STATIC ${LIBJUICE_SOURCES})
+endif()
set_target_properties(juice PROPERTIES VERSION ${PROJECT_VERSION})

-target_include_directories(juice PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
+target_include_directories(juice PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_include_directories(juice PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/juice)
target_include_directories(juice PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
target_link_libraries(juice PUBLIC Threads::Threads)

-add_library(juice-static STATIC EXCLUDE_FROM_ALL ${LIBJUICE_SOURCES})
-set_target_properties(juice-static PROPERTIES VERSION ${PROJECT_VERSION})
-
-target_include_directories(juice-static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
-target_include_directories(juice-static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/juice)
-target_include_directories(juice-static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
-target_link_libraries(juice-static PUBLIC Threads::Threads)
-
if(WIN32)
target_link_libraries(juice PRIVATE wsock32 ws2_32) # winsock2
- target_link_libraries(juice-static PRIVATE wsock32 ws2_32) # winsock2
endif()

if (USE_NETTLE)
find_package(Nettle REQUIRED)
target_compile_definitions(juice PRIVATE USE_NETTLE=1)
target_link_libraries(juice PRIVATE Nettle::Nettle)
- target_compile_definitions(juice-static PRIVATE USE_NETTLE=1)
- target_link_libraries(juice-static PRIVATE Nettle::Nettle)
else()
target_compile_definitions(juice PRIVATE USE_NETTLE=0)
- target_compile_definitions(juice-static PRIVATE USE_NETTLE=0)
endif()

if (NO_ATOMICS)
target_compile_definitions(juice PRIVATE NO_ATOMICS)
- target_compile_definitions(juice-static PRIVATE NO_ATOMICS)
endif()

if(APPLE)
# This seems to be necessary on MacOS
target_include_directories(juice PRIVATE /usr/local/include)
- target_include_directories(juice-static PRIVATE /usr/local/include)
endif()

-add_library(LibJuice::LibJuice ALIAS juice)
-add_library(LibJuice::LibJuiceStatic ALIAS juice-static)
-
-install(TARGETS juice LIBRARY DESTINATION lib)
+install(TARGETS juice EXPORT libjuice-config
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+)
install(FILES ${LIBJUICE_HEADERS} DESTINATION include/juice)
+install(FILES ${LIBJUICE_PRIVATE_HEADERS} DESTINATION include/juice/src)

if(NOT MSVC)
target_compile_options(juice PRIVATE -Wall -Wextra)
- target_compile_options(juice-static PRIVATE -Wall -Wextra)
endif()

if(WARNINGS_AS_ERRORS)
if(MSVC)
target_compile_options(juice PRIVATE /WX)
- target_compile_options(juice-static PRIVATE /WX)
else()
target_compile_options(juice PRIVATE -Werror)
- target_compile_options(juice-static PRIVATE -Werror)
endif()
endif()

@@ -128,3 +120,8 @@ if(NOT NO_TESTS)
target_link_libraries(juice-tests juice)
endif()

+install(
+ EXPORT libjuice-config
+ NAMESPACE LibJuice::
+ DESTINATION share/cmake/libjuice
+)
31 changes: 31 additions & 0 deletions ports/libjuice/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO paullouisageneau/libjuice
REF v0.5.2
SHA512 c96bf8d26a8f760ed0593d0e150a6dc410490daf8bab6c1f0abcce6082fbd71886ff6f966dc7031c1cb9c83ebd6e9dd5de9f61492f4265410a50465924b37027
HEAD_REF master
PATCHES
fix-for-vcpkg.patch
)

vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
nettle USE_NETTLE
)

vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA
OPTIONS
${FEATURE_OPTIONS}
-DNO_TESTS=ON
)

vcpkg_install_cmake()

file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")

vcpkg_fixup_cmake_targets(CONFIG_PATH share/cmake/libjuice)
vcpkg_fixup_pkgconfig()

file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
3 changes: 3 additions & 0 deletions scripts/ci.baseline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1884,3 +1884,6 @@ clapack:x86-windows=skip
clapack:x64-uwp=skip
lapack-reference:arm64-windows=skip
lapack-reference:arm-uwp=skip

libjuice:arm-uwp=fail
libjuice:x64-uwp=fail