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

[ace] Let ssl feature able to work on Linux when selected #9016

Merged
merged 10 commits into from
Jan 21, 2020
2 changes: 1 addition & 1 deletion ports/ace/CONTROL
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Source: ace
Version: 6.5.7
Version: 6.5.7-1
Homepage: https://www.dre.vanderbilt.edu/~schmidt/ACE.html
Description: The ADAPTIVE Communication Environment

Expand Down
237 changes: 152 additions & 85 deletions ports/ace/portfile.cmake
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
include(vcpkg_common_functions)
JackBoosY marked this conversation as resolved.
Show resolved Hide resolved

# Don't change to vcpkg_from_github! This points to a release and not an archive
vcpkg_download_distfile(ARCHIVE
URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-6_5_7/ACE-src-6.5.7.zip"
FILENAME ACE-src-6.5.7.zip
SHA512 6ce6954941521b34ae8913dfe053d0f066632c55adf4091dae6bc180c79963d6f4ddfec7796cd6d9fc8ff59037ee162d20b017c4c296828913498bdbac2fc8a7
)
# Using zip archive under Linux would cause sh/perl to report "No such file or directory" or "bad interpreter"
# when invoking `prj_install.pl`.
# So far this issue haven't yet be triggered under WSL 1 distributions. Not sure the root cause of it.
if(VCPKG_TARGET_IS_WINDOWS)
# Don't change to vcpkg_from_github! This points to a release and not an archive
vcpkg_download_distfile(ARCHIVE
URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-6_5_7/ACE-src-6.5.7.zip"
FILENAME ACE-src-6.5.7.zip
SHA512 6ce6954941521b34ae8913dfe053d0f066632c55adf4091dae6bc180c79963d6f4ddfec7796cd6d9fc8ff59037ee162d20b017c4c296828913498bdbac2fc8a7
)
else(VCPKG_TARGET_IS_WINDOWS)
# VCPKG_TARGET_IS_LINUX
vcpkg_download_distfile(ARCHIVE
URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-6_5_7/ACE-src-6.5.7.tar.gz"
FILENAME ACE-src-6.5.7.tar.gz
SHA512 0116e269e2d49ba8afccc7abfc7492e5a6a286dcbdcfe850a21f86b4facb5fef2848985d803233f4b1fbb03457e592375ab24c62e7bbaab5c28cc240ccedbacb
)
endif()

