Merge remote-tracking branch 'upstream/master' into more_tests

This commit is contained in:
Mike Waychison
2021-04-24 11:09:05 -07:00
2 changed files with 63 additions and 13 deletions
+50 -13
View File
@@ -544,7 +544,44 @@ fn find_cargo_target_dir() -> PathBuf {
out_dir
}
#[cfg(unix)]
fn copy_library_symlink(src_path: &Path, target_path: &Path) {
if let Ok(link_path) = fs::read_link(src_path) {
// Copy symlinks to:
// * target dir: as a product ship product of the build,
// * deps directory: as comment example testing doesn't pick up the library search path
// otherwise and fails.
let deps_path = target_path.join("deps");
for path in &[target_path, &deps_path] {
let dst_path = path.join(src_path.file_name().expect("Path missing filename"));
// Silently drop errors here, in case the symlink already exists.
let _ = std::os::unix::fs::symlink(&link_path, &dst_path);
}
}
}
#[cfg(not(unix))]
fn copy_library_symlink(src_path: &Path, target_path: &Path) {}
fn copy_library_file(src_path: &Path, target_path: &Path) {
// Copy the shared libs to:
// * target dir: as a product ship product of the build,
// * deps directory: as comment example testing doesn't pick up the library search path
// otherwise and fails.
let deps_path = target_path.join("deps");
for path in &[target_path, &deps_path] {
let dst_path = path.join(src_path.file_name().expect("Path missing filename"));
fs::copy(&src_path, &dst_path).expect(&format!(
"Failed to copy SDL2 dynamic library from {} to {}",
src_path.to_string_lossy(),
dst_path.to_string_lossy()
));
}
}
fn copy_dynamic_libraries(sdl2_compiled_path: &PathBuf, target_os: &str) {
let target_path = find_cargo_target_dir();
// Windows binaries do not embed library search paths, so successfully
// linking the DLL isn't sufficient to find it at runtime -- it must be
// either on PATH or in the current working directory when we run binaries
@@ -556,19 +593,19 @@ fn copy_dynamic_libraries(sdl2_compiled_path: &PathBuf, target_os: &str) {
let sdl2_bin_path = sdl2_compiled_path.join("bin");
let src_dll_path = sdl2_bin_path.join(sdl2_dll_name);
// Copy the dll to:
// * target dir: as a product ship product of the build,
// * deps directory: as comment example testing doesn't pick up the library search path
// otherwise and fails.
let target_path = find_cargo_target_dir();
let deps_path = target_path.join("deps");
for path in &[target_path, deps_path] {
let dst_dll_path = path.join(&sdl2_dll_name);
fs::copy(&src_dll_path, &dst_dll_path).expect(&format!(
"Failed to copy SDL2 dynamic library from {} to {}",
src_dll_path.to_string_lossy(),
dst_dll_path.to_string_lossy()
));
copy_library_file(&src_dll_path, &target_path);
} else if target_os != "emscripten" {
// Find all libraries build and copy them, symlinks included.
let lib_path = sdl2_compiled_path.join("lib");
for entry in std::fs::read_dir(&lib_path).expect("Couldn't readdir lib") {
let entry = entry.expect("Error looking at lib dir");
if let Ok(file_type) = entry.file_type() {
if file_type.is_symlink() {
copy_library_symlink(&entry.path(), &target_path);
} else if file_type.is_file() {
copy_library_file(&entry.path(), &target_path)
}
}
}
}
}
+13
View File
@@ -676,6 +676,19 @@ impl VideoSubsystem {
}
}
#[doc(alias = "SDL_GetDisplayUsableBounds")]
pub fn display_usable_bounds(&self, display_index: i32) -> Result<Rect, String> {
let mut out = mem::MaybeUninit::uninit();
let result =
unsafe { sys::SDL_GetDisplayUsableBounds(display_index as c_int, out.as_mut_ptr()) };
if result == 0 {
let out = unsafe { out.assume_init() };
Ok(Rect::from_ll(out))
} else {
Err(get_error())
}
}
#[doc(alias = "SDL_GetNumDisplayModes")]
pub fn num_display_modes(&self, display_index: i32) -> Result<i32, String> {
let result = unsafe { sys::SDL_GetNumDisplayModes(display_index as c_int) };