Merge pull request #11977 from rycee/debundle/anki

anki: major refactor

+140 -20
+42 -20
pkgs/games/anki/default.nix
··· 1 - { stdenv, lib, fetchurl, lame, mplayer, libpulseaudio, portaudio 2 - , python, pyqt4, pythonPackages 1 + { stdenv, lib, fetchurl, substituteAll, lame, mplayer 2 + , libpulseaudio, python, pyqt4, qt4, pythonPackages 3 3 # This little flag adds a huge number of dependencies, but we assume that 4 4 # everyone wants Anki to draw plots with statistics by default. 5 5 , plotsSupport ? true }: ··· 18 18 sha256 = "1d5rf5gcw98m38wam6wh3hyh7qd78ws7zipm67xg744flqsjrzmr"; 19 19 }; 20 20 21 - pythonPath = [ pyqt4 py.pysqlite py.sqlalchemy9 py.pyaudio ] 21 + pythonPath = [ pyqt4 py.pysqlite py.sqlalchemy9 py.pyaudio py.beautifulsoup py.httplib2 ] 22 22 ++ lib.optional plotsSupport py.matplotlib; 23 23 24 24 buildInputs = [ python py.wrapPython lame mplayer libpulseaudio ]; 25 25 26 - patchPhase = '' 27 - substituteInPlace anki/sound.py --replace '["mplayer"]' '["${mplayer}/bin/mplayer"]' 28 - ''; 26 + phases = [ "unpackPhase" "patchPhase" "installPhase" ]; 27 + 28 + patches = [ 29 + (substituteAll { 30 + src = ./fix-paths.patch; 31 + inherit lame mplayer qt4; 32 + qt4name = qt4.name; 33 + }) 34 + ]; 29 35 30 - preConfigure = '' 31 - substituteInPlace anki/anki \ 32 - --replace /usr/share/ $out/share/ 36 + postPatch = '' 37 + substituteInPlace oldanki/lang.py --subst-var-by anki $out 38 + substituteInPlace anki/lang.py --subst-var-by anki $out 33 39 34 - substituteInPlace Makefile \ 35 - --replace PREFIX=/usr PREFIX=$out \ 36 - --replace /local/bin/ /bin/ 40 + # Remove unused starter. We'll create our own, minimalistic, 41 + # starter. 42 + rm anki/anki 37 43 38 - sed -i '/xdg-mime/ d' Makefile 44 + # Remove QT translation files. We'll use the standard QT ones. 45 + rm "locale/"*.qm 39 46 ''; 40 47 41 - preInstall = '' 48 + installPhase = '' 49 + pp=$out/lib/${python.libPrefix}/site-packages 50 + 42 51 mkdir -p $out/bin 43 - mkdir -p $out/share/pixmaps 44 52 mkdir -p $out/share/applications 53 + mkdir -p $out/share/doc/anki 45 54 mkdir -p $out/share/man/man1 46 - ''; 55 + mkdir -p $out/share/mime/packages 56 + mkdir -p $out/share/pixmaps 57 + mkdir -p $pp 58 + 59 + cat > $out/bin/anki <<EOF 60 + #!${python}/bin/python 61 + import aqt 62 + aqt.run() 63 + EOF 64 + chmod 755 $out/bin/anki 65 + 66 + cp -v anki.desktop $out/share/applications/ 67 + cp -v README* LICENSE* $out/share/doc/anki/ 68 + cp -v anki.1 $out/share/man/man1/ 69 + cp -v anki.xml $out/share/mime/packages/ 70 + cp -v anki.{png,xpm} $out/share/pixmaps/ 71 + cp -rv locale $out/share/ 72 + cp -rv anki aqt thirdparty/send2trash $pp/ 47 73 48 - postInstall = '' 49 - mkdir -p "$out/lib/${python.libPrefix}/site-packages" 50 - ln -s "$out/share/anki/"* $out/lib/${python.libPrefix}/site-packages/ 51 - export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH" 52 74 wrapPythonPrograms 53 75 ''; 54 76
+98
pkgs/games/anki/fix-paths.patch
··· 1 + diff -Nurp anki-2.0.33.orig/anki/lang.py anki-2.0.33/anki/lang.py 2 + --- anki-2.0.33.orig/anki/lang.py 2015-12-27 11:23:02.334908723 +0100 3 + +++ anki-2.0.33/anki/lang.py 2015-12-27 14:06:00.688003103 +0100 4 + @@ -71,13 +71,7 @@ def ngettext(single, plural, n): 5 + return localTranslation().ungettext(single, plural, n) 6 + 7 + def langDir(): 8 + - dir = os.path.join(os.path.dirname( 9 + - os.path.abspath(__file__)), "locale") 10 + - if not os.path.isdir(dir): 11 + - dir = os.path.join(os.path.dirname(sys.argv[0]), "locale") 12 + - if not os.path.isdir(dir): 13 + - dir = "/usr/share/anki/locale" 14 + - return dir 15 + + return "@anki@/share/locale" 16 + 17 + def setLang(lang, local=True): 18 + trans = gettext.translation( 19 + diff -Nurp anki-2.0.33.orig/anki/sound.py anki-2.0.33/anki/sound.py 20 + --- anki-2.0.33.orig/anki/sound.py 2015-12-27 11:23:02.334908723 +0100 21 + +++ anki-2.0.33/anki/sound.py 2015-12-27 11:34:11.863147265 +0100 22 + @@ -29,8 +29,9 @@ processingDst = u"rec.mp3" 23 + processingChain = [] 24 + recFiles = [] 25 + 26 + +lameCmd = "@lame@/bin/lame" 27 + processingChain = [ 28 + - ["lame", "rec.wav", processingDst, "--noreplaygain", "--quiet"], 29 + + [lameCmd, "rec.wav", processingDst, "--noreplaygain", "--quiet"], 30 + ] 31 + 32 + # don't show box on windows 33 + @@ -44,13 +45,6 @@ if isWin: 34 + else: 35 + si = None 36 + 37 + -if isMac: 38 + - # make sure lame, which is installed in /usr/local/bin, is in the path 39 + - os.environ['PATH'] += ":" + "/usr/local/bin" 40 + - dir = os.path.dirname(os.path.abspath(__file__)) 41 + - dir = os.path.abspath(dir + "/../../../..") 42 + - os.environ['PATH'] += ":" + dir + "/audio" 43 + - 44 + def retryWait(proc): 45 + # osx throws interrupted system call errors frequently 46 + while 1: 47 + @@ -62,13 +56,7 @@ def retryWait(proc): 48 + # Mplayer settings 49 + ########################################################################## 50 + 51 + -if isWin: 52 + - mplayerCmd = ["mplayer.exe", "-ao", "win32"] 53 + - dir = os.path.dirname(os.path.abspath(sys.argv[0])) 54 + - os.environ['PATH'] += ";" + dir 55 + - os.environ['PATH'] += ";" + dir + "\\..\\win\\top" # for testing 56 + -else: 57 + - mplayerCmd = ["mplayer"] 58 + +mplayerCmd = ["@mplayer@/bin/mplayer"] 59 + mplayerCmd += ["-really-quiet", "-noautosub"] 60 + 61 + # Mplayer in slave mode 62 + @@ -220,7 +208,7 @@ class _Recorder(object): 63 + self.encode = encode 64 + for c in processingChain: 65 + #print c 66 + - if not self.encode and c[0] == 'lame': 67 + + if not self.encode and c[0] == lameCmd: 68 + continue 69 + try: 70 + ret = retryWait(subprocess.Popen(c, startupinfo=si)) 71 + diff -Nurp anki-2.0.33.orig/aqt/__init__.py anki-2.0.33/aqt/__init__.py 72 + --- anki-2.0.33.orig/aqt/__init__.py 2015-12-27 11:23:02.338908782 +0100 73 + +++ anki-2.0.33/aqt/__init__.py 2015-12-27 12:35:03.405565214 +0100 74 + @@ -107,7 +107,7 @@ def setupLang(pm, app, force=None): 75 + app.setLayoutDirection(Qt.LeftToRight) 76 + # qt 77 + _qtrans = QTranslator() 78 + - if _qtrans.load("qt_" + lang, dir): 79 + + if _qtrans.load("qt_" + lang, "@qt4@/share/@qt4name@/translations"): 80 + app.installTranslator(_qtrans) 81 + 82 + # App initialisation 83 + diff -Nurp anki-2.0.33.orig/oldanki/lang.py anki-2.0.33/oldanki/lang.py 84 + --- anki-2.0.33.orig/oldanki/lang.py 2015-12-27 11:23:02.390909551 +0100 85 + +++ anki-2.0.33/oldanki/lang.py 2015-12-27 14:05:51.663920453 +0100 86 + @@ -32,11 +32,7 @@ def ngettext(single, plural, n): 87 + return localTranslation().ungettext(single, plural, n) 88 + 89 + def setLang(lang, local=True): 90 + - base = os.path.dirname(os.path.abspath(__file__)) 91 + - localeDir = os.path.join(base, "locale") 92 + - if not os.path.exists(localeDir): 93 + - localeDir = os.path.join( 94 + - os.path.dirname(sys.argv[0]), "locale") 95 + + localeDir = "@anki@/share/locale" 96 + trans = gettext.translation('libanki', localeDir, 97 + languages=[lang], 98 + fallback=True)