Index: client/1.0/neutral/pkgd.eagle ================================================================== --- client/1.0/neutral/pkgd.eagle +++ client/1.0/neutral/pkgd.eagle @@ -278,10 +278,32 @@ variable viaInstall; # DEFAULT: false if {![info exists viaInstall]} then { set viaInstall false } + + # + # NOTE: The command to use when attempting to verify that Mono and its + # associated runtimes are installed locally. Generally, this is + # not needed on Windows machines. + # + variable monoInstalledCommand; # DEFAULT: mono --version + + if {![info exists monoInstalledCommand]} then { + set monoInstalledCommand {mono --version} + } + + # + # NOTE: The regular expression pattern used when attempting to verify + # that Mono and its associated runtimes are installed locally. + # Generally, this is not needed on Windows machines. + # + variable monoInstalledPattern; # DEFAULT: ^Mono JIT compiler version \d+\. + + if {![info exists monoInstalledPattern]} then { + set monoInstalledPattern {^Mono JIT compiler version \d+\.} + } } # # NOTE: This procedure modifies the URN variables used by the package # downloader client so that one or more alternative (private?) @@ -765,10 +787,66 @@ addToAutoPath $language $directory return true } + # + # NOTE: This procedure attempts to verify that an instance of Mono and its + # associated runtimes are installed locally. There are no arguments. + # The return value is non-zero if Mono appears to be installed and + # available for use; otherwise, the return value is zero. + # + proc isMonoInstalled {} { + variable monoInstalledCommand + variable monoInstalledPattern + + if {[isEagle]} then { + if {[catch { + eval exec -success Success $monoInstalledCommand + } result]} then { + return false + } + } else { + if {[catch { + eval exec $monoInstalledCommand + } result]} then { + return false + } + } + + if {![info exists result] || \ + ![regexp -- $monoInstalledPattern $result]} then { + return false + } + + return true + } + + # + # NOTE: This procedure attempts to verify that some runtime is available to + # run CLR applications locally (e.g. the .NET Framework or Mono JIT). + # There are no arguments. The return value is non-zero if it appears + # that CLR applications should be runnable locally; otherwise, the + # return value is zero. + # + proc canUseMsilPlatform {} { + if {[isWindows]} then { + # + # HACK: Assume that all Windows operating systems have a compatible + # version of the .NET Framework is installed -AND- that it can + # be used to run any CLR application. + # + return true + } else { + # + # HACK: On all other platforms, assume that Mono can be used to run + # any CLR application. + # + return [isMonoInstalled] + } + } + # # NOTE: This procedure verifies the combination of language and version # specified by the caller. The language argument must be one of the # literal strings "eagle", "tcl", or "client". The version argument # must be one of the literal strings "8.4", "8.5", or "8.6" when the @@ -969,15 +1047,31 @@ if {[string length $varName] > 0} then { upvar 1 $varName newPlatform } # - # NOTE: Check the current platform and the neutral platform, in that - # order, to see if that platform is supported by the package - # being saught. If so, return that platform. + # NOTE: First, check the current platform and the neutral platform, + # in that order, to see if that platform is supported by the + # package being saught. + # + set thesePlatforms [list [getPlatform] neutral] + + # + # NOTE: Next, optionally, allow the "msil" platform to be checked. + # Currently, this is always applicable on Windows; however, + # on all other platforms this depends on having Mono and its + # associated runtimes installed locally. + # + if {[canUseMsilPlatform]} then { + lappend thesePlatforms msil + } + + # + # NOTE: Check each applicable platform, in order, stopping when a + # supported platform is found for the package being saught. # - foreach thisPlatform [list [getPlatform] msil neutral] { + foreach thisPlatform $thesePlatforms { if {[lsearch -exact $platforms $thisPlatform] != -1} then { set newPlatform $thisPlatform return } } @@ -987,11 +1081,18 @@ # that are compatible with the current one for the specified # package. # error "could not automatically detect platform" } - msil - + msil { + # + # NOTE: Forbid the "msil" platform if it is not available for use. + # + if {![canUseMsilPlatform]} then { + error "platform \"msil\" does not appear to be supported" + } + } neutral - win32-arm - win32-x86 - win64-arm64 - win64-ia64 - Index: client/1.0/neutral/pkgd.eagle.asc ================================================================== --- client/1.0/neutral/pkgd.eagle.asc +++ client/1.0/neutral/pkgd.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJZVxrbAAoJEFAslq9JXcLZCP4QAJjq7pRySCfj2EWX/QY2yuyV -SVaHH4gN8V0BijiMTQGABqqkH3wRe/xu1jwmrf5oneo6foFKbUcG4rvL03UYXt4k -So7uvsz7uHgTfJYRzoRogudxCxf0W0uKUJiBRWH0qoK9IRsqPJDrKS64l6uBS9NV -LUyXuUhFJ9bUAFfB7vdwGYxfsI4GEqCp39tngR9Ld6I9pQvxBQzxNS5uXp7texGs -Tj57bvTw0ln29NKmO9Ind0/5++PK3zbDtMY1QfGCUx0LDwXSq/9GfIjk/kRtgyTx -iePynnjAE22hhm9n6pzBsF93RyB/2Kq3361PIltaiKykjLz6JsH7riIIZQc1Bjx3 -1DUkg3Wvi+3y3KVa0Dy/GVHetYAEQgnqFY5lEDYMcnNhRII6fVPtTdBX6DPuYSZY -7NujpRYQWlRWXpneN1t/misDA4TT6Gz7QnpSxBx9/gexKNq/GnV3mog2PH0EEvXU -Nl8iJgTIN/uPorF3NOJwcy6eTgqA1AuZoidGLdGq26AmLP+9NUsnsMxu+ztcgHzd -ESsrspMxHcTEdIKAtYffJU0tDZ4r8D1g18QSDAiWh1X/Y8REB5FQT4ANQqfOHY7+ -kbiltBbbuljQk30nuwnfKRoimt19fusUs/yDKu6lXAWaVxg03KrmG0iuuFqGj1oO -dcPxc8BGH6EYfRxry3GT -=EWC/ +iQIcBAABCAAGBQJZWATvAAoJEFAslq9JXcLZmO8QAIsDwUkYGbRhIWh0igBLrjDk +RjiaWFdb96iHGcIftId6r9N+WTBLgqHk52eNa72HbAXIBL/cJ9qx4dj3k4QduP7r +h9La3yyzYsODrVWDODvd/v4OP9nSsizQUml10cE2j4B7Y52czYGm5NrvUi9bjUkX +AEkCowLjdVQmSOW/3sNqyU7TjbwdP/qRrKRvLwr6emxWb58f79BdEd7cXk4M2eT8 +adSfI05qMwgw8h/0RIoSrluEHebrii/d/Q1Vp4Pm1gEBQ4v0m8Q4jqtMZpBX1KNw +umDdeCtjE1yihVxJdsR7HdaxpB9yZkqlFfSJpr5d2Dxx202f4QuYzL6Cy3LLxRuK +dMwhDOc2wltYyprD4Op0yInu0DcUg7nK2PlZ7LAIdoX11EcZLo2JCMVDtOVcQE9e +IqVEPlm62ejrtdJ2nbjBWBvsZU8tfjlaA202OLJfpZ9Xu9QIYEjNa1rPqARwUY4G +7LPGHZV4G8euE8mMMCR5XMeUl4wvE5OKdMDjPTatq5s1cei83JM9qvZi2xvpVN1d +KpF0C8GUbv4Z+lNcFEp5eEtf4/38p49CLU9gFFcgj0Ms1yHFBYqCm7TrN9lG527y +Txu+yArv22IdDrfWduVaw8c/tRCuyP7zl3hPb8PKAhvbwBXKXggiRocCT0bWlGjg +SVkO4hsVMeXzY7LatZ1R +=Oki/ -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgd.eagle.harpy ================================================================== --- client/1.0/neutral/pkgd.eagle.harpy +++ client/1.0/neutral/pkgd.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - bbe901ce-bae8-4b6e-b6c3-5b302bf7960a + dd78003f-f517-41af-b923-bb517e62b42a SHA512 Script - 2017-07-01T03:45:08.9665235Z + 2017-07-01T20:23:53.1237500Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgd.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgd.eagle.harpy.asc +++ client/1.0/neutral/pkgd.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJZVxreAAoJEFAslq9JXcLZgmsP/jCdQ3/yzbpSuU4pKdf4SgT5 -iAuRb5hWGkdw/pZfjmY54pXqGSwYBCpobTqBa4m6F4CPpKBCzVakramF/4FAFNc7 -iEM8odXntWuH7kDjR1T4DoYSOHiDa420/Xhnm0XglxyBBINlrLJlw4ZBPcm74VQm -Uq+YOh8zLG1JzM8m86eBCyTeWV+5ofnrkclmqrJQArOAJhn4OMtIxPVHJuBB9x5a -YzD9kYBW/+qsZAkBWZxEX7ezB5F8krk0P1O4MVEr0UxPD5DD0RJDRUhR9HdLMaHw -Z5zqOIjAo89hm0zKc1Q7rigdMODl/H0NoZnhU0rn1PfZ2WqRwhq/M9uf96CSxFE1 -j1EiLHM597Y5yG34mzshx5J2pg+83INMlRZQe9CCTsO9nWZd5sMO46in6hRB95Tz -KLp1tJQ8d4Zn1rglmQMdDjLfnQbUhEEYSx0NKLu2JqH01mGrGmiyG60pQa/UQhKZ -mqrEBEqMB301/lvvF7u75I255M/kQiiDLCiHZIqwFguF8rPVfI+ePELBSJnkGOev -fC0vfHdMAkTxArlGc347x8aE5VO8cBmmseyadKhNK3yNWCme29TrWXJC1y7z0EXA -WprzAa8M54LbquVneUDbI9mOEDzYqAh86r6e+EApROw37xEN0+HWN7lOvwOcg5MN -QCiuSgwzvpk4lKtkzaDl -=ZMhV +iQIcBAABCAAGBQJZWATxAAoJEFAslq9JXcLZ4JcP/Aulat5GGiww8yUwlMmK6Yus +b8da/X31mGpYffqNdYGgLgjbK2/SU/kcbl3X5r3rxjlSmsKmoL+AfjQP2W0a97xP +Wy4t52l3quybL5Cb+luztBLoqR4TaSgKuRtDW85GKFIpBRAmRvJtzQ8oauy8nhva +QQlJVwF+SKUpj5Sr0ntxDYrtYni0ByoWV2eprdB276xsYsSkZGMzKlOakhVJVJIs +zQ6tcPE+x50zqw8D1hoT3o9Vc4itTeIU6/IhAST2tBUrulq443XRo25kxXTw9xeS +R91VvuyfeMRXy6HguoNmE+rtihBSwZepNRjbAMWz+QmXByyM1bWefffr0N7TMROu +jOXLW1vmF3ckEERKfcKcHhqC88UFxBrnhTJegCZPu+CV9PFb1GOCzS3Uy1oA9nBA +pgiBT9TwETplH4WRD+8nX6uU+oXJ/3Wxud8pXM22DmFcQ3aeajwA8Me4GEomH4k+ +KZMFBRZKU1EgwURqi6XWnXyO20r4OMXZgakaritXX9Ryp8ZJ91Ku37yZKnonN68A +vEm2PpRpWOxXyMFThT58upfY0QcgTHFESrytuRPhhLWD5N+3AqJyg7aRnksAx+DP +sNBCuDzkFT5B71nqk9SWebmkIvdey/uZJTaI8zS/Rr8hZ0BqsV2Qav0qg5S0QeEj +1cvKa5DDkdKJWLzgO9MF +=GowX -----END PGP SIGNATURE-----