Add OSiOS, and define and use platformUsesFrameworks; part of #7720
authorIan Lynagh <ian@well-typed.com>
Sat, 2 Mar 2013 13:57:10 +0000 (13:57 +0000)
committerIan Lynagh <ian@well-typed.com>
Sat, 2 Mar 2013 13:59:03 +0000 (13:59 +0000)
compiler/ghci/Linker.lhs
compiler/main/DriverPipeline.hs
compiler/utils/Platform.hs

index 03189e7..151c5cb 100644 (file)
@@ -303,12 +303,12 @@ reallyInitDynLinker dflags =
 
           -- (e) Link any MacOS frameworks
         ; let platform = targetPlatform dflags
-        ; let framework_paths = case platformOS platform of
-                                OSDarwin -> frameworkPaths dflags
-                                _        -> []
-        ; let frameworks = case platformOS platform of
-                           OSDarwin -> cmdlineFrameworks dflags
-                           _        -> []
+        ; let framework_paths = if platformUsesFrameworks platform
+                                then frameworkPaths dflags
+                                else []
+        ; let frameworks = if platformUsesFrameworks platform
+                           then cmdlineFrameworks dflags
+                           else []
           -- Finally do (c),(d),(e)
         ; let cmdline_lib_specs = [ l | Just l <- classified_ld_inputs ]
                                ++ libspecs
@@ -389,13 +389,12 @@ preloadLib dflags lib_paths framework_paths lib_spec
                       Just mm -> preloadFailed mm lib_paths lib_spec
 
           Framework framework ->
-              case platformOS (targetPlatform dflags) of
-              OSDarwin ->
-                do maybe_errstr <- loadFramework framework_paths framework
-                   case maybe_errstr of
-                      Nothing -> maybePutStrLn dflags "done"
-                      Just mm -> preloadFailed mm framework_paths lib_spec
-              _ -> panic "preloadLib Framework"
+              if platformUsesFrameworks (targetPlatform dflags)
+              then do maybe_errstr <- loadFramework framework_paths framework
+                      case maybe_errstr of
+                         Nothing -> maybePutStrLn dflags "done"
+                         Just mm -> preloadFailed mm framework_paths lib_spec
+              else panic "preloadLib Framework"
 
   where
     platform = targetPlatform dflags
@@ -1156,9 +1155,9 @@ load_dyn dll = do r <- loadDLL dll
 
 loadFrameworks :: Platform -> InstalledPackageInfo_ ModuleName -> IO ()
 loadFrameworks platform pkg
-    = case platformOS platform of
-      OSDarwin -> mapM_ load frameworks
-      _        -> return ()
+    = if platformUsesFrameworks platform
+      then mapM_ load frameworks
+      else return ()
   where
     fw_dirs    = Packages.frameworkDirs pkg
     frameworks = Packages.frameworks pkg
index 68957ca..0d86dcb 100644 (file)
@@ -1100,14 +1100,12 @@ runPhase cc_phase input_fn dflags
              else getPackageExtraCcOpts dflags pkgs
 
         framework_paths <-
-            case platformOS platform of
-            OSDarwin ->
-                do pkgFrameworkPaths <- liftIO $ getPackageFrameworkPath dflags pkgs
-                   let cmdlineFrameworkPaths = frameworkPaths dflags
-                   return $ map ("-F"++)
-                                (cmdlineFrameworkPaths ++ pkgFrameworkPaths)
-            _ ->
-                return []
+            if platformUsesFrameworks platform
+            then do pkgFrameworkPaths <- liftIO $ getPackageFrameworkPath dflags pkgs
+                    let cmdlineFrameworkPaths = frameworkPaths dflags
+                    return $ map ("-F"++)
+                                 (cmdlineFrameworkPaths ++ pkgFrameworkPaths)
+            else return []
 
         let split_objs = gopt Opt_SplitObjs dflags
             split_opt | hcc && split_objs = [ "-DUSE_SPLIT_MARKERS" ]
@@ -1640,9 +1638,9 @@ mkNoteObjsToLinkIntoBinary dflags dep_packages = do
 getLinkInfo :: DynFlags -> [PackageId] -> IO String
 getLinkInfo dflags dep_packages = do
    package_link_opts <- getPackageLinkOpts dflags dep_packages
