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

[zeroc-ice] New port #23764

Merged
merged 35 commits into from
Apr 13, 2022
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
89aa4ab
Initial commit
bold84 Mar 25, 2022
0833b30
clean up
bold84 Mar 25, 2022
4912e18
updated manifest and version
bold84 Mar 25, 2022
a5b61cb
Removed C++11 mapping option (feature) and made C++11 the default map…
bold84 Mar 25, 2022
897bbff
updated version
bold84 Mar 25, 2022
39c27d0
added main target
bold84 Mar 25, 2022
b031d7e
corrected ci.baseline.txt entries
bold84 Mar 25, 2022
45efd8c
updated version
bold84 Mar 25, 2022
6963f50
fixed generated header path
bold84 Mar 25, 2022
6c72220
Updated version
bold84 Mar 25, 2022
c659211
fixed include paths
bold84 Mar 25, 2022
75c052d
updated version
bold84 Mar 25, 2022
f60f20c
expect x64-windows-static to fail
bold84 Mar 25, 2022
371847c
added patches for clang 13
bold84 Mar 25, 2022
ecb126b
update version
bold84 Mar 25, 2022
85dc81f
Update ports/zeroc-ice/portfile.cmake
bold84 Mar 29, 2022
ac20f97
2->4 spaces
bold84 Mar 29, 2022
2f17cee
Removed v144/5 stuff
bold84 Mar 29, 2022
d3f92f1
check for .DS_Store file before deletion
bold84 Mar 29, 2022
9e8efb0
several changes
bold84 Mar 29, 2022
861f696
format vcpkg.json
bold84 Mar 29, 2022
0cd4319
update version
bold84 Mar 29, 2022
d3e1aa3
remove typo
bold84 Mar 29, 2022
2573470
updated version
bold84 Mar 29, 2022
5d8f703
Merge branch 'microsoft:master' into zeroc_ice_port
bold84 Mar 29, 2022
208338d
reformatting
bold84 Mar 29, 2022
65cc943
resolve review issues
bold84 Mar 31, 2022
a00fbb9
regex
bold84 Mar 31, 2022
f2ac64a
updated version
bold84 Mar 31, 2022
facd40f
windows-static
bold84 Mar 31, 2022
9829f9d
allow static builds on windows and added maintainer
bold84 Mar 31, 2022
2881e55
updated version
bold84 Mar 31, 2022
8da6d02
added openssl as a dependency for Ice core library
bold84 Mar 31, 2022
daab983
updated version
bold84 Mar 31, 2022
a4a58ae
minor updates
strega-nil Apr 12, 2022
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
21 changes: 21 additions & 0 deletions ports/zeroc-ice/md5i_fix.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
diff --git a/cpp/src/Slice/MD5I.cpp b/cpp/src/Slice/MD5I.cpp
index 66f4de545b..271352d1ea 100644
--- a/cpp/src/Slice/MD5I.cpp
+++ b/cpp/src/Slice/MD5I.cpp
@@ -52,6 +52,7 @@
*/

#include <Slice/MD5I.h>
+#include <stdint.h>
#include <string.h>

