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
7 changes: 7 additions & 0 deletions ports/libjuice/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Source: libjuice
Version: 0.4.6
Port-Version: 1
Build-Depends: openssl
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.
Default-Features:
102 changes: 102 additions & 0 deletions ports/libjuice/fix-for-vcpkg.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7e059c1..1aad4f4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,7 +38,11 @@ set(LIBJUICE_SOURCES
)

set(LIBJUICE_HEADERS
- ${CMAKE_CURRENT_SOURCE_DIR}/include/juice.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/juice/juice.h
+)
+
+set(LIBJUICE_PRIVATE_HEADERS
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/socket.h
)

set(TESTS_SOURCES
@@ -56,75 +60,53 @@ find_package(Threads REQUIRED)
add_library(juice SHARED ${LIBJUICE_SOURCES})
set_target_properties(juice PROPERTIES VERSION ${PROJECT_VERSION})

-target_include_directories(juice PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
+#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()
find_package(OpenSSL REQUIRED)
target_compile_definitions(juice PRIVATE USE_NETTLE=0)
target_link_libraries(juice PRIVATE OpenSSL::SSL)
- target_compile_definitions(juice-static PRIVATE USE_NETTLE=0)
- target_link_libraries(juice-static PRIVATE OpenSSL::SSL)
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 LIBRARY 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()

-# Main Test
-add_executable(juice-tests ${TESTS_SOURCES})
-target_include_directories(juice-tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
-target_include_directories(juice-tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/juice)
-set_target_properties(juice-tests PROPERTIES VERSION ${PROJECT_VERSION})
-set_target_properties(juice-tests PROPERTIES OUTPUT_NAME tests)
-target_link_libraries(juice-tests juice)
-
+install(
+ EXPORT libjuice-config
+ NAMESPACE LibJuice::
+ DESTINATION share/cmake/libjuice
+)
33 changes: 33 additions & 0 deletions ports/libjuice/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO paullouisageneau/libjuice
REF v0.4.6
SHA512 621756116f36a0506fa2755d8baf4df2908a1b2955fe8fab60d5c2f58a5b98389dd5518acc4ab9b998b6f7c1499a19796ddf11eda320473b2c81f69353b05a8f
HEAD_REF master
PATCHES
fix-for-vcpkg.patch
)

vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA
OPTIONS
#-DENABLE_DEBUG=ON
)

if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
set(FILE "${SOURCE_PATH}/CMakeLists.txt")
file(READ ${FILE} _contents)
string(REPLACE "add_library(juice SHARED" "add_library(juice STATIC" _contents "${_contents}")
file(WRITE ${FILE} "${_contents}")
endif()

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)
file(COPY ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
4 changes: 4 additions & 0 deletions ports/libjuice/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The package libjuice is compatible with built-in CMake targets:

find_package(libjuice CONFIG REQUIRED)
target_link_libraries(main PRIVATE LibJuice::juice)