-   pkg_frameworks <- case platformOS (targetPlatform dflags) of
-                     OSDarwin -> getPackageFrameworks dflags dep_packages
-                     _        -> return []
+   pkg_frameworks <- if platformUsesFrameworks (targetPlatform dflags)
+                     then getPackageFrameworks dflags dep_packages
+                     else return []
    let extra_ld_inputs = ldInputs dflags
    let
       link_info = (package_link_opts,
@@ -1787,38 +1785,31 @@ linkBinary dflags o_files dep_packages = do
     pkg_link_opts <- getPackageLinkOpts dflags dep_packages
 
     pkg_framework_path_opts <-
-        case platformOS platform of
-        OSDarwin ->
-            do pkg_framework_paths <- getPackageFrameworkPath dflags dep_packages
-               return $ map ("-F" ++) pkg_framework_paths
-        _ ->
-            return []
+        if platformUsesFrameworks platform
+        then do pkg_framework_paths <- getPackageFrameworkPath dflags dep_packages
+                return $ map ("-F" ++) pkg_framework_paths
+        else return []
 
     framework_path_opts <-
-        case platformOS platform of
-        OSDarwin ->
-            do let framework_paths = frameworkPaths dflags
-               return $ map ("-F" ++) framework_paths
-        _ ->
-            return []
+        if platformUsesFrameworks platform
+        then do let framework_paths = frameworkPaths dflags
+                return $ map ("-F" ++) framework_paths
+        else return []
 
     pkg_framework_opts <-
-        case platformOS platform of
-        OSDarwin ->
-            do pkg_frameworks <- getPackageFrameworks dflags dep_packages
-               return $ concat [ ["-framework", fw] | fw <- pkg_frameworks ]
-        _ ->
-            return []
+        if platformUsesFrameworks platform
+        then do pkg_frameworks <- getPackageFrameworks dflags dep_packages
+                return $ concat [ ["-framework", fw] | fw <- pkg_frameworks ]
+        else return []
 
     framework_opts <-
-        case platformOS platform of
-        OSDarwin ->
-            do let frameworks = cmdlineFrameworks dflags
-               -- reverse because they're added in reverse order from
-               -- the cmd line:
-               return $ concat [ ["-framework", fw] | fw <- reverse frameworks ]
-        _ ->
-            return []
+        if platformUsesFrameworks platform
+        then do let frameworks = cmdlineFrameworks dflags
+                -- reverse because they're added in reverse order from
+                -- the cmd line:
+                return $ concat [ ["-framework", fw]
+                                | fw <- reverse frameworks ]
+        else return []
 
         -- probably _stub.o files
     let extra_ld_inputs = ldInputs dflags
index 090ce41..9e21326 100644 (file)
@@ -10,7 +10,8 @@ module Platform (
         ArmABI(..),
 
         target32Bit,
-        osElfTarget
+        osElfTarget,
+        platformUsesFrameworks,
 )
 
 where
@@ -60,6 +61,7 @@ data OS
         = OSUnknown
         | OSLinux
         | OSDarwin
+        | OSiOS
         | OSSolaris2
         | OSMinGW32
         | OSFreeBSD
@@ -107,6 +109,7 @@ osElfTarget OSOpenBSD   = True
 osElfTarget OSNetBSD    = True
 osElfTarget OSSolaris2  = True
 osElfTarget OSDarwin    = False
+osElfTarget OSiOS       = False
 osElfTarget OSMinGW32   = False
 osElfTarget OSKFreeBSD  = True
 osElfTarget OSHaiku     = True
@@ -120,3 +123,11 @@ osElfTarget OSUnknown   = False
  -- portability, otherwise we have to answer this question for every
  -- new platform we compile on (even unreg).
 
+osUsesFrameworks :: OS -> Bool
+osUsesFrameworks OSDarwin = True
+osUsesFrameworks OSiOS    = True
+osUsesFrameworks _        = False
+
+platformUsesFrameworks :: Platform -> Bool
+platformUsesFrameworks = osUsesFrameworks . platformOS
+