Skip to content
Closed
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
2 changes: 1 addition & 1 deletion ports/protobuf/CONTROL
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Source: protobuf
Version: 3.13.0
Port-Version: 2
Port-Version: 3
Homepage: https://github.com/protocolbuffers/protobuf
Description: Protocol Buffers - Google's data interchange format

Expand Down
120 changes: 103 additions & 17 deletions ports/protobuf/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,99 @@ vcpkg_from_github(
fix-static-build.patch
)

if(CMAKE_HOST_WIN32 AND NOT VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND NOT VCPKG_TARGET_ARCHITECTURE MATCHES "x86")
if(VCPKG_HOST_IS_WINDOWS)
set(HOST_PROTOBUF_TRIPLET "x86-windows")
set(VCPKG_HOST_ARCH "$ENV{PROCESSOR_ARCHITECTURE}")

message(STATUS "Dump CMake variables and some ENV variables to debug azure pipeline")
get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
message(STATUS "${_variableName}=${${_variableName}}")
endforeach()

message(STATUS "VCPKG_TARGET_ARCHITECTURE = ${VCPKG_TARGET_ARCHITECTURE}, PROCESSOR_ARCHITECTURE = $ENV{PROCESSOR_ARCHITECTURE}, PROCESSOR_ARCHITEW6432 = $ENV{PROCESSOR_ARCHITEW6432}")

if(NOT VCPKG_TARGET_IS_WINDOWS)
set(protobuf_BUILD_PROTOC_BINARIES OFF)
elseif(CMAKE_HOST_WIN32 AND NOT VCPKG_TARGET_IS_MINGW AND NOT (VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_UWP))
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_HOST_ARCH MATCHES "AMD64")
set(protobuf_BUILD_PROTOC_BINARIES ON)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND (VCPKG_HOST_ARCH MATCHES "[xX]86" AND $ENV{PROCESSOR_ARCHITEW6432} MATCHES "AMD64"))
set(protobuf_BUILD_PROTOC_BINARIES ON)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_HOST_ARCH MATCHES "[xX]86|AMD64")
set(protobuf_BUILD_PROTOC_BINARIES ON)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm|arm64" AND VCPKG_HOST_ARCH MATCHES "ARM64")
set(protobuf_BUILD_PROTOC_BINARIES ON)
else()
set(protobuf_BUILD_PROTOC_BINARIES OFF)
else()
endif()

if(NOT protobuf_BUILD_PROTOC_BINARIES)
if(VCPKG_HOST_ARCH MATCHES "ARM64")
set(HOST_PROTOBUF_TRIPLET "arm64-windows")
elseif(VCPKG_HOST_ARCH MATCHES "[xX]86" AND NOT $ENV{PROCESSOR_ARCHITEW6432} MATCHES "AMD64")
set(HOST_PROTOBUF_TRIPLET "x86-windows")
elseif(VCPKG_HOST_ARCH MATCHES "AMD64" OR (VCPKG_HOST_ARCH MATCHES "[xX]86" AND $ENV{PROCESSOR_ARCHITEW6432} MATCHES "AMD64"))
set(HOST_PROTOBUF_TRIPLET "x64-windows")
else()
set(HOST_PROTOBUF_TRIPLET "unknown host compatible triplet")
endif()
endif()

elseif(VCPKG_HOST_IS_OSX)
execute_process(COMMAND "sysctl" "hw.machine" OUTPUT_VARIABLE VCPKG_HOST_ARCH)
string(STRIP "${VCPKG_HOST_ARCH}" VCPKG_HOST_ARCH)

if(NOT VCPKG_TARGET_IS_OSX)
set(protobuf_BUILD_PROTOC_BINARIES OFF)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_HOST_ARCH MATCHES "x86_64")
set(protobuf_BUILD_PROTOC_BINARIES ON)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_HOST_ARCH MATCHES "i[36]86|x86_64")
set(protobuf_BUILD_PROTOC_BINARIES ON)
else()
set(protobuf_BUILD_PROTOC_BINARIES OFF)
endif()

if(NOT protobuf_BUILD_PROTOC_BINARIES)
if(VCPKG_HOST_ARCH MATCHES "x86_64")
set(HOST_PROTOBUF_TRIPLET "x64-osx")
else()
set(HOST_PROTOBUF_TRIPLET "unknown host compatible triplet")
endif()
endif()