vcpkg_extract_source_archive_ex(
OUT_SOURCE_PATH SOURCE_PATH
Expand Down Expand Up @@ -56,7 +68,7 @@ endif()

# Add ace/config.h file
# see https://htmlpreview.github.io/?https://github.com/DOCGroup/ACE_TAO/blob/master/ACE/ACE-INSTALL.html
if(NOT VCPKG_CMAKE_SYSTEM_NAME)
if(VCPKG_TARGET_IS_WINDOWS)
set(LIB_RELEASE_SUFFIX .lib)
set(LIB_DEBUG_SUFFIX d.lib)
if(VCPKG_PLATFORM_TOOLSET MATCHES "v142")
Expand All @@ -69,7 +81,7 @@ if(NOT VCPKG_CMAKE_SYSTEM_NAME)
file(WRITE ${ACE_SOURCE_PATH}/config.h "#include \"ace/config-windows.h\"")
endif()

if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(VCPKG_TARGET_IS_LINUX)
set(DLL_DECORATOR)
set(LIB_RELEASE_SUFFIX .a)
set(LIB_DEBUG_SUFFIX .a)
Expand All @@ -86,96 +98,151 @@ vcpkg_execute_required_process(
LOGNAME mwc-${TARGET_TRIPLET}
)

if(NOT VCPKG_CMAKE_SYSTEM_NAME)
if(VCPKG_TARGET_IS_WINDOWS)
vcpkg_build_msbuild(
PROJECT_PATH ${ACE_SOURCE_PATH}/ace.sln
PLATFORM ${MSBUILD_PLATFORM}
USE_VCPKG_INTEGRATION
)
endif()

if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
# ACE itself does not define an install target, so it is not clear which
# headers are public and which not. For the moment we install everything
# that is in the source path and ends in .h, .inl
function(install_ace_headers_subdirectory ORIGINAL_PATH RELATIVE_PATH)
file(GLOB HEADER_FILES ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.h ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.inl)
file(INSTALL ${HEADER_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/ace/${RELATIVE_PATH})
endfunction()

# We manually install header found in the ace directory because in that case
# we are supposed to install also *cpp files, see ACE_wrappers\debian\libace-dev.install file
file(GLOB HEADER_FILES ${ACE_SOURCE_PATH}/*.h ${ACE_SOURCE_PATH}/*.inl ${ACE_SOURCE_PATH}/*.cpp)
file(INSTALL ${HEADER_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/ace/)

# Install headers in subdirectory
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "Compression")
gnaggnoyil marked this conversation as resolved.
Show resolved Hide resolved
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "Compression/rle")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "ETCL")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "QoS")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "Monitor_Control")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include/arpa")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include/net")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include/netinet")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include/sys")
if("ssl" IN_LIST FEATURES)
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "SSL")
endif()

# Install the libraries
function(install_ace_library ORIGINAL_PATH ACE_LIBRARY)
set(LIB_PATH ${ORIGINAL_PATH}/lib/)
if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
# Install the DLL files
file(INSTALL
${LIB_PATH}/${ACE_LIBRARY}d.dll
DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin
)
file(INSTALL
${LIB_PATH}/${ACE_LIBRARY}.dll
DESTINATION ${CURRENT_PACKAGES_DIR}/bin
)
endif()

# Install the lib files
file(INSTALL
${LIB_PATH}/${LIB_PREFIX}${ACE_LIBRARY}${DLL_DECORATOR}${LIB_DEBUG_SUFFIX}
DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib
)

file(INSTALL
${LIB_PATH}/${LIB_PREFIX}${ACE_LIBRARY}${DLL_DECORATOR}${LIB_RELEASE_SUFFIX}
DESTINATION ${CURRENT_PACKAGES_DIR}/lib
)
endfunction()

install_ace_library(${ACE_ROOT} "ACE")
install_ace_library(${ACE_ROOT} "ACE_Compression")
install_ace_library(${ACE_ROOT} "ACE_ETCL")
install_ace_library(${ACE_ROOT} "ACE_ETCL_Parser")
install_ace_library(${ACE_ROOT} "ACE_Monitor_Control")
if(NOT VCPKG_CMAKE_SYSTEM_NAME)
install_ace_library(${ACE_ROOT} "ACE_QoS")
endif()
install_ace_library(${ACE_ROOT} "ACE_RLECompression")
if("ssl" IN_LIST FEATURES)
install_ace_library(${ACE_ROOT} "ACE_SSL")
endif()

vcpkg_copy_pdbs()

# Handle copyright
file(COPY ${ACE_ROOT}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/ace)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks this can be done in one step, see #9655 (comment)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems to be. I'll have a look at it.

file(RENAME ${CURRENT_PACKAGES_DIR}/share/ace/COPYING ${CURRENT_PACKAGES_DIR}/share/ace/copyright)
else(VCPKG_TARGET_IS_WINDOWS)
# VCPKG_TARGTE_IS_LINUX
FIND_PROGRAM(MAKE make)
IF (NOT MAKE)
MESSAGE(FATAL_ERROR "MAKE not found")
ENDIF ()

list(APPEND _pkg_components ACE_ETCL_Parser ACE_ETCL ACE)
if("ssl" IN_LIST FEATURES)
list(APPEND _ace_makefile_macros "ssl=1")
set(ENV{SSL_ROOT} ${CURRENT_INSTALLED_DIR})
list(APPEND _pkg_components ACE_SSL)
endif()
set(ENV{INSTALL_PREFIX} ${CURRENT_PACKAGES_DIR})
# Set `PWD` environment variable since ACE's `install` make target calculates install dir using this env.
set(_prev_env $ENV{PWD})
set(ENV{PWD} ${ACE_ROOT}/ace)

message(STATUS "Building ${TARGET_TRIPLET}-dbg")
vcpkg_execute_required_process(
JackBoosY marked this conversation as resolved.
Show resolved Hide resolved
JackBoosY marked this conversation as resolved.
Show resolved Hide resolved
COMMAND make
COMMAND make ${_ace_makefile_macros} "debug=1" "-j${VCPKG_CONCURRENCY}"
WORKING_DIRECTORY ${ACE_ROOT}/ace
LOGNAME make-${TARGET_TRIPLET}
LOGNAME make-${TARGET_TRIPLET}-dbg
)
endif()

# ACE itself does not define an install target, so it is not clear which
# headers are public and which not. For the moment we install everything
# that is in the source path and ends in .h, .inl
function(install_ace_headers_subdirectory ORIGINAL_PATH RELATIVE_PATH)
file(GLOB HEADER_FILES ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.h ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.inl)
file(INSTALL ${HEADER_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/ace/${RELATIVE_PATH})
endfunction()

# We manually install header found in the ace directory because in that case
# we are supposed to install also *cpp files, see ACE_wrappers\debian\libace-dev.install file
file(GLOB HEADER_FILES ${ACE_SOURCE_PATH}/*.h ${ACE_SOURCE_PATH}/*.inl ${ACE_SOURCE_PATH}/*.cpp)
file(INSTALL ${HEADER_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/ace/)

# Install headers in subdirectory
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "Compression")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "Compression/rle")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "ETCL")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "QoS")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "Monitor_Control")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include/arpa")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include/net")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include/netinet")
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "os_include/sys")
if("ssl" IN_LIST FEATURES)
install_ace_headers_subdirectory(${ACE_SOURCE_PATH} "SSL")
endif()
message(STATUS "Building ${TARGET_TRIPLET}-dbg done")
message(STATUS "Packaging ${TARGET_TRIPLET}-dbg")
vcpkg_execute_required_process(
COMMAND make ${_ace_makefile_macros} install
WORKING_DIRECTORY ${ACE_ROOT}/ace
LOGNAME install-${TARGET_TRIPLET}-dbg
)
file(COPY ${CURRENT_PACKAGES_DIR}/lib DESTINATION ${CURRENT_PACKAGES_DIR}/debug)
# TODO: check if we really need to remove those directories
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/share)
foreach(_pkg_comp ${_pkg_components})
file(READ ${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/${_pkg_comp}.pc _content)
string(REPLACE "libdir=${CURRENT_PACKAGES_DIR}/lib" "libdir=${CURRENT_PACKAGES_DIR}/debug/lib" _content ${_content})
file(WRITE ${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/${_pkg_comp}.pc ${_content})
endforeach()
message(STATUS "Packaging ${TARGET_TRIPLET}-dbg done")

# Install the libraries
function(install_ace_library ORIGINAL_PATH ACE_LIBRARY)
set(LIB_PATH ${ORIGINAL_PATH}/lib/)
if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
# Install the DLL files
file(INSTALL
${LIB_PATH}/${ACE_LIBRARY}d.dll
DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin
)
file(INSTALL
${LIB_PATH}/${ACE_LIBRARY}.dll
DESTINATION ${CURRENT_PACKAGES_DIR}/bin
)
endif()

# Install the lib files
file(INSTALL
${LIB_PATH}/${LIB_PREFIX}${ACE_LIBRARY}${DLL_DECORATOR}${LIB_DEBUG_SUFFIX}
DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib
)

file(INSTALL
${LIB_PATH}/${LIB_PREFIX}${ACE_LIBRARY}${DLL_DECORATOR}${LIB_RELEASE_SUFFIX}
DESTINATION ${CURRENT_PACKAGES_DIR}/lib
)
endfunction()

install_ace_library(${ACE_ROOT} "ACE")
install_ace_library(${ACE_ROOT} "ACE_Compression")
install_ace_library(${ACE_ROOT} "ACE_ETCL")
install_ace_library(${ACE_ROOT} "ACE_ETCL_Parser")
install_ace_library(${ACE_ROOT} "ACE_Monitor_Control")
if(NOT VCPKG_CMAKE_SYSTEM_NAME)
install_ace_library(${ACE_ROOT} "ACE_QoS")
endif()
install_ace_library(${ACE_ROOT} "ACE_RLECompression")
if("ssl" IN_LIST FEATURES)
install_ace_library(${ACE_ROOT} "ACE_SSL")
endif()
vcpkg_execute_required_process(
COMMAND make ${_ace_makefile_macros} realclean
WORKING_DIRECTORY ${ACE_ROOT}/ace
LOGNAME realclean-${TARGET_TRIPLET}-dbg
)

# Handle copyright
file(COPY ${ACE_ROOT}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/ace)
file(RENAME ${CURRENT_PACKAGES_DIR}/share/ace/COPYING ${CURRENT_PACKAGES_DIR}/share/ace/copyright)
message(STATUS "Building ${TARGET_TRIPLET}-rel")
vcpkg_execute_required_process(
JackBoosY marked this conversation as resolved.
Show resolved Hide resolved
COMMAND make ${_ace_makefile_macros} "-j${VCPKG_CONCURRENCY}"
WORKING_DIRECTORY ${ACE_ROOT}/ace
LOGNAME make-${TARGET_TRIPLET}-rel
)
message(STATUS "Building ${TARGET_TRIPLET}-rel done")
message(STATUS "Packaging ${TARGET_TRIPLET}-rel")
vcpkg_execute_required_process(
COMMAND make ${_ace_makefile_macros} install
WORKING_DIRECTORY ${ACE_ROOT}/ace
LOGNAME install-${TARGET_TRIPLET}-rel
)
message(STATUS "Packaging ${TARGET_TRIPLET}-rel done")
# Restore `PWD` environment variable
set($ENV{PWD} _prev_env)

vcpkg_copy_pdbs()
# Handle copyright
file(RENAME ${CURRENT_PACKAGES_DIR}/share/ace/COPYING ${CURRENT_PACKAGES_DIR}/share/ace/copyright)
endif()