@@ -27,7 +27,7 @@ import Distribution.Simple.Test.LibV09 (stubName)
27
27
import Distribution.Types.Executable (exeName , Executable (.. ))
28
28
import Distribution.Types.Benchmark (Benchmark (.. ))
29
29
import Distribution.Types.UnqualComponentName (unUnqualComponentName )
30
-
30
+ import Distribution.Utils.Path ( makeSymbolicPath , getSymbolicPath )
31
31
32
32
emarProgram :: Program
33
33
emarProgram = simpleProgram " emar"
@@ -36,31 +36,31 @@ buildEMCCLib :: PackageDescription -> LocalBuildInfo -> IO ()
36
36
buildEMCCLib desc lbi = do
37
37
let verbosity = verbose
38
38
-- get build dir
39
- createDirectoryIfMissingVerbose verbosity True ((buildDir lbi) </> " emcc" )
39
+ createDirectoryIfMissingVerbose verbosity True ((getSymbolicPath ( buildDir lbi) ) </> " emcc" )
40
40
--
41
41
case library desc of
42
42
Just lib -> do
43
43
-- Let's see if we are going to export anything. If not there is likely no point in compiling anything
44
44
-- from the C code.
45
45
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)
47
47
48
48
unless (null names) $ do
49
49
let depIncludeDirs = concatMap IPI. includeDirs (topologicalOrder $ installedPkgs lbi)
50
50
-- alright, let's compile all .c files into .o files with emcc, which is the `gcc` program.
51
51
forM_ (cSources . libBuildInfo $ lib) $ \ src -> do
52
- let dst = (buildDir lbi) </> " emcc" </> (src -<.> " o" )
52
+ let dst = (getSymbolicPath ( buildDir lbi)) </> " emcc" </> (getSymbolicPath src -<.> " o" )
53
53
createDirectoryIfMissingVerbose verbosity True (takeDirectory dst)
54
54
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]
56
56
57
57
-- and now construct a canonical `.js_a` file, *if* we have any cSources we turned into objects.
58
58
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"
60
60
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 ]
62
62
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"
64
64
writeFile expLib (unwords names)
65
65
66
66
-- if there's no lib, this is a fairly pointless exercise
@@ -96,19 +96,19 @@ linkCLib libname desc lbi = do
96
96
exfns <- concat <$> forM exff (fmap words . readFile )
97
97
unless (null libs0 && null exfns) $ do
98
98
libs1 <- case libs0 of
99
- [] -> do writeFile (buildDir lbi </> " emcc_linking_dummy.c" ) " "
99
+ [] -> do writeFile (getSymbolicPath ( buildDir lbi) </> " emcc_linking_dummy.c" ) " "
100
100
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" )]
103
103
_ -> return libs0
104
104
105
- let dst = if libname == " emcc" </> " lib.js" then buildDir lbi
105
+ let dst = if libname == " emcc" </> " lib.js" then getSymbolicPath ( buildDir lbi)
106
106
-- who designed this shit in cabal?
107
107
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)
112
112
dst' = dst </> libname
113
113
createDirectoryIfMissingVerbose verbosity True (takeDirectory dst')
114
114
runDbProgram verbosity gccProgram (withPrograms lbi) $
@@ -126,7 +126,7 @@ postBuildHook :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> I
126
126
postBuildHook _args flags desc lbi = do
127
127
case (takeFileName . programPath <$> lookupProgram ghcProgram (withPrograms lbi)) of
128
128
Just " js-unknown-ghcjs-ghc" ->
129
- readBuildTargets silent desc (buildArgs flags) >>= \ case
129
+ readBuildTargets silent desc (buildTargets flags) >>= \ case
130
130
[BuildTargetComponent (CLibName _)] -> print " OK. Lib (Build)" >> buildEMCCLib desc lbi
131
131
[BuildTargetComponent (CExeName _)] -> print " OK. Exe"
132
132
[BuildTargetComponent (CTestName _)] -> print " OK. Test"
@@ -142,7 +142,7 @@ postConfHook args flags desc lbi = do
142
142
-- this is technically only needed if the package uses TH somewhere.
143
143
linkEMCCTHLib desc lbi
144
144
-- 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
146
146
[BuildTargetComponent (CLibName _)] -> print " OK. Lib" >> postConf simpleUserHooks args flags desc lbi
147
147
[BuildTargetComponent (CExeName _)] -> print " OK. Exe (Link)" >> linkEMCCLib desc lbi
148
148
[BuildTargetComponent (CTestName _)] -> print " OK. Test (Link)" >> linkEMCCLib desc lbi
@@ -194,7 +194,7 @@ emccBuildHook desc lbi hooks flags = do
194
194
--
195
195
emccCopyHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> CopyFlags -> IO ()
196
196
emccCopyHook 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" ))
198
198
[ " EMCC" <> (unPackageName . pkgName . package $ desc)
199
199
, " EMCC" <> (unPackageName . pkgName . package $ desc) <> " .exported" ]
200
200
print $ " EMCC extra lib files: " ++ intercalate " , " emccLibs
@@ -210,7 +210,7 @@ emccCopyHook desc lbi hooks flags = do
210
210
211
211
emccRegHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> RegisterFlags -> IO ()
212
212
emccRegHook 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" ))
214
214
[ " EMCC" <> (unPackageName . pkgName . package $ desc)
215
215
, " EMCC" <> (unPackageName . pkgName . package $ desc) <> " .exported" ]
216
216
print $ " EMCC extra lib files: " ++ intercalate " , " emccLibs
@@ -226,7 +226,7 @@ emccRegHook desc lbi hooks flags = do
226
226
227
227
emccUnregHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> RegisterFlags -> IO ()
228
228
emccUnregHook 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" ))
230
230
[ " EMCC" <> (unPackageName . pkgName . package $ desc)
231
231
, " EMCC" <> (unPackageName . pkgName . package $ desc) <> " .exported" ]
232
232
print $ " EMCC extra lib files: " ++ intercalate " , " emccLibs
0 commit comments