# 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. set(ACE_VERSION 7.0.5) string(REPLACE "." "_" ACE_VERSION_DIRECTORY ${ACE_VERSION}) if("tao" IN_LIST FEATURES) 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-${ACE_VERSION_DIRECTORY}/ACE%2BTAO-src-${ACE_VERSION}.zip" FILENAME ACE-TAO-${ACE_VERSION}.zip SHA512 3ea0cc7b35433d7c41f51137caacd394a976cf4d5c2972a35015901b3ba172bacff0216a3146bf632b929a63853b7123019382c22d14c6d64e43a71a61b88023 ) else() vcpkg_download_distfile(ARCHIVE URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${ACE_VERSION_DIRECTORY}/ACE%2BTAO-src-${ACE_VERSION}.tar.gz" FILENAME ACE-TAO-${ACE_VERSION}.tar.gz SHA512 65c6557f72a57dc137882bbf6cbb009ae2e403c9848e3e4c3165f1ed55865c5e08fc0226dcf715b33bfa501b13b3863f5c40403791b0dcd29b7c88fec20a9660 ) endif() else() 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-${ACE_VERSION_DIRECTORY}/ACE-src-${ACE_VERSION}.zip" FILENAME ACE-src-${ACE_VERSION}.zip SHA512 73707c92a0533ab60f090cfb620d508755b8267e2b83fb52d9903c4d780d2e2b504545433fdbe34801d4895cf938ecc5a5f26c34528851080bcce07f5a501ac1 ) else() vcpkg_download_distfile(ARCHIVE URLS "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${ACE_VERSION_DIRECTORY}/ACE-src-${ACE_VERSION}.tar.gz" FILENAME ACE-src-${ACE_VERSION}.tar.gz SHA512 6e5e43e600763e612c292cb88443e4dce1be94d049e2a784c5a4d4720314b484cccec4f7f05534c6ef824d86bef8bfe4ff5bce5f7998896cdaa599302b5b2562 ) endif() endif() vcpkg_extract_source_archive_ex( OUT_SOURCE_PATH SOURCE_PATH ARCHIVE ${ARCHIVE} PATCHES fix-macos-12.patch ) set(ACE_ROOT ${SOURCE_PATH}) set(ENV{ACE_ROOT} ${ACE_ROOT}) set(ACE_SOURCE_PATH ${ACE_ROOT}/ace) if("tao" IN_LIST FEATURES) set(TAO_ROOT ${SOURCE_PATH}/TAO) set(ENV{TAO_ROOT} ${TAO_ROOT}) set(WORKSPACE ${TAO_ROOT}/TAO_ACE) else() set(WORKSPACE ${ACE_ROOT}/ace/ace) endif() if("wchar" IN_LIST FEATURES) list(APPEND ACE_FEATURE_LIST "uses_wchar=1") endif() if("zlib" IN_LIST FEATURES) list(APPEND ACE_FEATURE_LIST "zlib=1") set(ENV{ZLIB_ROOT} ${CURRENT_INSTALLED_DIR}) else() list(APPEND ACE_FEATURE_LIST "zlib=0") endif() if("ssl" IN_LIST FEATURES) list(APPEND ACE_FEATURE_LIST "ssl=1") list(APPEND ACE_FEATURE_LIST "openssl11=1") set(ENV{SSL_ROOT} ${CURRENT_INSTALLED_DIR}) else() list(APPEND ACE_FEATURE_LIST "ssl=0") endif() if("xml-utils" IN_LIST FEATURES) list(APPEND ACE_FEATURE_LIST "xerces3=1") set(ENV{XERCESCROOT} ${CURRENT_INSTALLED_DIR}) else() list(APPEND ACE_FEATURE_LIST "xerces3=0") endif() list(JOIN ACE_FEATURE_LIST "," ACE_FEATURES) # Acquire Perl and add it to PATH (for execution of MPC) vcpkg_find_acquire_program(PERL) get_filename_component(PERL_PATH ${PERL} DIRECTORY) vcpkg_add_to_path(${PERL_PATH}) if (TRIPLET_SYSTEM_ARCH MATCHES "x86") set(MSBUILD_PLATFORM "Win32") else () set(MSBUILD_PLATFORM ${TRIPLET_SYSTEM_ARCH}) endif() # Add ace/config.h file # see https://htmlpreview.github.io/?https://github.com/DOCGroup/ACE_TAO/blob/master/ACE/ACE-INSTALL.html if(VCPKG_TARGET_IS_WINDOWS) if(VCPKG_PLATFORM_TOOLSET MATCHES "v140") set(SOLUTION_TYPE vc14) elseif(VCPKG_PLATFORM_TOOLSET MATCHES "v141") set(SOLUTION_TYPE vs2017) elseif(VCPKG_PLATFORM_TOOLSET MATCHES "v142") set(SOLUTION_TYPE vs2019) else() set(SOLUTION_TYPE vs2022) endif() if (VCPKG_LIBRARY_LINKAGE STREQUAL "static") set(MPC_STATIC_FLAG -static) endif() file(WRITE ${ACE_SOURCE_PATH}/config.h "#include \"ace/config-windows.h\"") elseif(VCPKG_TARGET_IS_LINUX) set(SOLUTION_TYPE gnuace) file(WRITE ${ACE_SOURCE_PATH}/config.h "#include \"ace/config-linux.h\"") file(WRITE ${ACE_ROOT}/include/makeinclude/platform_macros.GNU "include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU") elseif(VCPKG_TARGET_IS_OSX) set(SOLUTION_TYPE gnuace) file(WRITE ${ACE_SOURCE_PATH}/config.h "#include \"ace/config-macosx.h\"") file(WRITE ${ACE_ROOT}/include/makeinclude/platform_macros.GNU "include $(ACE_ROOT)/include/makeinclude/platform_macosx.GNU") endif() if(VCPKG_TARGET_IS_UWP) set(MPC_VALUE_TEMPLATE -value_template link_options+=/APPCONTAINER) endif() # Invoke mwc.pl to generate the necessary solution and project files vcpkg_execute_build_process( COMMAND ${PERL} ${ACE_ROOT}/bin/mwc.pl -type ${SOLUTION_TYPE} -features "${ACE_FEATURES}" ${WORKSPACE}.mwc ${MPC_STATIC_FLAG} ${MPC_VALUE_TEMPLATE} WORKING_DIRECTORY ${ACE_ROOT} LOGNAME mwc-${TARGET_TRIPLET} ) if("xml" IN_LIST FEATURES) vcpkg_execute_build_process( COMMAND ${PERL} ${ACE_ROOT}/bin/mwc.pl -type ${SOLUTION_TYPE} -features "${ACE_FEATURES}" ${ACE_ROOT}/ACEXML/ACEXML.mwc ${MPC_STATIC_FLAG} ${MPC_VALUE_TEMPLATE} WORKING_DIRECTORY ${ACE_ROOT}/ACEXML LOGNAME mwc-xml-${TARGET_TRIPLET} ) endif() if(VCPKG_TARGET_IS_WINDOWS) if("tao" IN_LIST FEATURES OR "xml" IN_LIST FEATURES) file(WRITE ${SOURCE_PATH}/Directory.Build.props " /MP ${ACE_ROOT} ${CURRENT_PACKAGES_DIR}/lib;${CURRENT_PACKAGES_DIR}/debug/lib;${CURRENT_INSTALLED_DIR}/lib;${CURRENT_INSTALLED_DIR}/debug/lib ") endif() file(RELATIVE_PATH PROJECT_SUBPATH ${SOURCE_PATH} ${WORKSPACE}.sln) vcpkg_install_msbuild( SOURCE_PATH ${SOURCE_PATH} PROJECT_SUBPATH ${PROJECT_SUBPATH} LICENSE_SUBPATH COPYING PLATFORM ${MSBUILD_PLATFORM} SKIP_CLEAN ) # 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_includes ORIGINAL_PATH RELATIVE_PATHS) foreach(RELATIVE_PATH ${RELATIVE_PATHS}) file( GLOB HEADER_FILES ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.h ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.hpp ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.inl ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.cpp ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.idl ${ORIGINAL_PATH}/${RELATIVE_PATH}/*.pidl) file(INSTALL ${HEADER_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/${RELATIVE_PATH}) endforeach() endfunction() get_filename_component(SOURCE_PATH_SUFFIX "${SOURCE_PATH}" NAME) set(SOURCE_COPY_PATH ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/${SOURCE_PATH_SUFFIX}) # Install headers in subdirectory set(ACE_INCLUDE_FOLDERS "ace" "ace/Compression" "ace/Compression/rle" "ace/ETCL" "ace/QoS" "ace/Monitor_Control" "ace/os_include" "ace/os_include/arpa" "ace/os_include/net" "ace/os_include/netinet" "ace/os_include/sys") install_includes(${SOURCE_COPY_PATH} "${ACE_INCLUDE_FOLDERS}") if("ssl" IN_LIST FEATURES) install_includes(${SOURCE_COPY_PATH} "ace/SSL") endif() if("tao" IN_LIST FEATURES) set(ACEXML_INCLUDE_FOLDERS "ACEXML/apps/svcconf" "ACEXML/common" "ACEXML/parser/parser") install_includes(${SOURCE_COPY_PATH} "${ACEXML_INCLUDE_FOLDERS}") set(ACE_PROTOCOLS_INCLUDE_FOLDERS "ace/HTBP" "ace/INet" "ace/RMCast" "ace/TMCast") install_includes(${SOURCE_COPY_PATH}/protocols "${ACE_PROTOCOLS_INCLUDE_FOLDERS}") install_includes(${SOURCE_COPY_PATH} "Kokyu") set(TAO_ORBSVCS_INCLUDE_FOLDERS "orbsvcs" "orbsvcs/AV" "orbsvcs/Concurrency" "orbsvcs/CosEvent" "orbsvcs/Event" "orbsvcs/FaultTolerance" "orbsvcs/FtRtEvent/ClientORB" "orbsvcs/FtRtEvent/EventChannel" "orbsvcs/FtRtEvent/Utils" "orbsvcs/HTIOP" "orbsvcs/IFRService" "orbsvcs/LifeCycle" "orbsvcs/LoadBalancing" "orbsvcs/Log" "orbsvcs/Naming" "orbsvcs/Naming/FaultTolerant" "orbsvcs/Notify" "orbsvcs/Notify/Any" "orbsvcs/Notify/MonitorControl" "orbsvcs/Notify/MonitorControlExt" "orbsvcs/Notify/Sequence" "orbsvcs/Notify/Structured" "orbsvcs/PortableGroup" "orbsvcs/Property" "orbsvcs/Sched" "orbsvcs/Security" "orbsvcs/Time" "orbsvcs/Trader") if("ssl" IN_LIST FEATURES) list(APPEND TAO_ORBSVCS_INCLUDE_FOLDERS "orbsvcs/SSLIOP") endif() install_includes(${SOURCE_COPY_PATH}/TAO/orbsvcs "${TAO_ORBSVCS_INCLUDE_FOLDERS}") set(TAO_ROOT_ORBSVCS_INCLUDE_FOLDERS "orbsvcs/FT_ReplicationManager" "orbsvcs/Notify_Service") install_includes(${SOURCE_COPY_PATH}/TAO "${TAO_ROOT_ORBSVCS_INCLUDE_FOLDERS}") set(TAO_INCLUDE_FOLDERS "tao" "tao/AnyTypeCode" "tao/BiDir_GIOP" "tao/CSD_Framework" "tao/CSD_ThreadPool" "tao/CodecFactory" "tao/Codeset" "tao/Compression" "tao/Compression/rle" "tao/DiffServPolicy" "tao/DynamicAny" "tao/DynamicInterface" "tao/Dynamic_TP" "tao/ETCL" "tao/EndpointPolicy" "tao/IFR_Client" "tao/IORInterceptor" "tao/IORManipulation" "tao/IORTable" "tao/ImR_Client" "tao/Messaging" "tao/Monitor" "tao/ObjRefTemplate" "tao/PI" "tao/PI_Server" "tao/PortableServer" "tao/RTCORBA" "tao/RTPortableServer" "tao/RTScheduling" "tao/SmartProxies" "tao/Strategies" "tao/TransportCurrent" "tao/TypeCodeFactory" "tao/Utils" "tao/Valuetype" "tao/ZIOP") if("zlib" IN_LIST FEATURES) list(APPEND TAO_INCLUDE_FOLDERS "tao/Compression/zlib") endif() install_includes(${SOURCE_COPY_PATH}/TAO "${TAO_INCLUDE_FOLDERS}") endif() if("xml" IN_LIST FEATURES) file(RELATIVE_PATH PROJECT_SUBPATH_XML ${SOURCE_PATH} ${ACE_ROOT}/ACEXML/ACEXML.sln) vcpkg_install_msbuild( SOURCE_PATH ${SOURCE_PATH} PROJECT_SUBPATH ${PROJECT_SUBPATH_XML} LICENSE_SUBPATH COPYING PLATFORM ${MSBUILD_PLATFORM} SKIP_CLEAN ) set(ACEXML_INCLUDE_FOLDERS "ACEXML/common" "ACEXML/parser/parser") install_includes(${SOURCE_COPY_PATH} "${ACEXML_INCLUDE_FOLDERS}") endif() # Remove dlls without any export if("tao" IN_LIST FEATURES OR "xml" IN_LIST FEATURES) if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) file(REMOVE ${CURRENT_PACKAGES_DIR}/bin/ACEXML_XML_Svc_Conf_Parser.dll ${CURRENT_PACKAGES_DIR}/bin/ACEXML_XML_Svc_Conf_Parser.pdb ${CURRENT_PACKAGES_DIR}/debug/bin/ACEXML_XML_Svc_Conf_Parserd.dll ${CURRENT_PACKAGES_DIR}/debug/bin/ACEXML_XML_Svc_Conf_Parserd_dll.pdb) endif() endif() vcpkg_clean_msbuild() elseif(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_OSX) FIND_PROGRAM(MAKE make) IF (NOT MAKE) MESSAGE(FATAL_ERROR "MAKE not found") ENDIF () if("ssl" IN_LIST FEATURES) list(APPEND _ace_makefile_macros "ssl=1") endif() if (VCPKG_LIBRARY_LINKAGE STREQUAL "static") list(APPEND _ace_makefile_macros "static_libs_only=1") 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}) get_filename_component(WORKING_DIR ${WORKSPACE} DIRECTORY) set(ENV{PWD} ${WORKING_DIR}) message(STATUS "Building ${TARGET_TRIPLET}-dbg") vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} "debug=1" "optimize=0" "-j${VCPKG_CONCURRENCY}" WORKING_DIRECTORY ${WORKING_DIR} LOGNAME make-${TARGET_TRIPLET}-dbg ) if("xml" IN_LIST FEATURES) vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} "debug=1" "optimize=0" "-j${VCPKG_CONCURRENCY}" WORKING_DIRECTORY ${WORKING_DIR}/ACEXML LOGNAME make-xml-${TARGET_TRIPLET}-dbg ) endif() message(STATUS "Building ${TARGET_TRIPLET}-dbg done") message(STATUS "Packaging ${TARGET_TRIPLET}-dbg") vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} install WORKING_DIRECTORY ${WORKING_DIR} LOGNAME install-${TARGET_TRIPLET}-dbg ) if("xml" IN_LIST FEATURES) vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} install WORKING_DIRECTORY ${WORKING_DIR}/ACEXML LOGNAME install-xml-${TARGET_TRIPLET}-dbg ) endif() file(COPY ${CURRENT_PACKAGES_DIR}/lib DESTINATION ${CURRENT_PACKAGES_DIR}/debug) file(GLOB _pkg_components ${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/*.pc) foreach(_pkg_comp ${_pkg_components}) file(READ ${_pkg_comp} _content) string(REPLACE "libdir=${CURRENT_PACKAGES_DIR}/lib" "libdir=${CURRENT_PACKAGES_DIR}/debug/lib" _content ${_content}) file(WRITE ${_pkg_comp} ${_content}) endforeach() message(STATUS "Packaging ${TARGET_TRIPLET}-dbg done") vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} realclean WORKING_DIRECTORY ${WORKING_DIR} LOGNAME realclean-${TARGET_TRIPLET}-dbg ) if("xml" IN_LIST FEATURES) vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} realclean WORKING_DIRECTORY ${WORKING_DIR}/ACEXML LOGNAME realclean-xml-${TARGET_TRIPLET}-dbg ) endif() message(STATUS "Building ${TARGET_TRIPLET}-rel") vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} "-j${VCPKG_CONCURRENCY}" WORKING_DIRECTORY ${WORKING_DIR} LOGNAME make-${TARGET_TRIPLET}-rel ) if("xml" IN_LIST FEATURES) vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} "-j${VCPKG_CONCURRENCY}" WORKING_DIRECTORY ${WORKING_DIR}/ACEXML LOGNAME make-xml-${TARGET_TRIPLET}-rel ) endif() message(STATUS "Building ${TARGET_TRIPLET}-rel done") message(STATUS "Packaging ${TARGET_TRIPLET}-rel") vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} install WORKING_DIRECTORY ${WORKING_DIR} LOGNAME install-${TARGET_TRIPLET}-rel ) if("xml" IN_LIST FEATURES) vcpkg_execute_build_process( COMMAND make ${_ace_makefile_macros} install WORKING_DIRECTORY ${WORKING_DIR}/ACEXML LOGNAME install-xml-${TARGET_TRIPLET}-rel ) endif() if("tao" IN_LIST FEATURES) file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools) file(RENAME ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/tools/${PORT}) endif() message(STATUS "Packaging ${TARGET_TRIPLET}-rel done") # Restore `PWD` environment variable set($ENV{PWD} _prev_env) # Handle copyright file(INSTALL ${ACE_ROOT}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/share/ace/bin/MakeProjectCreator") file(REMOVE "${CURRENT_PACKAGES_DIR}/share/ace/ace-devel.sh") endif() vcpkg_fixup_pkgconfig()