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

[freeglut] Update to 3.2.2, fix X11 dependencies #23807

Merged
merged 13 commits into from
Apr 5, 2022
31 changes: 0 additions & 31 deletions ports/freeglut/gcc10.patch

This file was deleted.

61 changes: 16 additions & 45 deletions ports/freeglut/portfile.cmake
Original file line number Diff line number Diff line change
@@ -1,61 +1,39 @@
vcpkg_from_sourceforge(
OUT_SOURCE_PATH SOURCE_PATH
REPO freeglut/freeglut
REF 3.2.1
FILENAME "freeglut-3.2.1.tar.gz"
SHA512 aced4bbcd36269ce6f4ee1982e0f9e3fffbf18c94f785d3215ac9f4809b992e166c7ada496ed6174e13d77c0f7ef3ca4c57d8a282e96cbbe6ff086339ade3b08
REF 3.2.2
FILENAME "freeglut-3.2.2.tar.gz"
SHA512 190231951d314f854c244bd27f7c20488403bd0eecffc342097a2e3d1621cec87f6c209a77b4c153aabcf44697b4070227930e295ab74fb88953cbbf94fc81d9
PATCHES
use_targets_to_export_x11_dependency.patch
x11-dependencies-export.patch
macOS_Xquartz.patch
gcc10.patch
fix-debug-macro.patch
no_x64_enforcement.patch
windows-static-output-name.patch
)

if(NOT VCPKG_TARGET_IS_WINDOWS)
message("Freeglut currently requires the following libraries from the system package manager:\n opengl\n glu\n libx11\n xrandr\n xi\n xxf86vm\n\nThese can be installed on Ubuntu systems via apt-get install libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxrandr-dev libxxf86vm-dev\nOn macOS Xquartz is required.")
endif()

if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
set(FREEGLUT_STATIC OFF)
set(FREEGLUT_DYNAMIC ON)
else()
set(FREEGLUT_STATIC ON)
set(FREEGLUT_DYNAMIC OFF)
endif()

# Patch header
file(READ ${SOURCE_PATH}/include/GL/freeglut_std.h FREEGLUT_STDH)
string(REGEX REPLACE "\"freeglut_static.lib\""
"\"freeglut.lib\"" FREEGLUT_STDH "${FREEGLUT_STDH}")
string(REGEX REPLACE "\"freeglut_staticd.lib\""
"\"freeglutd.lib\"" FREEGLUT_STDH "${FREEGLUT_STDH}")
file(WRITE ${SOURCE_PATH}/include/GL/freeglut_std.h "${FREEGLUT_STDH}")
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" FREEGLUT_STATIC)
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" FREEGLUT_DYNAMIC)

vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
-DFREEGLUT_BUILD_STATIC_LIBS=${FREEGLUT_STATIC}
-DFREEGLUT_BUILD_SHARED_LIBS=${FREEGLUT_DYNAMIC}
-DFREEGLUT_BUILD_DEMOS=OFF
-DINSTALL_PDB=OFF # Installing pdbs failed on debug static. So, disable it and let vcpkg_copy_pdbs() do it
)

vcpkg_install_cmake()
vcpkg_fixup_cmake_targets(CONFIG_PATH lib/cmake/FreeGLUT)
vcpkg_cmake_install()
vcpkg_copy_pdbs()
vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/FreeGLUT)
vcpkg_fixup_pkgconfig()

# Rename static lib (otherwise it's incompatible with FindGLUT.cmake)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
if(NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL release)
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/freeglut_static.lib ${CURRENT_PACKAGES_DIR}/lib/freeglut.lib)
endif()
if(NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL debug)
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/freeglut_staticd.lib ${CURRENT_PACKAGES_DIR}/debug/lib/freeglutd.lib)
endif()
endif()

vcpkg_replace_string(
"${CURRENT_PACKAGES_DIR}/include/GL/freeglut_std.h"
"ifdef FREEGLUT_STATIC"
Expand All @@ -66,14 +44,7 @@ endif()
# Clean
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)

# Handle copyright
file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/glut")

vcpkg_copy_pdbs()
file(COPY ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})

if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/glut)
endif()

