@@ -112,9 +112,8 @@ main = do
112112 let command = case cmd of
113113 Build -> "build"
114114 Run -> "run"
115− project <- envVar goproject
116− (_, _, _, p) <- createProcess (proc "go" [command, T.unpack $ project <> modPrefix <> "/Main"])
117− waitForProcess p
115+ project <- projectEnv
116+ callProcess "go" [command, T.unpack project </> modPrefix' </> "Main"]
118117 return ()
119118
120119generateCode :: [String] -> FilePath -> FilePath -> IO ()
@@ -137,7 +136,7 @@ generateCode opts baseOutpath jsonFile = do
137136transpile :: [String] -> FilePath -> FilePath -> IO ()
138137transpile opts baseOutpath jsonFile = do
139138 jsonText <- T.decodeUtf8 <$> B.readFile jsonFile
140− project <- envVar goproject
139+ project <- projectEnv
141140 let module' = jsonToModule $ parseJson jsonText
142141 ((_, foreigns, asts, implHeader, implFooter), _) <- runSupplyT 5 (moduleToIL module' project)
143142 let mn = moduleNameToIL' $ moduleName module'
@@ -152,7 +151,7 @@ writeSupportFiles :: FilePath -> IO ()
152151writeSupportFiles baseOutpath = do
153152 currentDir <- getCurrentDirectory
154153 let outputdir = T.pack $ baseOutpath \\ currentDir
155− ffiOutpath = currentDir </> "purescript-native"
154+ ffiOutpath = currentDir </> subdir
156155 createDirectoryIfMissing True baseOutpath
157156 createDirectoryIfMissing True ffiOutpath
158157 writeModuleFile outputdir currentDir $(embedFile "support/go.mod.working")
@@ -165,10 +164,16 @@ writeSupportFiles baseOutpath = do
165164 let goModSource = path </> "go.mod"
166165 goModSourceExists <- doesFileExist goModSource
167166 when (not goModSourceExists) $ do
168− project <- envVar goproject
169− let modText' = T.replace "/$OUTPUT/" outputdir $ T.decodeUtf8 modText
170− modText'' = T.replace "$PROJECT/" project modText'
171− B.writeFile goModSource $ T.encodeUtf8 modText''
167+ currentDir <- getCurrentDirectory
168+ project <- projectEnv
169+ let project' = T.unpack project
170+ outputdir' = tail $ T.unpack outputdir
171+ modText' = T.replace "$PROJECT" project $ T.decodeUtf8 modText
172+ replaceLoader = project' </> ffiLoader' <> "=" <> currentDir </> subdir
173+ replaceOutput = project' </> modPrefix' <> "=" <> currentDir </> outputdir'
174+ B.writeFile goModSource $ T.encodeUtf8 modText'
175+ callProcess "go" ["mod", "edit", "-replace", replaceLoader]
176+ callProcess "go" ["mod", "edit", "-replace", replaceOutput]
172177 writeLoaderFile :: FilePath -> B.ByteString -> IO ()
173178 writeLoaderFile ffiOutpath loaderText = do
174179 let loaderSource = ffiOutpath </> "ffi_loader.go"
@@ -179,9 +184,9 @@ writeSupportFiles baseOutpath = do
179184implFileName :: Text -> FilePath
180185implFileName mn = ((\c -> if c == '.' then '_' else c) <$> T.unpack mn) <> ".go"
181186
182−envVar :: String -> IO Text
183−envVar var = do
184− T.pack . maybe "" (<> "/") <$> lookupEnv var
187+projectEnv :: IO Text
188+projectEnv = do
189+ T.pack . fromMaybe defaultProject <$> lookupEnv goproject
185190
186191help :: String
187192help = "Usage: psgo OPTIONS COREFN-FILES\n\
@@ -205,6 +210,18 @@ goSrc = ".go"
205210goproject :: String
206211goproject = "GOPROJECT"
207212
213+defaultProject :: String
214+defaultProject = "project.localhost"
215+
216+modPrefix' :: String
217+modPrefix' = T.unpack modPrefix
218+
219+ffiLoader' :: String
220+ffiLoader' = T.unpack ffiLoader
221+
222+subdir :: String
223+subdir = T.unpack modLabel
224+
208225errorNoCorefnFiles :: IO ()
209226errorNoCorefnFiles = do
210227 ioError . userError $ "no compiled purescript '" <> corefn <> "' files found –\n" <>