@@ -3066,23 +3066,28 @@ let count f arr =
30663066 Array.fold( fun x y -> x+ f y) 0x0 arr
30673067
30683068module FileSystemUtilites =
3069+ open System
30693070open System.Reflection
3071+ open System.Globalization
30703072#if FX_ RESHAPED_ REFLECTION
30713073open Microsoft.FSharp .Core .ReflectionAdapters
30723074#endif
30733075let progress = try System.Environment.GetEnvironmentVariable( " FSharp_DebugSetFilePermissions" ) <> null with _ -> false
3074- let setExecutablePermission filename =
3076+ let setExecutablePermission ( filename : string ) =
30753077
30763078#if ENABLE_ MONO_ SUPPORT
30773079if runningOnMonothen
30783080try
30793081let monoPosix = Assembly.Load( " Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" )
30803082if progressthen eprintf" loading type Mono.Unix.UnixFileInfo...\n "
30813083let monoUnixFileInfo = monoPosix.GetType( " Mono.Unix.UnixFileSystemInfo" )
3082- let fileEntry = monoUnixFileInfo.InvokeMember( " GetFileSystemEntry" , ( BindingFlags.InvokeMethod||| BindingFlags.Static||| BindingFlags.Public), null , null , [| box filename|], System.Globalization.CultureInfo.InvariantCulture)
3083- let prevPermissions = monoUnixFileInfo.InvokeMember( " get_FileAccessPermissions" , ( BindingFlags.InvokeMethod||| BindingFlags.Instance||| BindingFlags.Public), null , fileEntry, [| |], System.Globalization.CultureInfo.InvariantCulture) |> unbox< int>
3084+ let fileEntry = monoUnixFileInfo.InvokeMember( " GetFileSystemEntry" , ( BindingFlags.InvokeMethod||| BindingFlags.Static||| BindingFlags.Public), null , null , [| box filename|], CultureInfo.InvariantCulture)
3085+ let prevPermissions = monoUnixFileInfo.InvokeMember( " get_FileAccessPermissions" , ( BindingFlags.InvokeMethod||| BindingFlags.Instance||| BindingFlags.Public), null , fileEntry, [| |], CultureInfo.InvariantCulture)
3086+ let prevPermissionsValue = prevPermissions|> unbox< int>
3087+ let newPermissionsValue = prevPermissionsValue||| 0x000001ED
3088+ let newPermissions = Enum.ToObject( prevPermissions.GetType(), newPermissionsValue)
30843089// Add 0x000001ED (UserReadWriteExecute, GroupReadExecute, OtherReadExecute) to the access permissions on Unix
3085- monoUnixFileInfo.InvokeMember( " set_FileAccessPermissions" , ( BindingFlags.InvokeMethod||| BindingFlags.Instance||| BindingFlags.Public), null , fileEntry, [| box ( prevPermissions ||| 0x000001ED ) |], System.Globalization. CultureInfo.InvariantCulture) |> ignore
3090+ monoUnixFileInfo.InvokeMember( " set_FileAccessPermissions" , ( BindingFlags.InvokeMethod||| BindingFlags.Instance||| BindingFlags.Public), null , fileEntry, [| newPermissions |], CultureInfo.InvariantCulture) |> ignore
30863091with e->
30873092if progressthen eprintf" failure:%s ...\n " ( e.ToString())
30883093// Fail silently