mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-17 14:47:55 +08:00
47633daa65
Avoid wrong use of popular but ambiguous variables (`WIN32` etc.) in scripts and portfiles by detection in CI. Sometimes the variables are used wrongly, and sometimes this isn't caught in PR review. This PR tries to catch those variables (when in the active code path in script mode). [This can happen to every contributor](https://github.com/microsoft/vcpkg/pull/34356#discussion_r1360074122), even if he/she knows the rules ... vcpkg is raising the bar higher than usual, having to deal with targets and hosts even in script mode. (`b2-options.cmake` (boost fragment) shows where we get if we don't pay attention: the same code being used in script mode (`WIN32` meaning host) and in project mode (`WIN32` meaning target).) The new check doesn't break any user builds because it relies on command line options. However it changes the ABI hashes.
145 lines
5.2 KiB
CMake
145 lines
5.2 KiB
CMake
vcpkg_check_linkage(ONLY_DYNAMIC_CRT)
|
|
if(VCPKG_TARGET_IS_WINDOWS)
|
|
set(VCPKG_POLICY_DLLS_IN_STATIC_LIBRARY enabled) # some parts of this port can only build as a shared library.
|
|
endif()
|
|
|
|
vcpkg_from_gitlab(
|
|
GITLAB_URL https://gitlab.freedesktop.org
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO mesa/mesa
|
|
REF mesa-${VERSION}
|
|
SHA512 202b2b20ffe7d357570a0d0bf0b53dc246b3e903738e8c8a000c5f61109ab5233d62de217444f49fd62927f8c418d929e5a2a5a800d1e39e334d50eb090e850c
|
|
FILE_DISAMBIGUATOR 1
|
|
HEAD_REF master
|
|
)
|
|
|
|
x_vcpkg_get_python_packages(PYTHON_VERSION "3" OUT_PYTHON_VAR "PYTHON3" PACKAGES setuptools mako)
|
|
get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
|
|
vcpkg_add_to_path(PREPEND "${PYTHON3_DIR}")
|
|
|
|
vcpkg_find_acquire_program(FLEX)
|
|
get_filename_component(FLEX_DIR "${FLEX}" DIRECTORY)
|
|
vcpkg_add_to_path(PREPEND "${FLEX_DIR}")
|
|
vcpkg_find_acquire_program(BISON)
|
|
get_filename_component(BISON_DIR "${BISON}" DIRECTORY)
|
|
vcpkg_add_to_path(PREPEND "${BISON_DIR}")
|
|
|
|
if(CMAKE_HOST_WIN32) # WIN32 HOST probably has win_flex and win_bison!
|
|
if(NOT EXISTS "${FLEX_DIR}/flex${VCPKG_HOST_EXECUTABLE_SUFFIX}")
|
|
if(FLEX_DIR MATCHES "${DOWNLOADS}")
|
|
file(CREATE_LINK "${FLEX}" "${FLEX_DIR}/flex${VCPKG_HOST_EXECUTABLE_SUFFIX}")
|
|
else()
|
|
message(FATAL_ERROR "${PORT} requires flex being named flex on windows and not win_flex!\n(Can be solved by creating a simple link from win_flex to flex)")
|
|
endif()
|
|
endif()
|
|
if(NOT EXISTS "${BISON_DIR}/BISON${VCPKG_HOST_EXECUTABLE_SUFFIX}")
|
|
if(BISON_DIR MATCHES "${DOWNLOADS}")
|
|
file(CREATE_LINK "${BISON}" "${BISON_DIR}/bison${VCPKG_HOST_EXECUTABLE_SUFFIX}")
|
|
else()
|
|
message(FATAL_ERROR "${PORT} requires bison being named bison on windows and not win_bison!\n(Can be solved by creating a simple link from win_bison to bison)")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# For features https://github.com/pal1000/mesa-dist-win should be probably studied a bit more.
|
|
list(APPEND MESA_OPTIONS -Dzstd=enabled)
|
|
list(APPEND MESA_OPTIONS -Dvalgrind=disabled)
|
|
list(APPEND MESA_OPTIONS -Dshared-llvm=disabled)
|
|
list(APPEND MESA_OPTIONS -Dcpp_rtti=true)
|
|
|
|
if("offscreen" IN_LIST FEATURES)
|
|
list(APPEND MESA_OPTIONS -Dosmesa=true)
|
|
else()
|
|
list(APPEND MESA_OPTIONS -Dosmesa=false)
|
|
endif()
|
|
|
|
if("llvm" IN_LIST FEATURES)
|
|
list(APPEND MESA_OPTIONS -Dllvm=enabled)
|
|
else()
|
|
list(APPEND MESA_OPTIONS -Dllvm=disabled)
|
|
endif()
|
|
|
|
set(use_gles OFF)
|
|
if("gles1" IN_LIST FEATURES)
|
|
list(APPEND MESA_OPTIONS -Dgles1=enabled)
|
|
set(use_gles ON)
|
|
else()
|
|
list(APPEND MESA_OPTIONS -Dgles1=disabled)
|
|
endif()
|
|
if("gles2" IN_LIST FEATURES)
|
|
list(APPEND MESA_OPTIONS -Dgles2=enabled)
|
|
set(use_gles ON)
|
|
else()
|
|
list(APPEND MESA_OPTIONS -Dgles2=disabled)
|
|
endif()
|
|
|
|
if(use_gles)
|
|
list(APPEND MESA_OPTIONS -Dshared-glapi=enabled) # shared GLAPI required when building two or more of the following APIs - gles1 gles2
|
|
else()
|
|
list(APPEND MESA_OPTIONS -Dshared-glapi=auto)
|
|
endif()
|
|
|
|
if("egl" IN_LIST FEATURES)
|
|
list(APPEND MESA_OPTIONS -Degl=enabled)
|
|
else()
|
|
list(APPEND MESA_OPTIONS -Degl=disabled)
|
|
endif()
|
|
|
|
if(VCPKG_TARGET_IS_WINDOWS)
|
|
list(APPEND MESA_OPTIONS -Dplatforms=['windows'])
|
|
list(APPEND MESA_OPTIONS -Dmicrosoft-clc=disabled)
|
|
if(NOT VCPKG_TARGET_IS_MINGW)
|
|
set(VCPKG_CXX_FLAGS "/D_CRT_DECLARE_NONSTDC_NAMES ${VCPKG_CXX_FLAGS}")
|
|
set(VCPKG_C_FLAGS "/D_CRT_DECLARE_NONSTDC_NAMES ${VCPKG_C_FLAGS}")
|
|
endif()
|
|
endif()
|
|
|
|
vcpkg_configure_meson(
|
|
SOURCE_PATH "${SOURCE_PATH}"
|
|
OPTIONS
|
|
-Dgles-lib-suffix=_mesa
|
|
-Dbuild-tests=false
|
|
${MESA_OPTIONS}
|
|
ADDITIONAL_BINARIES
|
|
python=['${PYTHON3}','-I']
|
|
python3=['${PYTHON3}','-I']
|
|
)
|
|
vcpkg_install_meson()
|
|
vcpkg_fixup_pkgconfig()
|
|
|
|
file(REMOVE_RECURSE
|
|
"${CURRENT_PACKAGES_DIR}/debug/include"
|
|
"${CURRENT_PACKAGES_DIR}/debug/share"
|
|
# installed by egl-registry
|
|
"${CURRENT_PACKAGES_DIR}/include/KHR"
|
|
"${CURRENT_PACKAGES_DIR}/include/EGL"
|
|
# installed by opengl-registry
|
|
"${CURRENT_PACKAGES_DIR}/include/GL"
|
|
"${CURRENT_PACKAGES_DIR}/include/GLES"
|
|
"${CURRENT_PACKAGES_DIR}/include/GLES2"
|
|
"${CURRENT_PACKAGES_DIR}/include/GLES3"
|
|
)
|
|
file(GLOB remaining "${CURRENT_PACKAGES_DIR}/include/*")
|
|
if(NOT remaining)
|
|
# All headers to be provided by egl-registry and/or opengl-registry
|
|
set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled)
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include")
|
|
endif()
|
|
|
|
if(VCPKG_TARGET_IS_WINDOWS)
|
|
# opengl32.lib is already installed by port opengl.
|
|
# Mesa claims to provide a drop-in replacement of opengl32.dll.
|
|
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/lib/manual-link")
|
|
file(RENAME "${CURRENT_PACKAGES_DIR}/lib/opengl32.lib" "${CURRENT_PACKAGES_DIR}/lib/manual-link/opengl32.lib")
|
|
if(NOT VCPKG_BUILD_TYPE)
|
|
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/lib/manual-link")
|
|
file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/opengl32.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/manual-link/opengl32.lib")
|
|
endif()
|
|
endif()
|
|
|
|
if(FEATURES STREQUAL "core")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug")
|
|
endif()
|
|
|
|
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/docs/license.rst")
|