elseif(VCPKG_HOST_IS_LINUX)
execute_process(COMMAND "uname" "-m" OUTPUT_VARIABLE VCPKG_HOST_ARCH)
string(STRIP "${VCPKG_HOST_ARCH}" VCPKG_HOST_ARCH)

if(NOT VCPKG_TARGET_IS_LINUX)
set(protobuf_BUILD_PROTOC_BINARIES OFF)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_HOST_ARCH MATCHES "x86_64")
set(protobuf_BUILD_PROTOC_BINARIES ON)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_HOST_ARCH MATCHES "i[36]86|x86_64")
set(protobuf_BUILD_PROTOC_BINARIES ON)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64" AND VCPKG_HOST_ARCH MATCHES "arm64*")
set(protobuf_BUILD_PROTOC_BINARIES ON)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm" AND VCPKG_HOST_ARCH MATCHES "arm*")
set(protobuf_BUILD_PROTOC_BINARIES ON)
else()
set(protobuf_BUILD_PROTOC_BINARIES OFF)
endif()

if(NOT protobuf_BUILD_PROTOC_BINARIES)
if(VCPKG_HOST_ARCH MATCHES "x86_64")
set(HOST_PROTOBUF_TRIPLET "x64-linux")
elseif(VCPKG_HOST_ARCH MATCHES "arm64*")
set(HOST_PROTOBUF_TRIPLET "arm64-linux")
elseif(VCPKG_HOST_ARCH MATCHES "arm")
set(HOST_PROTOBUF_TRIPLET "arm-linux")
else()
set(HOST_PROTOBUF_TRIPLET "unknown host compatible triplet")
endif()
endif()
endif()

if(NOT protobuf_BUILD_PROTOC_BINARIES AND NOT EXISTS ${CURRENT_INSTALLED_DIR}/../x86-windows/tools/protobuf)
message(FATAL_ERROR "Cross-targetting protobuf requires the x86-windows protoc to be available. Please install protobuf:x86-windows first.")
if(HOST_PROTOBUF_TRIPLET AND NOT protobuf_BUILD_PROTOC_BINARIES AND NOT EXISTS ${_VCPKG_INSTALLED_DIR}/${HOST_PROTOBUF_TRIPLET}/tools/protobuf)
message(FATAL_ERROR "Cross-targetting protobuf requires the ${HOST_PROTOBUF_TRIPLET} protoc to be available. Please install protobuf:${HOST_PROTOBUF_TRIPLET} first.")
endif()

if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
Expand Down Expand Up @@ -93,13 +176,21 @@ endif()

protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/debug/share)

if(CMAKE_HOST_WIN32)
if(protobuf_BUILD_PROTOC_BINARIES)
vcpkg_copy_tools(TOOL_NAMES protoc)
else()
file(COPY ${CURRENT_INSTALLED_DIR}/../x86-windows/tools/${PORT} DESTINATION ${CURRENT_PACKAGES_DIR}/tools)
endif()
if(protobuf_BUILD_PROTOC_BINARIES)
file(GLOB EXECUTABLES ${CURRENT_PACKAGES_DIR}/bin/protoc*)
foreach(E IN LISTS EXECUTABLES)
file(INSTALL ${E} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ)
endforeach()
else()
file(GLOB EXECUTABLES ${_VCPKG_INSTALLED_DIR}/${HOST_PROTOBUF_TRIPLET}/tools/${PORT}/protoc*)
foreach(E IN LISTS EXECUTABLES)
file(INSTALL ${E} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ)
endforeach()
endif()

if(VCPKG_HOST_IS_WINDOWS)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/bin)
protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/debug/bin)
Expand All @@ -108,11 +199,6 @@ if(CMAKE_HOST_WIN32)
protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/debug/bin/protoc.exe)
endif()
else()
file(GLOB EXECUTABLES ${CURRENT_PACKAGES_DIR}/bin/protoc*)
foreach(E IN LISTS EXECUTABLES)
file(INSTALL ${E} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ)
endforeach()
protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/debug/bin)
protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/bin)
endif()
Expand All @@ -139,4 +225,4 @@ endif()
vcpkg_fixup_pkgconfig(${SYSTEM_LIBRARIES})

configure_file(${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake ${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake @ONLY)
file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)