summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build/NullSoftInstaller.hs65
-rw-r--r--debian/changelog2
-rwxr-xr-xstandalone/windows/build-simple.sh5
-rwxr-xr-xstandalone/windows/build.sh23
4 files changed, 49 insertions, 46 deletions
diff --git a/Build/NullSoftInstaller.hs b/Build/NullSoftInstaller.hs
index 7726fdcbc..c7cd44ea7 100644
--- a/Build/NullSoftInstaller.hs
+++ b/Build/NullSoftInstaller.hs
@@ -1,8 +1,4 @@
{- Generates a NullSoft installer program for git-annex on Windows.
- -
- - To build the installer, git-annex should already be built by cabal,
- - and the necessary utility programs already installed
- - from cygwin.
-
- This uses the Haskell nsis package (cabal install nsis)
- to generate a .nsi file, which is then used to produce
@@ -12,6 +8,10 @@
- exception of git and some utilities that are bundled with git.
- The user needs to install git separately, and the installer checks
- for that.
+ -
+ - To build the installer, git-annex should already be built by cabal,
+ - and the necessary utility programs (rsync and wget) already installed
+ - in PATH from msys32.
-
- Copyright 2013-2015 Joey Hess <id@joeyh.name>
-
@@ -44,19 +44,14 @@ main = do
mustSucceed "ln" [File "dist/build/git-annex/git-annex.exe", File gitannex]
let license = tmpdir </> licensefile
mustSucceed "sh" [Param "-c", Param $ "zcat standalone/licences.gz > '" ++ license ++ "'"]
- extrabins <- forM (winPrograms) $ \f -> do
- p <- searchPath f
- when (isNothing p) $
- print ("unable to find in PATH", f)
- return p
- dlls <- forM (catMaybes extrabins) findCygLibs
- dllpaths <- mapM searchPath (nub (concat dlls))
- webappscript <- vbsLauncher tmpdir "git-annex-webapp" "git-annex webapp"
+ webappscript <- vbsLauncher tmpdir "git-annex-webapp" "git annex webapp"
autostartscript <- vbsLauncher tmpdir "git-annex-autostart" "git annex assistant --autostart"
let htmlhelp = tmpdir </> "git-annex.html"
writeFile htmlhelp htmlHelpText
- writeFile nsifile $ makeInstaller gitannex license htmlhelp
- (catMaybes (extrabins ++ dllpaths))
+ let gitannexcmd = tmpdir </> "git-annex.cmd"
+ writeFile gitannexcmd "git annex %*"
+ writeFile nsifile $ makeInstaller
+ gitannex gitannexcmd license htmlhelp winPrograms
[ webappscript, autostartscript ]
mustSucceed "makensis" [File nsifile]
removeFile nsifile -- left behind if makensis fails
@@ -115,8 +110,8 @@ needGit = strConcat
, fromString "You can install git from http:////git-scm.com//"
]
-makeInstaller :: FilePath -> FilePath -> FilePath -> [FilePath] -> [FilePath] -> String
-makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do
+makeInstaller :: FilePath -> FilePath -> FilePath -> FilePath -> [FilePath] -> [FilePath] -> String
+makeInstaller gitannex gitannexcmd license htmlhelp extrabins launchers = nsis $ do
name "git-annex"
outFile $ str installer
{- Installing into the same directory as git avoids needing to modify
@@ -138,7 +133,7 @@ makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do
[ Target "wscript.exe"
, Parameters "\"$INSTDIR/git-annex-webapp.vbs\""
, StartOptions "SW_SHOWNORMAL"
- , IconFile "$INSTDIR/cmd/git-annex.exe"
+ , IconFile "$INSTDIR/usr/bin/git-annex.exe"
, IconIndex 2
, Description "Git Annex (Webapp)"
]
@@ -147,15 +142,30 @@ makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do
[ Target "wscript.exe"
, Parameters "\"$INSTDIR/git-annex-autostart.vbs\""
, StartOptions "SW_SHOWNORMAL"
- , IconFile "$INSTDIR/cmd/git-annex.exe"
+ , IconFile "$INSTDIR/usr/bin/git-annex.exe"
, IconIndex 2
, Description "git-annex autostart"
]
section "cmd" [] $ do
- setOutPath "$INSTDIR\\cmd"
+ -- Remove old files no longer installed in the cmd
+ -- directory.
+ removefilesFrom "$INSTDIR/cmd" (gitannex:extrabins)
+ -- Install everything to the same location git puts its
+ -- bins. This makes "git annex" work in the git bash
+ -- shell, since git expects to find the git-annex binary
+ -- there.
+ setOutPath "$INSTDIR\\usr\\bin"
mapM_ addfile (gitannex:extrabins)
+ -- This little wrapper is installed in the cmd directory,
+ -- so that "git-annex" works (as well as "git annex"),
+ -- when only that directory is in PATH (ie, in a ms-dos
+ -- prompt window).
+ setOutPath "$INSTDIR\\cmd"
+ addfile gitannexcmd
section "meta" [] $ do
- setOutPath "$INSTDIR\\doc\\git\\html"
+ -- git opens this file when git annex --help is run.
+ -- (Program Files/Git/mingw32/share/doc/git-doc/git-annex.html)
+ setOutPath "$INSTDIR\\mingw32\\share\\doc\\git-doc"
addfile htmlhelp
setOutPath "$INSTDIR"
addfile license
@@ -164,7 +174,8 @@ makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do
uninstall $ do
delete [RebootOK] $ startMenuItem
delete [RebootOK] $ autoStartItem
- removefilesFrom "$INSTDIR/cmd" (gitannex:extrabins)
+ removefilesFrom "$INSTDIR/usr/bin" (gitannex:extrabins)
+ removefilesFrom "$INSTDIR/cmd" gitannexcmd
removefilesFrom "$INSTDIR\\doc\\git\\html" [htmlhelp]
removefilesFrom "$INSTDIR" $
launchers ++
@@ -178,8 +189,6 @@ makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do
winPrograms :: [FilePath]
winPrograms = map (\p -> p ++ ".exe") bundledPrograms
--- git opens Program Files/Git/doc/git/html/git-annex.html
--- when git annex --help is run.
htmlHelpText :: String
htmlHelpText = unlines
[ "<html>"
@@ -190,13 +199,3 @@ htmlHelpText = unlines
, "</body>"
, "</html"
]
-
--- Find cygwin libraries used by the specified executable.
-findCygLibs :: FilePath -> IO [FilePath]
-findCygLibs p = filter iscyg . mapMaybe parse . lines
- <$> catchDefaultIO "" (readProcess "ldd" [p])
- where
- parse l = case words (dropWhile isSpace l) of
- (dll:"=>":_dllpath:_offset:[]) -> Just dll
- _ -> Nothing
- iscyg f = "cyg" `isPrefixOf` f || "lib" `isPrefixOf` f
diff --git a/debian/changelog b/debian/changelog
index 2cb63ed97..a1a392ba4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -14,6 +14,8 @@ git-annex (5.20150825) UNRELEASED; urgency=medium
use it instead of the gpg command.
* Windows: Switched to using git for Windows, rather than msysgit.
Using msysgit with git-annex is no longer supported.
+ * Windows: When the user neglects to tell the git installer to add git to
+ PATH, git-annex will now work from within the git bash shell.
-- Joey Hess <id@joeyh.name> Tue, 01 Sep 2015 14:46:18 -0700
diff --git a/standalone/windows/build-simple.sh b/standalone/windows/build-simple.sh
index 7e0f40bab..65be71271 100755
--- a/standalone/windows/build-simple.sh
+++ b/standalone/windows/build-simple.sh
@@ -35,7 +35,4 @@ fi
# Build the installer
cabal install nsis
ghc --make Build/NullSoftInstaller.hs -fno-warn-tabs
-PATH="$PATH:/cygdrive/c/Program Files/NSIS"
-# Want to include cygwin programs in bundle, not others, since
-# it includes the cygwin libs that go with them.
-withcygpreferred Build/NullSoftInstaller.exe
+PATH="$PATH:/cygdrive/c/Program Files/NSIS" Build/NullSoftInstaller.exe
diff --git a/standalone/windows/build.sh b/standalone/windows/build.sh
index 86b28847c..91037eec3 100755
--- a/standalone/windows/build.sh
+++ b/standalone/windows/build.sh
@@ -58,20 +58,25 @@ if ! withcyg cabal build; then
Build/EvilLinker
fi
-# Build the installer
-cabal install nsis
-ghc -fforce-recomp --make Build/NullSoftInstaller.hs -fno-warn-tabs
-# Want to include cygwin programs in bundle, not others, since
-# it includes the cygwin libs that go with them.
-# Currently need an different version of rsync than the one from cygwin.
-# This rsync build originally comes from https://msys2.github.io/,
-# and it works with the ssh bundled with git for windows.
+# Get extra programs to bundle with git-annex.
+# These are msys2 programs, from https://msys2.github.io/.
+# Since git for windows uses msys2, and includes its libraries,
+# these programs will work well with it.
if [ ! -e rsync.exe ] || [ "$(sha1sum rsync.exe)" != "85cb7a4d16d274fcf8069b39042965ad26abd6aa" ]; then
rm -f rsync.exe || true
withcyg wget https://downloads.kitenet.net/git-annex/windows/assets/rsync.exe
withcyg chmod +x rsync.exe
fi
-PATH=".:/c/cygwin/bin:$PATH" Build/NullSoftInstaller.exe
+if [ ! -e wget.exe ] || [ "$(sha1sum wget.exe)" != "044380729200d5762965b10123a4f134806b01cf" ]; then
+ rm -f wget.exe || true
+ withcyg wget https://downloads.kitenet.net/git-annex/windows/assets/wget.exe
+ withcyg chmod +x wget.exe
+fi
+
+# Build the installer
+cabal install nsis
+ghc -fforce-recomp --make Build/NullSoftInstaller.hs -fno-warn-tabs
+Build/NullSoftInstaller.exe
rm -f last-incremental-failed