vcpkg_fixup_pkgconfig()
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${SOURCE_PATH}/COPYING" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
23 changes: 0 additions & 23 deletions ports/freeglut/use_targets_to_export_x11_dependency.patch

This file was deleted.

32 changes: 25 additions & 7 deletions ports/freeglut/vcpkg-cmake-wrapper.cmake
Original file line number Diff line number Diff line change
@@ -1,10 +1,28 @@
_find_package(${ARGS})
if(GLUT_FOUND)
find_library(XRANDR_LIBRARY NAMES xrandr Xrandr)
if(XRANDR_LIBRARY)
list(APPEND GLUT_LIBRARIES ${XRANDR_LIBRARY})
if(TARGET GLUT::GLUT)
set_property(TARGET GLUT::GLUT APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${XRANDR_LIBRARY})
endif()
if(GLUT_FOUND AND UNIX AND NOT ANDROID)
cmake_policy(PUSH)
cmake_policy(SET CMP0012 NEW)
cmake_policy(SET CMP0054 NEW)
cmake_policy(SET CMP0057 NEW)

find_package(X11)
# Since CMake 3.22, FindGLUT.cmake loads the glut pkg-config module.
# Before CMake 3.14, FindX11.cmake doesn't create imported targets.
# For X11, we simply assume shared linkage of system libs,
# so order and transitive usage requirements don't matter.
if(X11_Xrandr_FOUND AND NOT "Xrandr" IN_LIST GLUT_LIBRARIES)
list(APPEND GLUT_LIBRARIES "${X11_Xrandr_LIB}")
set_property(TARGET GLUT::GLUT APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${X11_Xrandr_LIB}")
endif()
# X11_xf86vmode_FOUND for CMake < 3.14
if((X11_xf86vm_FOUND OR X11_xf86vmode_FOUND) AND NOT "Xxf86vm" IN_LIST GLUT_LIBRARIES)
list(APPEND GLUT_LIBRARIES "${X11_Xxf86vm_LIB}")
set_property(TARGET GLUT::GLUT APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${X11_Xxf86vm_LIB}")
endif()
if(X11_Xi_FOUND AND NOT GLUT_Xi_LIBRARY AND NOT "Xi" IN_LIST GLUT_LIBRARIES)
list(APPEND GLUT_LIBRARIES "${X11_Xi_LIB}")
set_property(TARGET GLUT::GLUT APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${X11_Xi_LIB}")
endif()

cmake_policy(POP)
endif()
16 changes: 13 additions & 3 deletions ports/freeglut/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
{
"name": "freeglut",
"version-string": "3.2.1",
"port-version": 7,
"version": "3.2.2",
"description": "Open source implementation of GLUT with source and binary backwards compatibility.",
"homepage": "https://sourceforge.net/projects/freeglut/"
"homepage": "https://sourceforge.net/projects/freeglut/",
"license": null,
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}
]
}
29 changes: 29 additions & 0 deletions ports/freeglut/windows-static-output-name.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index aec0a27..73ccbdb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -429,7 +429,7 @@ IF(WIN32)
ENDIF()
IF(FREEGLUT_BUILD_STATIC_LIBS)
TARGET_COMPILE_DEFINITIONS(freeglut_static PUBLIC FREEGLUT_STATIC)
- IF(FREEGLUT_REPLACE_GLUT)
+ IF(1)
SET_TARGET_PROPERTIES(freeglut_static PROPERTIES OUTPUT_NAME ${LIBNAME})
ENDIF()
ENDIF()
diff --git a/include/GL/freeglut_std.h b/include/GL/freeglut_std.h
index a5efb3b..6bdcdfb 100644
--- a/include/GL/freeglut_std.h
+++ b/include/GL/freeglut_std.h
@@ -71,9 +71,9 @@
/* Link with Win32 static freeglut lib */
# if FREEGLUT_LIB_PRAGMAS
# if defined(NDEBUG) || !defined(_DEBUG)
-# pragma comment (lib, "freeglut_static.lib")
+# pragma comment (lib, "freeglut.lib")
# else
-# pragma comment (lib, "freeglut_staticd.lib")
+# pragma comment (lib, "freeglutd.lib")
# endif
# endif

63 changes: 63 additions & 0 deletions ports/freeglut/x11-dependencies-export.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6f403af..4ced28a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -72,7 +72,7 @@ SET(FREEGLUT_HEADERS
include/GL/freeglut_ext.h
include/GL/freeglut_std.h
)
-IF(FREEGLUT_REPLACE_GLUT)
+IF(TRUE)
LIST(APPEND FREEGLUT_HEADERS
include/GL/glut.h
)
@@ -319,23 +319,27 @@ IF(CMAKE_COMPILER_IS_GNUCC)
ENDIF()
ENDIF(CMAKE_COMPILER_IS_GNUCC)

+SET(xlibs_private "")
INCLUDE(CheckIncludeFiles)
IF(UNIX AND NOT(ANDROID OR BLACKBERRY OR FREEGLUT_WAYLAND))
FIND_PACKAGE(X11 REQUIRED)
- INCLUDE_DIRECTORIES(${X11_X11_INCLUDE_PATH})
- LIST(APPEND LIBS ${X11_X11_LIB})
+ LIST(APPEND LIBS X11::X11)
+ set(xlibs_private "-lX11")
IF(X11_Xrandr_FOUND)
SET(HAVE_X11_EXTENSIONS_XRANDR_H TRUE)
- LIST(APPEND LIBS ${X11_Xrandr_LIB})
+ LIST(APPEND LIBS X11::Xrandr)
+ STRING(APPEND xlibs_private " -lXrandr")
ENDIF()
- IF(X11_xf86vmode_FOUND)
+ IF(X11_Xxf86vm_FOUND)
SET(HAVE_X11_EXTENSIONS_XF86VMODE_H TRUE)
- LIST(APPEND LIBS ${X11_Xxf86vm_LIB})
+ LIST(APPEND LIBS X11::Xxf86vm)
+ STRING(APPEND xlibs_private " -lXxf86vm")
ENDIF()
IF(X11_Xinput_FOUND)
# Needed for multi-touch:
CHECK_INCLUDE_FILES("${X11_Xinput_INCLUDE_PATH}/X11/extensions/XInput2.h" HAVE_X11_EXTENSIONS_XINPUT2_H)
- LIST(APPEND LIBS ${X11_Xinput_LIB})
+ LIST(APPEND LIBS X11::Xi)
+ STRING(APPEND xlibs_private " -lXi")
ELSE()
MESSAGE(FATAL_ERROR "Missing X11's XInput.h (X11/extensions/XInput.h)")
ENDIF()
@@ -586,13 +590,13 @@ ELSEIF(FREEGLUT_GLES)
ELSEIF(FREEGLUT_WAYLAND)
SET(PC_LIBS_PRIVATE "-lwayland-client -lwayland-cursor -lwayland-egl -lGLESv2 -lGLESv1_CM -lEGL -lxkbcommon -lm")
ELSE()
- SET(PC_LIBS_PRIVATE "-lX11 -lXxf86vm -lXrandr -lGLESv2 -lGLESv1_CM -lEGL -lm")
+ SET(PC_LIBS_PRIVATE "${xlibs_private} -lGLESv2 -lGLESv1_CM -lEGL -lm")
ENDIF()
ELSE()
IF(FREEGLUT_WAYLAND)
SET(PC_LIBS_PRIVATE "-lwayland-client -lwayland-cursor -lwayland-egl -lGL -lxkbcommon -lm")
ELSE()
- SET(PC_LIBS_PRIVATE "-lX11 -lXxf86vm -lXrandr -lGL -lm")
+ SET(PC_LIBS_PRIVATE "${xlibs_private} -lGL -lm")
ENDIF()
ENDIF()
# Client applications need to define FreeGLUT GLES version to
4 changes: 2 additions & 2 deletions versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -2293,8 +2293,8 @@
"port-version": 1
},
"freeglut": {
"baseline": "3.2.1",
"port-version": 7
"baseline": "3.2.2",
"port-version": 0
},
"freeimage": {
"baseline": "3.18.0",
Expand Down
5 changes: 5 additions & 0 deletions versions/f-/freeglut.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "d42d0621d6b66bf281eadd576150badc825282a9",
"version": "3.2.2",
"port-version": 0
},
{
"git-tree": "bf1c06d0a07b6bc80a63c3825a4d136f5307a2f4",
"version-string": "3.2.1",
Expand Down