@@ -27,7 +27,7 @@ import Distribution.Simple.Test.LibV09 (stubName)
2727import Distribution.Types.Executable (exeName , Executable (.. ))
2828import Distribution.Types.Benchmark (Benchmark (.. ))
2929import Distribution.Types.UnqualComponentName (unUnqualComponentName )
30-
30+ import Distribution.Utils.Path ( makeSymbolicPath , getSymbolicPath )
3131
3232emarProgram :: Program
3333emarProgram = simpleProgram " emar"
@@ -36,31 +36,31 @@ buildEMCCLib :: PackageDescription -> LocalBuildInfo -> IO ()
3636buildEMCCLib desc lbi = do
3737 let verbosity = verbose
3838 -- get build dir
39- createDirectoryIfMissingVerbose verbosity True ((buildDir lbi) </> " emcc" )
39+ createDirectoryIfMissingVerbose verbosity True ((getSymbolicPath ( buildDir lbi) ) </> " emcc" )
4040 --
4141 case library desc of
4242 Just lib -> do
4343 -- Let's see if we are going to export anything. If not there is likely no point in compiling anything
4444 -- from the C code.
4545 names <- forM (jsSources . libBuildInfo $ lib) $ \ src -> do
46- unwords . concatMap (drop 2 . words ) . filter (isPrefixOf " // EMCC:EXPORTED_FUNCTIONS" ) . lines <$> readFile src
46+ unwords . concatMap (drop 2 . words ) . filter (isPrefixOf " // EMCC:EXPORTED_FUNCTIONS" ) . lines <$> readFile (getSymbolicPath src)
4747
4848 unless (null names) $ do
4949 let depIncludeDirs = concatMap IPI. includeDirs (topologicalOrder $ installedPkgs lbi)
5050 -- alright, let's compile all .c files into .o files with emcc, which is the `gcc` program.
5151 forM_ (cSources . libBuildInfo $ lib) $ \ src -> do
52- let dst = (buildDir lbi) </> " emcc" </> (src -<.> " o" )
52+ let dst = (getSymbolicPath ( buildDir lbi)) </> " emcc" </> (getSymbolicPath src -<.> " o" )
5353 createDirectoryIfMissingVerbose verbosity True (takeDirectory dst)
5454 runDbProgram verbosity gccProgram (withPrograms lbi) $
55- [" -c" , src, " -o" , dst] ++ [" -I" <> incDir | incDir <- (includeDirs . libBuildInfo $ lib) ++ depIncludeDirs]
55+ [" -c" , getSymbolicPath src, " -o" , dst] ++ [" -I" <> getSymbolicPath incDir | incDir <- (includeDirs . libBuildInfo $ lib) ++ map makeSymbolicPath depIncludeDirs]
5656
5757 -- and now construct a canonical `.js_a` file, *if* we have any cSources we turned into objects.
5858 unless (null . cSources . libBuildInfo $ lib) $ do
59- let dstLib = (buildDir lbi) </> " libEMCC" <> (unPackageName . pkgName . package $ desc) <> " .js_a"
59+ let dstLib = (getSymbolicPath ( buildDir lbi) ) </> " libEMCC" <> (unPackageName . pkgName . package $ desc) <> " .js_a"
6060 runDbProgram verbosity emarProgram (withPrograms lbi) $
61- [ " -r" , dstLib ] ++ [ (buildDir lbi) </> " emcc" </> (src -<.> " o" ) | src <- cSources . libBuildInfo $ lib ]
61+ [ " -r" , dstLib ] ++ [ getSymbolicPath (buildDir lbi) </> " emcc" </> (getSymbolicPath src -<.> " o" ) | src <- cSources . libBuildInfo $ lib ]
6262
63- let expLib = (buildDir lbi) </> " libEMCC" <> (unPackageName . pkgName . package $ desc) <> " .exported.js_a"
63+ let expLib = getSymbolicPath (buildDir lbi) </> " libEMCC" <> (unPackageName . pkgName . package $ desc) <> " .exported.js_a"
6464 writeFile expLib (unwords names)
6565
6666 -- if there's no lib, this is a fairly pointless exercise
@@ -96,19 +96,19 @@ linkCLib libname desc lbi = do
9696 exfns <- concat <$> forM exff (fmap words . readFile )
9797 unless (null libs0 && null exfns) $ do
9898 libs1 <- case libs0 of
99- [] -> do writeFile (buildDir lbi </> " emcc_linking_dummy.c" ) " "
99+ [] -> do writeFile (getSymbolicPath ( buildDir lbi) </> " emcc_linking_dummy.c" ) " "
100100 runDbProgram verbosity gccProgram (withPrograms lbi) $
101- [" -c" , buildDir lbi </> " emcc_linking_dummy.c" , " -o" , buildDir lbi </> " emcc_linking_dummy.o" ]
102- return [(buildDir lbi </> " emcc_linking_dummy.o" )]
101+ [" -c" , getSymbolicPath ( buildDir lbi) </> " emcc_linking_dummy.c" , " -o" , getSymbolicPath ( buildDir lbi) </> " emcc_linking_dummy.o" ]
102+ return [(getSymbolicPath ( buildDir lbi) </> " emcc_linking_dummy.o" )]
103103 _ -> return libs0
104104
105- let dst = if libname == " emcc" </> " lib.js" then buildDir lbi
105+ let dst = if libname == " emcc" </> " lib.js" then getSymbolicPath ( buildDir lbi)
106106 -- who designed this shit in cabal?
107107 else case comp of
108- (CTest test@ (TestSuite { testInterface = TestSuiteLibV09 _ _ })) -> buildDir lbi </> stubName test </> stubName test ++ " -tmp"
109- (CTest test@ (TestSuite { testInterface = TestSuiteExeV10 _ _ })) -> buildDir lbi </> unUnqualComponentName (testName test) </> unUnqualComponentName (testName test) ++ " -tmp"
110- (CExe exe) -> buildDir lbi </> unUnqualComponentName (exeName exe) </> unUnqualComponentName (exeName exe) ++ " -tmp"
111- _ -> componentBuildDir lbi clbi
108+ (CTest test@ (TestSuite { testInterface = TestSuiteLibV09 _ _ })) -> getSymbolicPath ( buildDir lbi) </> stubName test </> stubName test ++ " -tmp"
109+ (CTest test@ (TestSuite { testInterface = TestSuiteExeV10 _ _ })) -> getSymbolicPath ( buildDir lbi) </> unUnqualComponentName (testName test) </> unUnqualComponentName (testName test) ++ " -tmp"
110+ (CExe exe) -> getSymbolicPath ( buildDir lbi) </> unUnqualComponentName (exeName exe) </> unUnqualComponentName (exeName exe) ++ " -tmp"
111+ _ -> getSymbolicPath ( componentBuildDir lbi clbi)
112112 dst' = dst </> libname
113113 createDirectoryIfMissingVerbose verbosity True (takeDirectory dst')
114114 runDbProgram verbosity gccProgram (withPrograms lbi) $
@@ -126,7 +126,7 @@ postBuildHook :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> I
126126postBuildHook _args flags desc lbi = do
127127 case (takeFileName . programPath <$> lookupProgram ghcProgram (withPrograms lbi)) of
128128 Just " js-unknown-ghcjs-ghc" ->
129- readBuildTargets silent desc (buildArgs flags) >>= \ case
129+ readBuildTargets silent desc (buildTargets flags) >>= \ case
130130 [BuildTargetComponent (CLibName _)] -> print " OK. Lib (Build)" >> buildEMCCLib desc lbi
131131 [BuildTargetComponent (CExeName _)] -> print " OK. Exe"
132132 [BuildTargetComponent (CTestName _)] -> print " OK. Test"
@@ -142,7 +142,7 @@ postConfHook args flags desc lbi = do
142142 -- this is technically only needed if the package uses TH somewhere.
143143 linkEMCCTHLib desc lbi
144144 -- only link the final lib if we want to produce an output.
145- readBuildTargets silent desc (configArgs flags) >>= \ case
145+ readBuildTargets silent desc (configureArgs False flags) >>= \ case
146146 [BuildTargetComponent (CLibName _)] -> print " OK. Lib" >> postConf simpleUserHooks args flags desc lbi
147147 [BuildTargetComponent (CExeName _)] -> print " OK. Exe (Link)" >> linkEMCCLib desc lbi
148148 [BuildTargetComponent (CTestName _)] -> print " OK. Test (Link)" >> linkEMCCLib desc lbi
@@ -194,7 +194,7 @@ emccBuildHook desc lbi hooks flags = do
194194--
195195emccCopyHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> CopyFlags -> IO ()
196196emccCopyHook desc lbi hooks flags = do
197- emccLibs <- filterM (\ l -> doesFileExist (buildDir lbi </> " lib" <> l <> " .js_a" ))
197+ emccLibs <- filterM (\ l -> doesFileExist (getSymbolicPath ( buildDir lbi) </> " lib" <> l <> " .js_a" ))
198198 [ " EMCC" <> (unPackageName . pkgName . package $ desc)
199199 , " EMCC" <> (unPackageName . pkgName . package $ desc) <> " .exported" ]
200200 print $ " EMCC extra lib files: " ++ intercalate " , " emccLibs
@@ -210,7 +210,7 @@ emccCopyHook desc lbi hooks flags = do
210210
211211emccRegHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> RegisterFlags -> IO ()
212212emccRegHook desc lbi hooks flags = do
213- emccLibs <- filterM (\ l -> doesFileExist (buildDir lbi </> " lib" <> l <> " .js_a" ))
213+ emccLibs <- filterM (\ l -> doesFileExist (getSymbolicPath ( buildDir lbi) </> " lib" <> l <> " .js_a" ))
214214 [ " EMCC" <> (unPackageName . pkgName . package $ desc)
215215 , " EMCC" <> (unPackageName . pkgName . package $ desc) <> " .exported" ]
216216 print $ " EMCC extra lib files: " ++ intercalate " , " emccLibs
@@ -226,7 +226,7 @@ emccRegHook desc lbi hooks flags = do
226226
227227emccUnregHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> RegisterFlags -> IO ()
228228emccUnregHook desc lbi hooks flags = do
229- emccLibs <- filterM (\ l -> doesFileExist (buildDir lbi </> " lib" <> l <> " .js_a" ))
229+ emccLibs <- filterM (\ l -> doesFileExist (getSymbolicPath ( buildDir lbi) </> " lib" <> l <> " .js_a" ))
230230 [ " EMCC" <> (unPackageName . pkgName . package $ desc)
231231 , " EMCC" <> (unPackageName . pkgName . package $ desc) <> " .exported" ]
232232 print $ " EMCC extra lib files: " ++ intercalate " , " emccLibs
0 commit comments