#ifdef __GNUC__
@@ -172,7 +173,7 @@ md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
* On little-endian machines, we can process properly aligned
* data without copying it.
*/
- if (!((data - (const md5_byte_t *)0) & 3)) {
+ if (!((reinterpret_cast<uintptr_t>(data)) & 3)) {
/* data are properly aligned */
X = (const md5_word_t *)data;
} else {
292 changes: 292 additions & 0 deletions ports/zeroc-ice/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,292 @@

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO zeroc-ice/ice
REF v3.7.7
SHA512 73c3a2bb14c9e145383e4026206edd3e03b29c60a33af628611bfdab71d69a3aed108ce4e6cbfd67eb852560110e3495b4bd238c8cdf0de9d1f8e2f1088513ee
PATCHES md5i_fix.patch slice2swift.patch
)

set(RELEASE_TRIPLET ${TARGET_TRIPLET}-rel)
set(DEBUG_TRIPLET ${TARGET_TRIPLET}-dbg)

get_filename_component(SOURCE_PATH_SUFFIX ${SOURCE_PATH} NAME)
set(WIN_DEBUG_BUILD_DIR ${CURRENT_BUILDTREES_DIR}/${DEBUG_TRIPLET}/${SOURCE_PATH_SUFFIX})
set(WIN_RELEASE_BUILD_DIR ${CURRENT_BUILDTREES_DIR}/${RELEASE_TRIPLET}/${SOURCE_PATH_SUFFIX})
set(UNIX_BUILD_DIR ${CURRENT_BUILDTREES_DIR}/src/${SOURCE_PATH_SUFFIX})

# install_includes
function(install_includes ORIGINAL_PATH RELATIVE_PATHS)
foreach(RELATIVE_PATH ${RELATIVE_PATHS})
file(GLOB HEADER_FILES ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.h)
if(EXISTS ${ORIGINAL_PATH}/${RELATIVE_PATH})
file(COPY ${HEADER_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/${RELATIVE_PATH})
endif()
endforeach()
endfunction()

# install_slices
function(install_slices ORIGINAL_PATH RELATIVE_PATHS)
foreach(RELATIVE_PATH ${RELATIVE_PATHS})
file(GLOB HEADER_FILES ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.ice)
if(EXISTS ${ORIGINAL_PATH}/${RELATIVE_PATH})
file(COPY ${HEADER_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/share/ice/slice/${RELATIVE_PATH})
endif()
endforeach()
endfunction()

vcpkg_list(SET ICE_INCLUDE_SUB_DIRECTORIES
"Glacier2"
"Ice"
"IceBT"
"IceBox"
"IceBT"
"IceDiscovery"
"IceGrid"
"IceIAP"
"IceLocatorDiscovery"
"IcePatch2"
"IceSSL"
"IceStorm"
)

set(ICE_OPTIONAL_COMPONENTS_MSBUILD "")
set(ICE_OPTIONAL_COMPONENTS_MAKE "Ice") # Intentional!

# IceSSL
if("icessl" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++11\\icessl++11")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "IceSSL")
endif()

# Glacier2
if("glacier2lib" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++11\\glacier2++11")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "Glacier2")
endif()

# Glacier2Router
if("glacier2router" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\glacier2router")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\glacier2cryptpermissionsverifier")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "glacier2router")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "Glacier2CryptPermissionsVerifier")
endif()

# IceBox
if("iceboxlib" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++11\\iceboxlib++11")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "IceBox")
endif()

# IceBox
if("iceboxtools" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++11\\icebox++11")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\iceboxadmin")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "icebox")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "iceboxadmin")
endif()

# IceGrid
if("icegridlib" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++11\\icegrid++11")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "IceGrid")
endif()

# IceGrid tools
if("icegridtools" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\icegridadmin")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\icegridregistry")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\icegridnode")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "icegridnode")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "icegridregistry")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "icegridnode")
endif()

# IceStorm
if("icestormlib" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++11\\icestorm++11")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "IceStorm")
endif()

# IceStormAdmin
if("icestormtools" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\icestormadmin")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\icestormservice")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\icestormdb")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "icestormadmin")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "IceStormService")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "icestormdb")
endif()

# IceBridge executable
if("icebridge" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++98\\icebridge")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "icebridge")
endif()

# IceDiscovery
if("icediscovery" IN_LIST FEATURES)
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MSBUILD "/t:C++11\\icediscovery++11")
vcpkg_list(APPEND ICE_OPTIONAL_COMPONENTS_MAKE "IceDiscovery")
endif()

if(NOT VCPKG_TARGET_IS_WINDOWS)

# Setting these as environment variables, as .d files aren't generated
# the first time passing them as arguments to make.
set(ENV{MCPP_HOME} ${CURRENT_INSTALLED_DIR})
set(ENV{EXPAT_HOME} ${CURRENT_INSTALLED_DIR})
set(ENV{BZ2_HOME} ${CURRENT_INSTALLED_DIR})
set(ENV{LMDB_HOME} ${CURRENT_INSTALLED_DIR})
set(ENV{CPPFLAGS} "-I${CURRENT_INSTALLED_DIR}/include")
set(ENV{LDFLAGS} "-L${CURRENT_INSTALLED_DIR}/debug/lib")

set(ICE_BUILD_CONFIG "shared cpp11-shared")
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
set(ICE_BUILD_CONFIG "static cpp11-static")
endif()

message(STATUS "Building ${TARGET_TRIPLET}-dbg")
vcpkg_execute_build_process(
COMMAND make
V=1
"prefix=${CURRENT_PACKAGES_DIR}/debug"
linux_id=vcpkg
"CONFIGS=${ICE_BUILD_CONFIG}"
USR_DIR_INSTALL=yes
OPTIMIZE=no
${ICE_OPTIONAL_COMPONENTS_MAKE}
"-j${VCPKG_CONCURRENCY}"
WORKING_DIRECTORY ${SOURCE_PATH}/cpp
LOGNAME make-${TARGET_TRIPLET}-dbg
)

# Install debug libraries to packages directory
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/lib")
if(EXISTS "${UNIX_BUILD_DIR}/cpp/lib64")
file(GLOB ICE_DEBUG_LIBRARIES "${UNIX_BUILD_DIR}/cpp/lib64/*")
else()
file(GLOB ICE_DEBUG_LIBRARIES "${UNIX_BUILD_DIR}/cpp/lib/*")
endif()
file(COPY ${ICE_DEBUG_LIBRARIES} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib")

# Clean up for the next round
vcpkg_execute_build_process(
COMMAND make distclean
WORKING_DIRECTORY ${SOURCE_PATH}/cpp
LOGNAME make-clean-${TARGET_TRIPLET}
)

if(EXISTS "${UNIX_BUILD_DIR}/cpp/lib")
file(REMOVE_RECURSE "${UNIX_BUILD_DIR}/cpp/lib")
endif()
if(EXISTS "${UNIX_BUILD_DIR}/cpp/lib64")
file(REMOVE_RECURSE "${UNIX_BUILD_DIR}/cpp/lib64")
endif()
file(REMOVE_RECURSE "${UNIX_BUILD_DIR}/cpp/bin")

# Release build
set(ENV{LDFLAGS} "-L${CURRENT_INSTALLED_DIR}/lib")
message(STATUS "Building ${TARGET_TRIPLET}-rel")
vcpkg_execute_build_process(
COMMAND make
V=1
"prefix=${CURRENT_PACKAGES_DIR}"
linux_id=vcpkg
"CONFIGS=${ICE_BUILD_CONFIG}"
USR_DIR_INSTALL=yes
OPTIMIZE=yes
${ICE_OPTIONAL_COMPONENTS_MAKE}
"-j${VCPKG_CONCURRENCY}"
WORKING_DIRECTORY ${SOURCE_PATH}/cpp
LOGNAME make-${TARGET_TRIPLET}-rel
)

# Install release libraries and other files to packages directory
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/lib")
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/include")
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/share/ice/slice")
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}")

install_includes("${UNIX_BUILD_DIR}/cpp/include" "${ICE_INCLUDE_SUB_DIRECTORIES}")
install_includes("${UNIX_BUILD_DIR}/cpp/include/generated" "${ICE_INCLUDE_SUB_DIRECTORIES}")
install_slices("${SOURCE_PATH}/slice" "${ICE_INCLUDE_SUB_DIRECTORIES}")
if(EXISTS "${UNIX_BUILD_DIR}/cpp/lib64")
file(GLOB ICE_RELEASE_LIBRARIES "${UNIX_BUILD_DIR}/cpp/lib64/*")
else()
file(GLOB ICE_RELEASE_LIBRARIES "${UNIX_BUILD_DIR}/cpp/lib/*")
endif()
file(COPY ${ICE_RELEASE_LIBRARIES} DESTINATION "${CURRENT_PACKAGES_DIR}/lib")
file(GLOB ICE_RELEASE_EXECUTABLES "${UNIX_BUILD_DIR}/cpp/bin/*")
file(COPY ${ICE_RELEASE_EXECUTABLES} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")

# Clean up
vcpkg_execute_build_process(
COMMAND make distclean
WORKING_DIRECTORY ${SOURCE_PATH}/cpp
LOGNAME make-clean-after-build-${TARGET_TRIPLET}
)

if(EXISTS "${UNIX_BUILD_DIR}/cpp/lib")
file(REMOVE_RECURSE "${UNIX_BUILD_DIR}/cpp/lib")
endif()
if(EXISTS "${UNIX_BUILD_DIR}/cpp/lib64")
file(REMOVE_RECURSE "${UNIX_BUILD_DIR}/cpp/lib64")
endif()
file(REMOVE_RECURSE "${UNIX_BUILD_DIR}/cpp/bin")

else(NOT VCPKG_TARGET_IS_WINDOWS)

# Fix project files to prevent nuget restore of dependencies and
# remove hard coded runtime linkage
include("${CURRENT_PORT_DIR}/prepare_for_build.cmake")
prepare_for_build("${SOURCE_PATH}")

# Build Ice
vcpkg_install_msbuild(
SOURCE_PATH ${SOURCE_PATH}
PROJECT_SUBPATH "cpp/msbuild/ice.${VCPKG_PLATFORM_TOOLSET}.sln"
SKIP_CLEAN
TARGET "C++11\\ice++11"
USE_VCPKG_INTEGRATION
OPTIONS
/p:UseVcpkg=yes
/p:IceBuildingSrc=yes
${ICE_OPTIONAL_COMPONENTS_MSBUILD}
)

if(EXISTS "${CURRENT_PACKAGES_DIR}/bin/zeroc.icebuilder.msbuild.dll")
file(REMOVE "${CURRENT_PACKAGES_DIR}/bin/zeroc.icebuilder.msbuild.dll")
endif()
if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/bin/zeroc.icebuilder.msbuild.dll")
file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/bin/zeroc.icebuilder.msbuild.dll")
endif()

install_includes("${WIN_RELEASE_BUILD_DIR}/cpp/include" "${ICE_INCLUDE_SUB_DIRECTORIES}")
install_includes("${WIN_RELEASE_BUILD_DIR}/cpp/include/generated/cpp11/${TRIPLET_SYSTEM_ARCH}/Release" "${ICE_INCLUDE_SUB_DIRECTORIES}")

file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/share/ice/slice")
install_slices("${SOURCE_PATH}/slice" "${ICE_INCLUDE_SUB_DIRECTORIES}")

if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin")
endif()

vcpkg_clean_msbuild()

endif(NOT VCPKG_TARGET_IS_WINDOWS)

# Remove unnecessary static libraries.
file(GLOB PDLIBS "${CURRENT_PACKAGES_DIR}/debug/lib/*")
file(GLOB PRLIBS "${CURRENT_PACKAGES_DIR}/lib/*")
list(FILTER PDLIBS INCLUDE REGEX ".*(([Ii]ce[Uu]til|[Ss]lice)d?\.([a-z]+))$")
list(FILTER PRLIBS INCLUDE REGEX ".*(([Ii]ce[Uu]til|[Ss]lice)d?\.([a-z]+))$")
file(REMOVE ${PDLIBS} ${PRLIBS})

if(VCPKG_TARGET_IS_OSX AND EXISTS "${CURRENT_PACKAGES_DIR}/.DS_Store")
file(REMOVE "${CURRENT_PACKAGES_DIR}/.DS_Store")
endif()

# Handle copyright
file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/zeroc-ice RENAME copyright)
60 changes: 60 additions & 0 deletions ports/zeroc-ice/prepare_for_build.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@

# This function removes hardcoded RuntimeLibrary directives from Ice's vcxproh files and downloads
# Ice Builder for MSBuild, which is required to generate C++ files based on the interface definition
# files (.ice).

function(prepare_for_build ICE_SOURCE_DIR)

message("-- Removing hardcoded 'RuntimeLibrary' directives from .vcxproj files")
set(CPP_SOURCE_DIR "${ICE_SOURCE_DIR}/cpp/src")
file(GLOB_RECURSE PROJ_FILES "${CPP_SOURCE_DIR}/*.vcxproj")
foreach(PROJ_FILE ${PROJ_FILES})
file(READ ${PROJ_FILE} PROJ_FILE_CONTENT)
STRING(REGEX
REPLACE
"<Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">"
"<Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\" Condition=\"'$(UseVcpkg)' != 'yes'\">"
PROJ_FILE_CONTENT
"${PROJ_FILE_CONTENT}"
)
STRING(REGEX
REPLACE
"<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>"
""
PROJ_FILE_CONTENT
"${PROJ_FILE_CONTENT}"
)
STRING(REGEX
REPLACE
"<RuntimeLibrary>MultiThreaded</RuntimeLibrary>"
""
PROJ_FILE_CONTENT
"${PROJ_FILE_CONTENT}"
)
file(WRITE ${PROJ_FILE} "${PROJ_FILE_CONTENT}")
endforeach()

set(ICE_CPP_MSBUILD_PACKAGES_DIR "${ICE_SOURCE_DIR}/cpp/msbuild/packages")
set(ICE_BUILDER_DEST_DIRECTORY "${ICE_CPP_MSBUILD_PACKAGES_DIR}/zeroc.icebuilder.msbuild.5.0.7")
if(NOT EXISTS ${ICE_BUILDER_DEST_DIRECTORY})
message("-- Making Ice Builder for MSBuild available")
vcpkg_download_distfile(
ICE_BUILDER_MSBUILD_ARCHIVE
URLS https://globalcdn.nuget.org/packages/zeroc.icebuilder.msbuild.5.0.7.nupkg
FILENAME zeroc.icebuilder.msbuild.5.0.7.zip
SHA512 d4afed8a3c67daf2e1cde09e7747ec9f088fa1354069bb7c7782c1089ea0f4e50b669f45a88502ad341dbccafbc1394d74fe764479f25bf4be1d3f70e66cb174
)

vcpkg_extract_source_archive(
ICE_BUILDER_MSBUILD_DIRECTORY
ARCHIVE
"${ICE_BUILDER_MSBUILD_ARCHIVE}"
NO_REMOVE_ONE_LEVEL
SOURCE_BASE icebuilder
)

file(MAKE_DIRECTORY "${ICE_SOURCE_DIR}/cpp/msbuild/packages")
file(RENAME ${ICE_BUILDER_MSBUILD_DIRECTORY} ${ICE_BUILDER_DEST_DIRECTORY})
endif()

endfunction()
Loading