summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-09-23 11:42:44 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-09-23 11:42:44 -0400
commit4baaab02cf33c6539d12aa9a76b0b6949f3783f3 (patch)
treed8309adef1245288c2701ae864130e6956af3447
parentf414affb6668c1c028f08ebb9474d4eaacfd2844 (diff)
install Jimmy's .app on OS X
I'm guessing that ~/Desktop/git-annex.app will be visiable. For the system-wide installation, I don't know where to put it, though somewhere in /Library seems likely.
-rw-r--r--Build/InstallDesktopFile.hs71
-rwxr-xr-xui-macos/git-annex.app/Contents/MacOS/git-annex4
2 files changed, 48 insertions, 27 deletions
diff --git a/Build/InstallDesktopFile.hs b/Build/InstallDesktopFile.hs
index 3f8b980cc..9c721f968 100644
--- a/Build/InstallDesktopFile.hs
+++ b/Build/InstallDesktopFile.hs
@@ -21,6 +21,7 @@ import Control.Monad
import System.Directory
import System.Environment
import System.Posix.User
+import System.Posix.Types
import System.Posix.Files
import System.FilePath
@@ -73,38 +74,56 @@ writeFDODesktop command = do
writeOSXDesktop :: FilePath -> IO ()
writeOSXDesktop command = do
home <- myHomeDir
+
let base = "Library" </> "LaunchAgents" </> label ++ ".plist"
autostart <- ifM isRoot ( inDestDir $ "/" </> base , inDestDir $ home </> base)
createDirectoryIfMissing True (parentDir autostart)
- writeFile autostart $ unlines
- [ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- , "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"
- , "<plist version=\"1.0\">"
- , "<dict>"
- , "<key>Label</key>"
- , "<string>" ++ label ++ "</string>"
- , "<key>ProgramArguments</key>"
- , "<array>"
- , "<string>" ++ command ++ "</string>"
- , "<string>assistant</string>"
- , "<string>--autostart</string>"
- , "</array>"
- , "<key>RunAtLoad</key>"
- , "</dict>"
- , "</plist>"
- ]
+ writeFile autostart $ genOSXAutoStartFile label command
- ifM isRoot
- ( return ()
- , do
- let commandfile = home </> "Desktop" </> "git-annex-webapp.command"
- writeFile commandfile $ unwords [command, "webapp"]
- mode <- fileMode <$> getFileStatus commandfile
- setFileMode commandfile $ mode `unionFileModes` ownerExecuteMode
- )
-
+ let appdir = "git-annex.app"
+ installOSXAppFile appdir "Contents/Info.plist" Nothing
+ installOSXAppFile appdir "Contents/Resources/git-annex.icns" Nothing
+ installOSXAppFile appdir "Contents/MacOS/git-annex" (Just webappscript)
where
label = "com.branchable.git-annex.assistant"
+ webappscript = unlines
+ [ "#!/bin/sh"
+ , command ++ " webapp"
+ ]
+
+installOSXAppFile :: FilePath -> FilePath -> Maybe String -> IO ()
+installOSXAppFile appdir appfile mcontent = do
+ let src = "ui-macos" </> appdir </> appfile
+ home <- myHomeDir
+ dest <- ifM isRoot
+ -- no idea where to install as root
+ ( return $ "/Library/git-annex" </> appdir </> appfile
+ , return $ home </> "Desktop" </> appdir </> appfile
+ )
+ content <- maybe (readFile src) return mcontent
+ createDirectoryIfMissing True (parentDir dest)
+ writeFile dest content
+ mode <- fileMode <$> getFileStatus src
+ setFileMode dest mode
+
+genOSXAutoStartFile :: String -> String -> String
+genOSXAutoStartFile label command = unlines
+ [ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ , "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"
+ , "<plist version=\"1.0\">"
+ , "<dict>"
+ , "<key>Label</key>"
+ , "<string>" ++ label ++ "</string>"
+ , "<key>ProgramArguments</key>"
+ , "<array>"
+ , "<string>" ++ command ++ "</string>"
+ , "<string>assistant</string>"
+ , "<string>--autostart</string>"
+ , "</array>"
+ , "<key>RunAtLoad</key>"
+ , "</dict>"
+ , "</plist>"
+ ]
writeDesktop :: FilePath -> IO ()
#ifdef darwin_HOST_OS
diff --git a/ui-macos/git-annex.app/Contents/MacOS/git-annex b/ui-macos/git-annex.app/Contents/MacOS/git-annex
index 868a48865..f814fc08d 100755
--- a/ui-macos/git-annex.app/Contents/MacOS/git-annex
+++ b/ui-macos/git-annex.app/Contents/MacOS/git-annex
@@ -1,3 +1,5 @@
#!/bin/sh
-
+# The contents of this file are not installed; instead a script
+# is generated containing the full path to the real git-annex
+# executable.
git annex webapp