Git Repositories

Cleaning and new build system.
authorCyrille Pontvieux <jrd@enialis.net>
Wed, 11 Jun 2014 00:56:52 +0000 (02:56 +0200)
committerCyrille Pontvieux <jrd@enialis.net>
Wed, 11 Jun 2014 00:56:52 +0000 (02:56 +0200)
All is now done through setup.py/make
The wheel package contains everything.
po/mo files are updated and included.

24 files changed:
.gitignore
SLKBUILD [deleted file]
bootsetup/__init__.py
bootsetup/bootsetup.png [new symlink]
bootsetup/bootsetup.py
bootsetup/bootsetup_curses.py
bootsetup/bootsetup_gtk.py
bootsetup/config.py
bootsetup/gathercurses.py
bootsetup/gathergui.py
bootsetup/grub2.py
bootsetup/lilo.py
bootsetup/resources/bootsetup.png [deleted symlink]
clean.sh [deleted file]
compile.sh [deleted file]
make
resources/bootsetup.desktop.in
resources/po/bootsetup.pot
resources/po/fr.po
setup.cfg
setup.py
test.sh
tox.ini
update-translations.sh

index f30c9a5..7334568 100644 (file)
@@ -9,3 +9,4 @@
 build
 dist
 *.egg-info
+wheelhouse
diff --git a/SLKBUILD b/SLKBUILD
deleted file mode 100644 (file)
index 9ed68e6..0000000
--- a/SLKBUILD
+++ /dev/null
@@ -1,25 +0,0 @@
-# vim: set syn=sh et ai sta sw=2 ts=2 tw=0:
-#Packager: JRD <jrd@enialis.net>
-#dep: btrfs-progs,coreutils,dosfstools,e2fsprogs,file,findutils,glibc,grep,jfsutils,ntfsprogs|ntfs-3g,python,reiserfsprogs,salixtools,shadow,spkg,util-linux,xfsprogs
-#sug: bootsetup|lilosetup,gparted,grub2,lilo,pygtk
-
-pkgname=bootsetup
-pkgver=0.1dev
-pkgrel=1cp
-arch=noarch
-source=(http://git.enialis.net/download/$pkgname/$pkgname-$pkgver.tar.gz)
-sourcetemplate=http://people.salixos.org/jrd/salix/$pkgname-\$arch-$pkgver/
-url=http://git.enialis.net/info/$pkgname
-
-slackdesc=\
-(
-#|-----handy-ruler------------------------------------------------------|
-"$pkgname (Install LiLo or Grub2)"
-"BootSetup helps installing a bootloader, either LiLo or Grub2."
-)
-
-build() {
-  cd $SRC/$pkgname-$pkgver
-  ./compile.sh
-  DESTDIR=$PKG ./install.sh
-}
index f021fe2..4dd27ea 100644 (file)
@@ -6,4 +6,11 @@ BootSetup helps installing LiLo or Grub2 on your computer.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-from .bootsetup import __app__, __copyright__, __author__, __credits__, __maintainer__, __email__, __license__, __version__  # noqa
+__app__ = 'bootsetup'
+__copyright__ = 'Copyright 2013-2014, Salix OS'
+__author__ = 'Cyrille Pontvieux <jrd@salixos.org>, Pierrick Le Brun <akuna@salixos.org>'
+__credits__ = ['Cyrille Pontvieux', 'Pierrick Le Brun']
+__maintainer__ = 'Cyrille Pontvieux'
+__email__ = 'jrd@salixos.org'
+__license__ = 'GPLv2+'
+__version__ = '0.1'
diff --git a/bootsetup/bootsetup.png b/bootsetup/bootsetup.png
new file mode 120000 (symlink)
index 0000000..8626932
--- /dev/null
@@ -0,0 +1 @@
+../resources/icons/bootsetup-128.png
\ No newline at end of file
index 8de7649..85de216 100755 (executable)
@@ -7,19 +7,11 @@ This is the launcher.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-__app__ = 'bootsetup'
-__copyright__ = 'Copyright 2013-2014, Salix OS'
-__author__ = 'Cyrille Pontvieux <jrd@enialis~dot~net> and Pierrick Le Brun <akuna@salixos~dot~org>'
-__credits__ = ['Cyrille Pontvieux', 'Pierrick Le Brun']
-__maintainer__ = 'Cyrille Pontvieux'
-__email__ = 'jrd@enialis~dot~net'
-__license__ = 'GPLv2+'
-__version__ = '0.1'
+from .__init__ import __app__, __copyright__, __author__, __license__, __version__
 
 import abc
 import os
 import sys
-_ = None  # for jslint
 import gettext
 
 
@@ -27,15 +19,13 @@ class BootSetup:
 
   __metaclass__ = abc.ABCMeta
 
-  def __init__(self, appName, version, localeDir, bootloader, targetPartition, isTest, useTestData):
+  def __init__(self, appName, bootloader, targetPartition, isTest, useTestData):
     self._appName = appName
-    self._version = version
-    self._localeDir = localeDir
     self._bootloader = bootloader
     self._targetPartition = targetPartition
     self._isTest = isTest
     self._useTestData = useTestData
-    print("BootSetup v{ver}".format(ver=version))
+    print("BootSetup v{ver}".format(ver=__version__))
 
   @abc.abstractmethod
   def run_setup(self):
@@ -92,6 +82,13 @@ def die(s, exit=1):
     sys.exit(exit)
 
 
+def find_locale_dir():
+  if '.local' in __file__:
+    return os.path.expanduser(os.path.join('~', '.local', 'share', 'locale'))
+  else:
+    return os.path.join('usr', 'share', 'locale')
+
+
 def main(args=sys.argv[1:]):
   if os.path.dirname(__file__):
     os.chdir(os.path.dirname(__file__))
@@ -100,8 +97,7 @@ def main(args=sys.argv[1:]):
   use_test_data = False
   bootloader = None
   target_partition = None
-  locale_dir = '/usr/share/locale'
-  gettext.install(__app__, locale_dir, True)
+  gettext.install(domain=__app__, localedir=find_locale_dir(), unicode=True)
   for arg in args:
     if arg:
       if arg == '--help':
@@ -112,9 +108,6 @@ def main(args=sys.argv[1:]):
         sys.exit(0)
       elif arg == '--test':
         is_test = True
-        # relaod locale to the correct one for the tests
-        locale_dir = '../data/locale'
-        gettext.install(__app__, locale_dir, True)
         print_err("*** Testing mode ***")
       elif is_test and arg == '--data':
         use_test_data = True
@@ -138,7 +131,7 @@ def main(args=sys.argv[1:]):
     from .bootsetup_gtk import BootSetupGtk as BootSetupImpl
   else:
     from .bootsetup_curses import BootSetupCurses as BootSetupImpl
-  bootsetup = BootSetupImpl(__app__, __version__, locale_dir, bootloader, target_partition, is_test, use_test_data)
+  bootsetup = BootSetupImpl(__app__, bootloader, target_partition, is_test, use_test_data)
   bootsetup.run_setup()
 
 
index 4919933..9bbb3ea 100644 (file)
@@ -6,9 +6,6 @@ Curses BootSetup.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-__copyright__ = 'Copyright 2013-2014, Salix OS'
-__license__ = 'GPL2+'
-
 import os
 import sys
 import gettext  # noqa
@@ -30,7 +27,7 @@ class BootSetupCurses(BootSetup):
     if os.getuid() != 0:
       self.error_dialog(_("Root privileges are required to run this program."), _("Sorry!"))
       sys.exit(1)
-    self.gc = GatherCurses(self, self._version, self._bootloader, self._targetPartition, self._isTest, self._useTestData)
+    self.gc = GatherCurses(self, self._bootloader, self._targetPartition, self._isTest, self._useTestData)
     self.gc.run()
 
   def _show_ui_dialog(self, dialog, parent=None):
index 6cd02e5..4da9579 100644 (file)
@@ -6,9 +6,6 @@ Graphical BootSetup.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-__copyright__ = 'Copyright 2013-2014, Salix OS'
-__license__ = 'GPL2+'
-
 import os
 import sys
 import gettext  # noqa
@@ -19,13 +16,19 @@ from .gathergui import *
 
 
 class BootSetupGtk(BootSetup):
+  def _find_locale_dir(self):
+    if '.local' in __file__:
+      return os.path.expanduser(os.path.join('~', '.local', 'share', 'locale'))
+    else:
+      return os.path.join('usr', 'share', 'locale')
+
   def run_setup(self):
-    gtk.glade.bindtextdomain(self._appName, self._localeDir)
+    gtk.glade.bindtextdomain(self._appName, self._find_locale_dir())
     gtk.glade.textdomain(self._appName)
     if not (self._isTest and self._useTestData) and os.getuid() != 0:
       self.error_dialog(_("Root privileges are required to run this program."), _("Sorry!"))
       sys.exit(1)
-    gg = GatherGui(self, self._version, self._bootloader, self._targetPartition, self._isTest, self._useTestData)
+    gg = GatherGui(self, self._bootloader, self._targetPartition, self._isTest, self._useTestData)
     gg.run()
 
   def info_dialog(self, message, title=None, parent=None):
index 5f2cc09..1e6781c 100644 (file)
@@ -6,9 +6,6 @@ Config class helps storing the configuration for the bootloader setup.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-__copyright__ = 'Copyright 2013-2014, Salix OS'
-__license__ = 'GPL2+'
-
 import sys
 import re
 import codecs
index d102f6b..ca29d8b 100644 (file)
@@ -6,12 +6,13 @@ Curses (urwid) BootSetup configuration gathering.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-__copyright__ = 'Copyright 2013-2014, Salix OS'
-__license__ = 'GPL2+'
+from .__init__ import __version__, __copyright__, __license__, __author__
+
 
 import gettext  # noqa
 import urwidm
 import re
+import os
 import libsalt as slt
 from .config import Config
 from .lilo import Lilo
@@ -61,9 +62,8 @@ class GatherCurses:
   _liloMaxChars = 15
   _editors = ['vim', 'nano']
 
-  def __init__(self, bootsetup, version, bootloader = None, target_partition = None, is_test = False, use_test_data = False):
+  def __init__(self, bootsetup, bootloader=None, target_partition=None, is_test=False, use_test_data=False):
     self._bootsetup = bootsetup
-    self._version = version
     self.cfg = Config(bootloader, target_partition, is_test, use_test_data)
     print("""
 bootloader         = {bootloader}
@@ -72,7 +72,7 @@ MBR device         = {mbr}
 disks:{disks}
 partitions:{partitions}
 boot partitions:{boot_partitions}
-""".format(bootloader = self.cfg.cur_bootloader, partition = self.cfg.cur_boot_partition, mbr = self.cfg.cur_mbr_device, disks = "\n - " + "\n - ".join(map(" ".join, self.cfg.disks)), partitions = "\n - " + "\n - ".join(map(" ".join, self.cfg.partitions)), boot_partitions = "\n - " + "\n - ".join(map(" ".join, self.cfg.boot_partitions))))
+""".format(bootloader=self.cfg.cur_bootloader, partition=self.cfg.cur_boot_partition, mbr=self.cfg.cur_mbr_device, disks="\n - " + "\n - ".join(map(" ".join, self.cfg.disks)), partitions="\n - " + "\n - ".join(map(" ".join, self.cfg.partitions)), boot_partitions="\n - " + "\n - ".join(map(" ".join, self.cfg.boot_partitions))))
     self.ui = urwidm.raw_display.Screen()
     self.ui.set_mouse_tracking()
     self._palette.extend(bootsetup._palette)
@@ -82,7 +82,7 @@ boot partitions:{boot_partitions}
     self._createHelpView()
     self._createAboutView()
     self._changeBootloaderSection()
-    self._loop = urwidm.MainLoop(self._mainView, self._palette, handle_mouse = True, unhandled_input = self._handleKeys, pop_ups = True)
+    self._loop = urwidm.MainLoop(self._mainView, self._palette, handle_mouse=True, unhandled_input=self._handleKeys, pop_ups=True)
     if self.cfg.cur_bootloader == 'lilo':
       self._radioLiLo.set_state(True)
       self._mainView.body.set_focus(self._mbrDeviceSectionPosition)
@@ -92,10 +92,10 @@ boot partitions:{boot_partitions}
     self._loop.run()
 
   def _infoDialog(self, message):
-    self._bootsetup.info_dialog(message, parent = self._loop.widget)
+    self._bootsetup.info_dialog(message, parent=self._loop.widget)
 
   def _errorDialog(self, message):
-    self._bootsetup.error_dialog(message, parent = self._loop.widget)
+    self._bootsetup.error_dialog(message, parent=self._loop.widget)
 
   def _updateScreen(self):
     if self._loop and self._loop.screen._started:
@@ -104,9 +104,11 @@ boot partitions:{boot_partitions}
   def _onHelpFocusGain(self, widget, context):
     self._helpCtx = context
     return True
+
   def _onHelpFocusLost(self, widget):
     self._helpCtx = ''
     return True
+
   def _installHelpContext(self, widget, context):
     urwidm.connect_signal(widget, 'focusgain', self._onHelpFocusGain, context)
     urwidm.connect_signal(widget, 'focuslost', self._onHelpFocusLost)
@@ -125,19 +127,19 @@ boot partitions:{boot_partitions}
     comboBox.cbox.sensitive_attr = ('focusable', 'focus_edit')
     return comboBox
 
-  def _createEdit(self, caption = '', edit_text = '', multiline = False, align = 'left', wrap = 'space', allow_tab = False, edit_pos = None, layout = None, mask = None):
+  def _createEdit(self, caption='', edit_text='', multiline=False, align='left', wrap='space', allow_tab=False, edit_pos=None, layout=None, mask=None):
     edit = urwidm.EditMore(caption, edit_text, multiline, align, wrap, allow_tab, edit_pos, layout, mask)
     return edit
 
-  def _createButton(self, label, on_press = None, user_data = None):
+  def _createButton(self, label, on_press=None, user_data=None):
     btn = urwidm.ButtonMore(label, on_press, user_data)
     return btn
 
-  def _createRadioButton(self, group, label, state = "first True", on_state_change = None, user_data = None):
+  def _createRadioButton(self, group, label, state="first True", on_state_change=None, user_data=None):
     radio = urwidm.RadioButtonMore(group, label, state, on_state_change, user_data)
     return radio
 
-  def _createCenterButtonsWidget(self, buttons, h_sep = 2, v_sep = 0):
+  def _createCenterButtonsWidget(self, buttons, h_sep=2, v_sep=0):
     maxLen = reduce(max, [len(b.label) for b in buttons], 0) + len("<  >")
     return urwidm.GridFlowMore(buttons, maxLen, h_sep, v_sep, "center")
 
@@ -165,8 +167,8 @@ boot partitions:{boot_partitions}
 +=======================================+
     """
     # header
-    txtTitle = urwidm.Text(_("BootSetup curses, version {ver}").format(ver = self._version), align = "center")
-    header = urwidm.PileMore([urwidm.Divider(), txtTitle, urwidm.Text('─' * (len(txtTitle.text) + 2), align = "center")])
+    txtTitle = urwidm.Text(_("BootSetup curses, version {ver}").format(ver=__version__), align="center")
+    header = urwidm.PileMore([urwidm.Divider(), txtTitle, urwidm.Text('─' * (len(txtTitle.text) + 2), align="center")])
     header.attr = 'header'
     # footer
     keys = [
@@ -174,7 +176,7 @@ boot partitions:{boot_partitions}
         (('a', 'ctrl a'), _("About")),
         (('q', 'f10'), _("Quit")),
       ]
-    keysColumns = urwidm.OptCols(keys, self._handleKeys, attrs = ('footer_key', 'footer'))
+    keysColumns = urwidm.OptCols(keys, self._handleKeys, attrs=('footer_key', 'footer'))
     keysColumns.attr = 'footer'
     footer = urwidm.PileMore([urwidm.Divider('⎽'), keysColumns])
     footer.attr = 'footer'
@@ -184,75 +186,75 @@ boot partitions:{boot_partitions}
 A bootloader is required to load the main operating system of a computer and will initially display \
 a boot menu if several operating systems are available on the same computer.")
     intro = map(lambda line: ('strong', line.replace("<b>", "").replace("</b>", "") + "\n") if line.startswith("<b>") else line, introHtml.split("\n"))
-    intro[-1] = intro[-1].strip() # remove last "\n"
+    intro[-1] = intro[-1].strip()  # remove last "\n"
     txtIntro = urwidm.Text(intro)
     # bootloader type section
     lblBootloader = urwidm.Text(_("Bootloader:"))
     radioGroupBootloader = []
-    self._radioLiLo = self._createRadioButton(radioGroupBootloader, "LiLo", state = False, on_state_change = self._onLiLoChange)
-    self._radioGrub2 = self._createRadioButton(radioGroupBootloader, "Grub2", state = False, on_state_change = self._onGrub2Change)
-    bootloaderTypeSection = urwidm.ColumnsMore([lblBootloader, self._radioLiLo, self._radioGrub2], focus_column = 1)
+    self._radioLiLo = self._createRadioButton(radioGroupBootloader, "LiLo", state=False, on_state_change=self._onLiLoChange)
+    self._radioGrub2 = self._createRadioButton(radioGroupBootloader, "Grub2", state=False, on_state_change=self._onGrub2Change)
+    bootloaderTypeSection = urwidm.ColumnsMore([lblBootloader, self._radioLiLo, self._radioGrub2], focus_column=1)
     self._installHelpContext(bootloaderTypeSection, 'type')
     # mbr device section
     mbrDeviceSection = self._createMbrDeviceSectionView()
     # bootloader section
     self._bootloaderSection = urwidm.WidgetPlaceholderMore(urwidm.Text(""))
     # install section
-    btnInstall = self._createButton(_("_Install bootloader").replace("_", ""), on_press = self._onInstall)
+    btnInstall = self._createButton(_("_Install bootloader").replace("_", ""), on_press=self._onInstall)
     self._installHelpContext(btnInstall, 'install')
     installSection = self._createCenterButtonsWidget([btnInstall])
     # body
-    bodyList = [urwidm.Divider(), txtIntro, urwidm.Divider('─', bottom = 1), bootloaderTypeSection, mbrDeviceSection, urwidm.Divider(), self._bootloaderSection, urwidm.Divider('─', top = 1, bottom = 1), installSection]
+    bodyList = [urwidm.Divider(), txtIntro, urwidm.Divider('─', bottom=1), bootloaderTypeSection, mbrDeviceSection, urwidm.Divider(), self._bootloaderSection, urwidm.Divider('─', top=1, bottom=1), installSection]
     self._mbrDeviceSectionPosition = 4
     body = urwidm.ListBoxMore(urwidm.SimpleListWalker(bodyList))
     body.attr = 'body'
-    frame = urwidm.FrameMore(body, header, footer, focus_part = 'body')
+    frame = urwidm.FrameMore(body, header, footer, focus_part='body')
     frame.attr = 'body'
     self._mainView = frame
 
   def _createHelpView(self):
     bodyPile = urwidm.PileMore([urwidm.Divider(), urwidm.TextMore("Help")])
     bodyPile.attr = 'body'
-    body = urwidm.FillerMore(bodyPile, valign = "top")
+    body = urwidm.FillerMore(bodyPile, valign="top")
     body.attr = 'body'
-    txtTitle = urwidm.Text(_("Help"), align = "center")
-    header = urwidm.PileMore([urwidm.Divider(), txtTitle, urwidm.Text('─' * (len(txtTitle.text) + 2), align = "center")])
+    txtTitle = urwidm.Text(_("Help"), align="center")
+    header = urwidm.PileMore([urwidm.Divider(), txtTitle, urwidm.Text('─' * (len(txtTitle.text) + 2), align="center")])
     header.attr = 'header'
     keys = [
         (('q', 'esc', 'enter'), _("Close")),
       ]
-    keysColumns = urwidm.OptCols(keys, self._handleKeys, attrs = ('footer_key', 'footer'))
+    keysColumns = urwidm.OptCols(keys, self._handleKeys, attrs=('footer_key', 'footer'))
     keysColumns.attr = 'footer'
     footer = urwidm.PileMore([urwidm.Divider('⎽'), keysColumns])
     footer.attr = 'footer'
-    frame = urwidm.FrameMore(body, header, footer, focus_part = 'body')
+    frame = urwidm.FrameMore(body, header, footer, focus_part='body')
     frame.attr = 'body'
     self._helpView = frame
 
   def _createAboutView(self):
     divider = urwidm.Divider()
-    name = urwidm.TextMore(('strong', _("BootSetup curses, version {ver}").format(ver = self._version)), align = "center")
-    comments = urwidm.TextMore(('body', _("Helps set up a bootloader like LiLo or Grub2.")), align = "center")
-    copyright = urwidm.TextMore(('copyright', "Copyright © 2013-2014 Salix OS"), align = "center")
-    license = urwidm.TextMore(('copyright', "GPL v2+"), align = "center")
-    url = urwidm.TextMore(('strong', "http://salixos.org"), align = "center")
-    authors = urwidm.TextMore(('authors', _("Authors:") + "\n" + _("Cyrille Pontvieux <jrd~at~enialis~dot~net>\nPierrick Le Brun <akuna~at~salixos~dot~org>")), align = "center")
-    translators = urwidm.TextMore(('translators', _("Translators:") + "\n" + _("translator_name <translator@email.com>")), align = "center")
+    name = urwidm.TextMore(('strong', _("BootSetup curses, version {ver}").format(ver=__version__)), align="center")
+    comments = urwidm.TextMore(('body', _("Helps set up a bootloader like LiLo or Grub2.")), align="center")
+    copyright = urwidm.TextMore(('copyright', __copyright__), align="center")
+    license = urwidm.TextMore(('copyright', __license__), align="center")
+    url = urwidm.TextMore(('strong', "http://salixos.org"), align="center")
+    authors = urwidm.TextMore(('authors', _("Authors:") + "\n" + __author__.replace(', ', '\n')), align="center")
+    translators = urwidm.TextMore(('translators', _("Translators:") + "\n" + _("translator_name <translator@email.com>")), align="center")
     bodyPile = urwidm.PileMore([divider, name, comments, divider, copyright, license, divider, url, divider, authors, translators])
     bodyPile.attr = 'body'
-    body = urwidm.FillerMore(bodyPile, valign = "top")
+    body = urwidm.FillerMore(bodyPile, valign="top")
     body.attr = 'body'
-    txtTitle = urwidm.Text(_("About BootSetup"), align = "center")
-    header = urwidm.PileMore([urwidm.Divider(), txtTitle, urwidm.Text('─' * (len(txtTitle.text) + 2), align = "center")])
+    txtTitle = urwidm.Text(_("About BootSetup"), align="center")
+    header = urwidm.PileMore([urwidm.Divider(), txtTitle, urwidm.Text('─' * (len(txtTitle.text) + 2), align="center")])
     header.attr = 'header'
     keys = [
         (('q', 'esc', 'enter'), _("Close")),
       ]
-    keysColumns = urwidm.OptCols(keys, self._handleKeys, attrs = ('footer_key', 'footer'))
+    keysColumns = urwidm.OptCols(keys, self._handleKeys, attrs=('footer_key', 'footer'))
     keysColumns.attr = 'footer'
     footer = urwidm.PileMore([urwidm.Divider('⎽'), keysColumns])
     footer.attr = 'footer'
-    frame = urwidm.FrameMore(body, header, footer, focus_part = 'body')
+    frame = urwidm.FrameMore(body, header, footer, focus_part='body')
     frame.attr = 'body'
     self._aboutView = frame
 
@@ -280,20 +282,20 @@ a boot menu if several operating systems are available on the same computer.")
         dev = p[0]
         fs = p[1]
         ostype = p[3]
-        label = re.sub(r'[()]', '', re.sub(r'_\(loader\)', '', re.sub(' ', '_', p[4]))) # lilo does not like spaces and pretty print the label
+        label = re.sub(r'[()]', '', re.sub(r'_\(loader\)', '', re.sub(' ', '_', p[4])))  # lilo does not like spaces and pretty print the label
         listDev.append(urwidm.TextMore(dev))
         listFS.append(urwidm.TextMore(fs))
         listType.append(urwidm.TextMore(ostype))
         self._labelPerDevice[dev] = label
-        editLabel = self._createEdit(edit_text = label, wrap = urwidm.CLIP)
+        editLabel = self._createEdit(edit_text=label, wrap=urwidm.CLIP)
         urwidm.connect_signal(editLabel, 'change', self._onLabelChange, dev)
         urwidm.connect_signal(editLabel, 'focusgain', self._onHelpFocusGain, 'lilotable')
         urwidm.connect_signal(editLabel, 'focuslost', self._onLabelFocusLost, dev)
         listLabel.append(editLabel)
-        btnUp = self._createButton("↑", on_press = self._moveLineUp, user_data = p[0])
+        btnUp = self._createButton("↑", on_press=self._moveLineUp, user_data=p[0])
         self._installHelpContext(btnUp, 'liloup')
         listActionUp.append(btnUp)
-        btnDown = self._createButton("↓", on_press = self._moveLineDown, user_data = p[0])
+        btnDown = self._createButton("↓", on_press=self._moveLineDown, user_data=p[0])
         self._installHelpContext(btnDown, 'lilodown')
         listActionDown.append(btnDown)
       colDev = urwidm.PileMore(listDev)
@@ -305,13 +307,13 @@ a boot menu if several operating systems are available on the same computer.")
       urwidm.connect_signal(colLabel, 'focuslost', self._onLiloColumnFocusLost, [colLabel, colActionUp, colActionDown])
       urwidm.connect_signal(colActionUp, 'focuslost', self._onLiloColumnFocusLost, [colLabel, colActionUp, colActionDown])
       urwidm.connect_signal(colActionDown, 'focuslost', self._onLiloColumnFocusLost, [colLabel, colActionUp, colActionDown])
-      self._liloTable = urwidm.ColumnsMore([('fixed', max(6, len(listDevTitle)), colDev), ('fixed', max(6, len(listFSTitle)), colFS), colType, ('fixed', max(self._liloMaxChars + 1, len(listLabelTitle)), colLabel), ('fixed', 5, colActionUp), ('fixed', 5, colActionDown)], dividechars = 1)
+      self._liloTable = urwidm.ColumnsMore([('fixed', max(6, len(listDevTitle)), colDev), ('fixed', max(6, len(listFSTitle)), colFS), colType, ('fixed', max(self._liloMaxChars + 1, len(listLabelTitle)), colLabel), ('fixed', 5, colActionUp), ('fixed', 5, colActionDown)], dividechars=1)
       self._liloTableLines = urwidm.LineBoxMore(self._liloTable)
       self._liloTableLines.sensitive_attr = "strong"
       self._liloTableLines.unsensitive_attr = "unfocusable"
-      self._liloBtnEdit = self._createButton(_("_Edit configuration").replace("_", ""), on_press = self._editLiLoConf)
+      self._liloBtnEdit = self._createButton(_("_Edit configuration").replace("_", ""), on_press=self._editLiLoConf)
       self._installHelpContext(self._liloBtnEdit, 'liloedit')
-      self._liloBtnCancel = self._createButton(_("_Undo configuration").replace("_", ""), on_press = self._cancelLiLoConf)
+      self._liloBtnCancel = self._createButton(_("_Undo configuration").replace("_", ""), on_press=self._cancelLiLoConf)
       self._installHelpContext(self._liloBtnCancel, 'lilocancel')
       self._liloButtons = self._createCenterButtonsWidget([self._liloBtnEdit, self._liloBtnCancel])
       pile = urwidm.PileMore([self._liloTableLines, self._liloButtons])
@@ -321,24 +323,25 @@ a boot menu if several operating systems are available on the same computer.")
       comboBox = self._createComboBox(_("Install Grub2 files on:"), self.cfg.partitions)
       urwidm.connect_signal(comboBox, 'change', self._onGrub2FilesChange)
       self._installHelpContext(comboBox, 'partition')
-      self._grub2BtnEdit = self._createButton(_("_Edit configuration").replace("_", ""), on_press = self._editGrub2Conf)
+      self._grub2BtnEdit = self._createButton(_("_Edit configuration").replace("_", ""), on_press=self._editGrub2Conf)
       self._installHelpContext(self._grub2BtnEdit, 'grub2edit')
       pile = urwidm.PileMore([comboBox, self._createCenterButtonsWidget([self._grub2BtnEdit])])
       self._onGrub2FilesChange(comboBox, comboBox.selected_item[0], None)
       return pile
     else:
       return urwidm.Text("")
+
   def _onLiloColumnFocusLost(self, widget, columnWidgets):
     pos = widget.get_focus_pos()
     for cw in columnWidgets:
-      cw.focus_item = cw.widget_list[pos] # set focus item directly without using set_focus method to prevent FG/FL events
+      cw.focus_item = cw.widget_list[pos]  # set focus item directly without using set_focus method to prevent FG/FL events
     return True
 
   def _changeBootloaderSection(self):
     self._bootloaderSection.original_widget = self._createBootloaderSectionView()
 
   def _handleKeys(self, key):
-    if not isinstance(key, tuple): # only keyboard input
+    if not isinstance(key, tuple):  # only keyboard input
       key = key.lower()
       if self._mode == 'main':
         if key in ('h', 'f2'):
@@ -448,6 +451,7 @@ click on this button to install your bootloader.")
       return 'max'
     else:
       return 'ok'
+
   def _showLabelError(self, errorType, editLabel):
     """Show a label error if the errorType is 'space' or 'max' and return True, else return False."""
     if errorType == 'space':
@@ -455,14 +459,15 @@ click on this button to install your bootloader.")
       editLabel.sensitive_attr = ('error', 'focus_error')
       return True
     elif errorType == 'max':
-      self._errorDialog(_("\nAn Operating System label should not be more than {max} characters long.\n\nPlease check and correct.\n".format(max = self._liloMaxChars)))
+      self._errorDialog(_("\nAn Operating System label should not be more than {max} characters long.\n\nPlease check and correct.\n".format(max=self._liloMaxChars)))
       editLabel.sensitive_attr = ('error', 'focus_error')
       return True
     elif errorType == 'pass':
       return False
-    else: # == 'ok'
+    else:  # == 'ok'
       editLabel.sensitive_attr = ('focusable', 'focus_edit')
       return False
+
   def _onLabelChange(self, editLabel, newText, device):
     validOld = self._isLabelValid(editLabel.edit_text)
     if validOld == 'ok':
@@ -471,13 +476,14 @@ click on this button to install your bootloader.")
       validNew = 'pass'
     if not self._showLabelError(validNew, editLabel):
       self._labelPerDevice[device] = newText
+
   def _onLabelFocusLost(self, editLabel, device):
     return not self._showLabelError(self._isLabelValid(editLabel.edit_text), editLabel)
 
   def _findDevPosition(self, device):
     colDevice = self._liloTable.widget_list[0]
     for i, line in enumerate(colDevice.widget_list):
-      if i == 0: # skip header
+      if i == 0:  # skip header
         continue
       if line.text == device:
         return i
@@ -485,7 +491,7 @@ click on this button to install your bootloader.")
 
   def _moveLineUp(self, button, device):
     pos = self._findDevPosition(device)
-    if pos > 1: # 0 = header
+    if pos > 1:  # 0 = header
       for col, types in self._liloTable.contents:
         old = col.widget_list[pos]
         del col.widget_list[pos]
@@ -549,6 +555,7 @@ click on this button to install your bootloader.")
     elif hasattr(w, "cells"):
       for w2 in w.cells:
         self._set_sensitive_rec(w2, state)
+
   def _updateLiLoButtons(self):
     self._set_sensitive_rec(self._liloTable, not self._custom_lilo)
     self._liloTableLines.sensitive = not self._custom_lilo
@@ -563,7 +570,7 @@ click on this button to install your bootloader.")
       self._updateGrub2EditButton(False)
       return False
 
-  def _updateGrub2EditButton(self, doTest = True):
+  def _updateGrub2EditButton(self, doTest=True):
     if doTest:
       partition = os.path.join("/dev", self.cfg.cur_boot_partition)
       if slt.isMounted(partition):
index f1bbafb..1871f41 100644 (file)
@@ -6,13 +6,14 @@ Graphical BootSetup configuration gathering.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-__copyright__ = 'Copyright 2013-2014, Salix OS'
-__license__ = 'GPL2+'
+from .__init__ import __version__, __copyright__, __author__
 
 import gettext  # noqa
 import gobject
 import gtk
 import gtk.glade
+import os
+import sys
 import re
 import libsalt as slt
 from .config import Config
@@ -24,14 +25,14 @@ class GatherGui:
   """
   GUI to gather information about the configuration to setup.
   """
-  
+
   _lilo = None
   _grub2 = None
   _editing = False
   _custom_lilo = False
   _editors = ['leafpad', 'gedit', 'geany', 'kate', 'xterm -e nano']
 
-  def __init__(self, bootsetup, version, bootloader = None, target_partition = None, is_test = False, use_test_data = False):
+  def __init__(self, bootsetup, bootloader=None, target_partition=None, is_test=False, use_test_data=False):
     self._bootsetup = bootsetup
     self.cfg = Config(bootloader, target_partition, is_test, use_test_data)
     print("""
@@ -41,16 +42,17 @@ MBR device         = {mbr}
 disks:{disks}
 partitions:{partitions}
 boot partitions:{boot_partitions}
-""".format(bootloader = self.cfg.cur_bootloader, partition = self.cfg.cur_boot_partition, mbr = self.cfg.cur_mbr_device, disks = "\n - " + "\n - ".join(map(" ".join, self.cfg.disks)), partitions = "\n - " + "\n - ".join(map(" ".join, self.cfg.partitions)), boot_partitions = "\n - " + "\n - ".join(map(" ".join, self.cfg.boot_partitions))))
+""".format(bootloader=self.cfg.cur_bootloader, partition=self.cfg.cur_boot_partition, mbr=self.cfg.cur_mbr_device, disks="\n - " + "\n - ".join(map(" ".join, self.cfg.disks)), partitions="\n - " + "\n - ".join(map(" ".join, self.cfg.partitions)), boot_partitions="\n - " + "\n - ".join(map(" ".join, self.cfg.boot_partitions))))
     builder = gtk.Builder()
-    for d in ('./resources', '../resources'):
-      if os.path.exists(d + '/bootsetup.glade'):
-        builder.add_from_file(d + '/bootsetup.glade')
-        break
+    if os.path.exists('bootsetup.glade'):
+      builder.add_from_file('bootsetup.glade')
+    else:
+      raise Exception("bootsetup.glade not found")
     # Get a handle on the glade file widgets we want to interact with
     self.AboutDialog = builder.get_object("about_dialog")
-    self.AboutDialog.set_version(version)
+    self.AboutDialog.set_version(__version__)
     self.AboutDialog.set_copyright(__copyright__)
+    self.AboutDialog.set_authors(__author__)
     self.Window = builder.get_object("bootsetup_main")
     self.LabelContextHelp = builder.get_object("label_context_help")
     self.RadioNone = builder.get_object("radiobutton_none")
@@ -134,7 +136,7 @@ not be displayed in the bootloader menu.\n\
 If several kernels are available within one partition, the label you have chosen for that \
 partition will be appended numerically to create multiple menu entries for each of these kernels.\n\
 Any of these settings can be edited manually in the configuration file."))
-  
+
   def on_up_button_enter_notify_event(self, widget, data=None):
     self.LabelContextHelp.set_markup(_("Use this arrow if you want to move the \
 selected Operating System up to a higher rank.\n\
@@ -174,8 +176,6 @@ it's automatically done by Grub2."))
     self.LabelContextHelp.set_markup(_("Once you have defined your settings, \
 click on this button to install your bootloader."))
 
-
-
   def build_data_stores(self):
     print('Building choice lists…', end='')
     sys.stdout.flush()
@@ -196,14 +196,14 @@ click on this button to install your bootloader."))
     self.PartitionListStore.clear()
     self.BootPartitionListStore.clear()
     for d in self.cfg.disks:
-      self.DiskListStore.append(d)
-    for p in self.cfg.partitions: # for grub2
+      self.DiskListStore.append([d[0], d[2]])
+    for p in self.cfg.partitions:  # for grub2
       self.PartitionListStore.append(p)
-    for p in self.cfg.boot_partitions: # for lilo
-      p2 = list(p) # copy p
-      del p2[2] # discard boot type
-      p2[3] = re.sub(r'[()]', '', re.sub(r'_\(loader\)', '', re.sub(' ', '_', p2[3]))) # lilo does not like spaces and pretty print the label
-      p2.append('gtk-edit') # add a visual
+    for p in self.cfg.boot_partitions:  # for lilo
+      p2 = list(p)  # copy p
+      del p2[2]  # discard boot type
+      p2[3] = re.sub(r'[()]', '', re.sub(r'_\(loader\)', '', re.sub(' ', '_', p2[3])))  # lilo does not like spaces and pretty print the label
+      p2.append('gtk-edit')  # add a visual
       self.BootPartitionListStore.append(p2)
     self.ComboBoxMbrEntry.set_text(self.cfg.cur_mbr_device)
     self.ComboBoxPartitionEntry.set_text(self.cfg.cur_boot_partition)
@@ -402,7 +402,7 @@ click on this button to install your bootloader."))
   def on_combobox_partition_changed(self, widget, data=None):
     self.cfg.cur_boot_partition = self.ComboBoxPartitionEntry.get_text()
     self.update_buttons()
-  
+
   def on_grub2_edit_button_clicked(self, widget, data=None):
     partition = os.path.join("/dev", self.cfg.cur_boot_partition)
     if slt.isMounted(partition):
index e2b3497..5152e03 100644 (file)
@@ -6,9 +6,6 @@ Grub2 for BootSetup.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-__copyright__ = 'Copyright 2013-2014, Salix OS'
-__license__ = 'GPL2+'
-
 import tempfile
 import os
 import sys
index d643a3d..bc5c44b 100644 (file)
@@ -6,9 +6,6 @@ LiLo for BootSetup.
 """
 from __future__ import unicode_literals, print_function, division, absolute_import
 
-__copyright__ = 'Copyright 2013-2014, Salix OS'
-__license__ = 'GPL2+'
-
 import sys
 import tempfile
 import shutil
diff --git a/bootsetup/resources/bootsetup.png b/bootsetup/resources/bootsetup.png
deleted file mode 120000 (symlink)
index 3d48462..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../../data/icons/bootsetup-128.png
\ No newline at end of file
diff --git a/clean.sh b/clean.sh
deleted file mode 100755 (executable)
index e99b55b..0000000
--- a/clean.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-cd $(dirname "$0")
-find . -type f -name '*.pyc' -delete
-find . -type f -name '*.mo' -delete
-[ -d data/locale ] && rm -r data/locale
-[ -d build ] && rm -r build
diff --git a/compile.sh b/compile.sh
deleted file mode 100755 (executable)
index 059c1cf..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-cd $(dirname $0)
-[ -d build ] && rm -r build
-mkdir build
-for p in data/po/*.po; do
-  l=$(basename $p .po)
-       echo "Compiling $l language"
-       msgfmt $p -o build/$l.mo || exit 1
-done
-intltool-merge data/po/ -d -u data/bootsetup.desktop.in build/bootsetup.desktop || exit 1
-cat <<'EOF' > build/bootsetup
-#!/bin/sh
-exec python /usr/share/bootsetup/bootsetup.py "$@"
-EOF
diff --git a/make b/make
index 35e3575..ae70f82 100755 (executable)
--- a/make
+++ b/make
@@ -16,16 +16,21 @@ os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
 
 def usage():
   print("""\
-Usage: make ACTION
+Usage: make ACTION [OPTIONS]
 ACTION:
   clean: clean the mess
   build: create a .whl (python wheel) file
   install [global]: install the wheel file, eventually globaly
   info: information about {0}, if installed
+OPTIONS:
+  --help, -h: this help
+  --verbose, -v: be verbose
 """.format(MODULE_NAME))
 
 
-def clean():
+def clean(verbose=False):
+  if verbose:
+    print("Removing wheelhouse")
   shutil.rmtree('wheelhouse', True)
 
 
@@ -34,18 +39,23 @@ def pip_run(*args):
   pip.logger.consumers = []  # correct an error on multile call to pip.main
 
 
-def build():
-  clean()
-  pip_run('wheel', '.')
+def build(verbose=False):
+  clean(verbose=verbose)
+  args = ['wheel', '.']
+  if verbose:
+    args.append('-v')
+  pip_run(*args)
 
 
-def install(local=True):
-  build()
+def install(isLocal, verbose=False):
+  build(verbose=verbose)
   wheel_file = glob('wheelhouse/*.whl')[0]
   args = ['install', '--upgrade', '--force-reinstall']
-  if local:
+  if isLocal:
     args.append('--user')
   args.append(wheel_file)
+  if verbose:
+    args.append('-v')
   pip_run(*args)
 
 
@@ -57,26 +67,50 @@ def info():
     sys.exit(1)
 
 args = sys.argv[1:]
+all_options = {'h': 'help', 'v': 'verbose'}
+options = {}
+n = len(args)
+for i in range(0, n):
+  j = n - i - 1
+  arg = args[j]
+  if len(arg) >= 2:
+    if arg[0:2] == '--':
+      option = arg[2:]
+      if option in all_options.values():
+        options[option] = True
+        del args[j]
+      else:
+        raise Exception('Option {0} not recognized'.format(arg))
+    elif arg[0] == '-':
+      option = arg[1:]
+      if option in all_options.keys():
+        options[all_options[option]] = True
+        del args[j]
+      else:
+        raise Exception('Option {0} not recognized'.format(arg))
+if 'help' in options:
+  usage()
+  sys.exit(0)
 if not args:
   args = ['build']
 while args:
   arg = args[0]
   args = args[1:]
-  if arg == 'help' or arg == '--help':
+  if arg == 'help':
     usage()
     sys.exit(0)
   elif arg == 'clean':
-    clean()
+    clean(**options)
   elif arg == 'build':
-    build()
+    build(**options)
   elif arg == 'install':
     if args and args[0] == 'global':
       args = args[1:]
-      install(False)
+      install(isLocal=False, **options)
     else:
-      install()
+      install(isLocal=True, **options)
   elif arg == 'info':
-    info()
+    info(**options)
   else:
     usage()
     sys.exit(1)
index bce427c..293ef99 100644 (file)
@@ -4,7 +4,7 @@ Encoding=UTF-8
 GenericName=BootSetup
 _Name=BootSetup
 _Comment=Install a bootloader, LiLo or Grub2
-Exec=gnsu /usr/sbin/bootsetup
+Exec=gnsu -E bootsetup
 Icon=bootsetup
 Terminal=false
 StartupNotify=true
index f57d7e3..460f3cb 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-12-20 09:22-0300\n"
+"POT-Creation-Date: 2014-06-11 00:39+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,106 +17,106 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/resources/bootsetup.glade:10 src/lib/gathercurses.py:246
+#: bootsetup/bootsetup.glade:10 bootsetup/gathercurses.py:248
 msgid "About BootSetup"
 msgstr ""
 
-#: src/resources/bootsetup.glade:22 src/lib/gathercurses.py:236
+#: bootsetup/bootsetup.glade:22 bootsetup/gathercurses.py:238
 msgid "Helps set up a bootloader like LiLo or Grub2."
 msgstr ""
 
 #. Define your name and email here.
-#: src/resources/bootsetup.glade:44 src/lib/gathercurses.py:241
+#: bootsetup/bootsetup.glade:44 bootsetup/gathercurses.py:243
 msgid "translator_name <translator@email.com>"
 msgstr ""
 
-#: src/resources/bootsetup.glade:194 data/bootsetup.desktop.in.h:1
+#: bootsetup/bootsetup.glade:194 resources/bootsetup.desktop.in.h:1
 msgid "BootSetup"
 msgstr ""
 
-#: src/resources/bootsetup.glade:352 src/lib/gathercurses.py:261
+#: bootsetup/bootsetup.glade:346 bootsetup/gathercurses.py:263
 msgid "Install bootloader on:"
 msgstr ""
 
-#: src/resources/bootsetup.glade:426 src/lib/gathercurses.py:269
+#: bootsetup/bootsetup.glade:420 bootsetup/gathercurses.py:270
 msgid "Partition"
 msgstr ""
 
-#: src/resources/bootsetup.glade:438 src/lib/gathercurses.py:270
+#: bootsetup/bootsetup.glade:432 bootsetup/gathercurses.py:271
 msgid "File system"
 msgstr ""
 
-#: src/resources/bootsetup.glade:450 src/lib/gathercurses.py:274
+#: bootsetup/bootsetup.glade:444 bootsetup/gathercurses.py:275
 msgid "Operating system"
 msgstr ""
 
-#: src/resources/bootsetup.glade:463 src/lib/gathercurses.py:271
+#: bootsetup/bootsetup.glade:457 bootsetup/gathercurses.py:272
 msgid "Boot menu label"
 msgstr ""
 
-#: src/resources/bootsetup.glade:591 src/lib/gathercurses.py:314
+#: bootsetup/bootsetup.glade:582 bootsetup/gathercurses.py:317
 msgid "_Undo configuration"
 msgstr ""
 
-#: src/resources/bootsetup.glade:640 src/resources/bootsetup.glade:774
-#: src/lib/gathercurses.py:311 src/lib/gathercurses.py:326
+#: bootsetup/bootsetup.glade:630 bootsetup/bootsetup.glade:763
+#: bootsetup/gathercurses.py:315 bootsetup/gathercurses.py:327
 msgid "_Edit configuration"
 msgstr ""
 
-#: src/resources/bootsetup.glade:697 src/lib/gathercurses.py:322
+#: bootsetup/bootsetup.glade:687 bootsetup/gathercurses.py:324
 msgid "Install Grub2 files on:"
 msgstr ""
 
-#: src/resources/bootsetup.glade:874 src/lib/gathercurses.py:201
+#: bootsetup/bootsetup.glade:861 bootsetup/gathercurses.py:204
 msgid "_Install bootloader"
 msgstr ""
 
-#: src/bootsetup.py:116 src/bootsetup.py:123
+#: bootsetup/bootsetup.py:117 bootsetup/bootsetup.py:124
 msgid "Unrecognized parameter '{0}'."
 msgstr ""
 
-#: src/bootsetup.py:125
+#: bootsetup/bootsetup.py:126
 msgid "bootloader parameter should be lilo, grub2 or '_', given {0}."
 msgstr ""
 
-#: src/bootsetup.py:129
+#: bootsetup/bootsetup.py:130
 msgid "Partition {0} not found."
 msgstr ""
 
-#: src/lib/bootsetup_curses.py:32 src/lib/bootsetup_gtk.py:25
+#: bootsetup/bootsetup_curses.py:28 bootsetup/bootsetup_gtk.py:29
 msgid "Root privileges are required to run this program."
 msgstr ""
 
-#: src/lib/bootsetup_curses.py:32 src/lib/bootsetup_gtk.py:25
+#: bootsetup/bootsetup_curses.py:28 bootsetup/bootsetup_gtk.py:29
 msgid "Sorry!"
 msgstr ""
 
-#: src/lib/bootsetup_curses.py:55
+#: bootsetup/bootsetup_curses.py:51
 msgid "INFO"
 msgstr ""
 
-#: src/lib/bootsetup_curses.py:61
+#: bootsetup/bootsetup_curses.py:57
 msgid "ERROR"
 msgstr ""
 
-#: src/lib/gathercurses.py:167 src/lib/gathercurses.py:235
+#: bootsetup/gathercurses.py:171 bootsetup/gathercurses.py:237
 msgid "BootSetup curses, version {ver}"
 msgstr ""
 
-#: src/lib/gathercurses.py:172 src/lib/gathercurses.py:219
+#: bootsetup/gathercurses.py:176 bootsetup/gathercurses.py:221
 msgid "Help"
 msgstr ""
 
-#: src/lib/gathercurses.py:173
+#: bootsetup/gathercurses.py:177
 msgid "About"
 msgstr ""
 
-#: src/lib/gathercurses.py:174
+#: bootsetup/gathercurses.py:178
 msgid "Quit"
 msgstr ""
 
-#: src/lib/gathercurses.py:181 src/lib/gathercurses.py:360
-#: src/lib/gathergui.py:86
+#: bootsetup/gathercurses.py:185 bootsetup/gathercurses.py:366
+#: bootsetup/gathergui.py:89
 msgid ""
 "<b>BootSetup will install a new bootloader on your computer.</b> \n"
 "\n"
@@ -125,29 +125,23 @@ msgid ""
 "available on the same computer."
 msgstr ""
 
-#: src/lib/gathercurses.py:189
+#: bootsetup/gathercurses.py:193
 msgid "Bootloader:"
 msgstr ""
 
-#: src/lib/gathercurses.py:223 src/lib/gathercurses.py:250
+#: bootsetup/gathercurses.py:225 bootsetup/gathercurses.py:252
 msgid "Close"
 msgstr ""
 
-#: src/lib/gathercurses.py:240
+#: bootsetup/gathercurses.py:242
 msgid "Authors:"
 msgstr ""
 
-#: src/lib/gathercurses.py:240
-msgid ""
-"Cyrille Pontvieux <jrd~at~enialis~dot~net>\n"
-"Pierrick Le Brun <akuna~at~salixos~dot~org>"
-msgstr ""
-
-#: src/lib/gathercurses.py:241
+#: bootsetup/gathercurses.py:243
 msgid "Translators:"
 msgstr ""
 
-#: src/lib/gathercurses.py:365
+#: bootsetup/gathercurses.py:371
 msgid ""
 "Here you can choose between LiLo or Grub2 bootloader.\n"
 "Both will boot your Linux and (if applicable) Windows.\n"
@@ -157,13 +151,13 @@ msgid ""
 "blocklists)."
 msgstr ""
 
-#: src/lib/gathercurses.py:370 src/lib/gathergui.py:126
+#: bootsetup/gathercurses.py:376 bootsetup/gathergui.py:129
 msgid ""
 "Select the device that will contain your bootloader.\n"
 "This is commonly the device you set your Bios to boot on."
 msgstr ""
 
-#: src/lib/gathercurses.py:373 src/lib/gathergui.py:130
+#: bootsetup/gathercurses.py:379 bootsetup/gathergui.py:133
 msgid ""
 "Here you must define a boot menu label for each of the operating systems "
 "that will be displayed in your bootloader menu.\n"
@@ -175,7 +169,7 @@ msgid ""
 "Any of these settings can be edited manually in the configuration file."
 msgstr ""
 
-#: src/lib/gathercurses.py:381 src/lib/gathergui.py:139
+#: bootsetup/gathercurses.py:387 bootsetup/gathergui.py:142
 msgid ""
 "Use this arrow if you want to move the selected Operating System up to a "
 "higher rank.\n"
@@ -184,7 +178,7 @@ msgid ""
 "Any of these settings can be edited manually in the configuration file."
 msgstr ""
 
-#: src/lib/gathercurses.py:386 src/lib/gathergui.py:145
+#: bootsetup/gathercurses.py:392 bootsetup/gathergui.py:148
 msgid ""
 "Use this arrow if you want to move the selected Operating System down to a "
 "lower rank.\n"
@@ -193,18 +187,18 @@ msgid ""
 "Any of these settings can be edited manually in the configuration file."
 msgstr ""
 
-#: src/lib/gathercurses.py:391 src/lib/gathergui.py:154
+#: bootsetup/gathercurses.py:397 bootsetup/gathergui.py:157
 msgid ""
 "Experienced users can manually edit the LiLo configuration file.\n"
 "Please do not tamper with this file unless you know what you are doing and "
 "you have read its commented instructions regarding chrooted paths."
 msgstr ""
 
-#: src/lib/gathercurses.py:396 src/lib/gathergui.py:151
+#: bootsetup/gathercurses.py:402 bootsetup/gathergui.py:154
 msgid "This will undo all settings (even manual modifications)."
 msgstr ""
 
-#: src/lib/gathercurses.py:398 src/lib/gathergui.py:160
+#: bootsetup/gathercurses.py:404 bootsetup/gathergui.py:163
 msgid ""
 "Select the partition that will contain the Grub2 files.\n"
 "These will be in /boot/grub/. This partition should be readable by Grub2.\n"
@@ -212,20 +206,20 @@ msgid ""
 "have one."
 msgstr ""
 
-#: src/lib/gathercurses.py:402 src/lib/gathergui.py:165
+#: bootsetup/gathercurses.py:408 bootsetup/gathergui.py:168
 msgid ""
 "You can edit the etc/default/grub file for adjusting the Grub2 settings.\n"
 "This will not let you choose the label or the order of the menu entries, "
 "it's automatically done by Grub2."
 msgstr ""
 
-#: src/lib/gathercurses.py:407 src/lib/gathergui.py:174
+#: bootsetup/gathercurses.py:413 bootsetup/gathergui.py:177
 msgid ""
 "Once you have defined your settings, click on this button to install your "
 "bootloader."
 msgstr ""
 
-#: src/lib/gathercurses.py:452 src/lib/gathergui.py:281
+#: bootsetup/gathercurses.py:459 bootsetup/gathergui.py:282
 msgid ""
 "\n"
 "An Operating System label should not contain spaces.\n"
@@ -233,7 +227,7 @@ msgid ""
 "Please check and correct.\n"
 msgstr ""
 
-#: src/lib/gathercurses.py:456 src/lib/gathergui.py:283
+#: bootsetup/gathercurses.py:463 bootsetup/gathergui.py:284
 msgid ""
 "\n"
 "An Operating System label should not be more than {max} characters long.\n"
@@ -241,33 +235,33 @@ msgid ""
 "Please check and correct.\n"
 msgstr ""
 
-#: src/lib/gathercurses.py:514 src/lib/gathergui.py:373
+#: bootsetup/gathercurses.py:523 bootsetup/gathergui.py:374
 msgid ""
 "Sorry, BootSetup is unable to find a Linux filesystem on your choosen boot "
 "entries, so cannot install LiLo.\n"
 msgstr ""
 
-#: src/lib/gathercurses.py:532 src/lib/gathergui.py:385
+#: bootsetup/gathercurses.py:541 bootsetup/gathergui.py:394
 msgid ""
 "Sorry, BootSetup is unable to find a suitable text editor in your system. "
 "You will not be able to manually modify the LiLo configuration.\n"
 msgstr ""
 
-#: src/lib/gathercurses.py:599 src/lib/gathergui.py:411
+#: bootsetup/gathercurses.py:609 bootsetup/gathergui.py:427
 msgid ""
 "Sorry, BootSetup is unable to find a suitable text editor in your system. "
 "You will not be able to manually modify the Grub2 default configuration.\n"
 msgstr ""
 
-#: src/lib/gathercurses.py:614 src/lib/gathergui.py:462
+#: bootsetup/gathercurses.py:624 bootsetup/gathergui.py:478
 msgid "Bootloader installation process completed."
 msgstr ""
 
-#: src/lib/gathergui.py:117
+#: bootsetup/gathergui.py:120
 msgid "About BootSetup."
 msgstr ""
 
-#: src/lib/gathergui.py:120
+#: bootsetup/gathergui.py:123
 msgid ""
 "Here you can choose between LiLo or the Grub2 bootloader.\n"
 "Both will boot your Linux and (if applicable) Windows.\n"
@@ -277,28 +271,20 @@ msgid ""
 "blocklists)."
 msgstr ""
 
-#: src/lib/gathergui.py:171
+#: bootsetup/gathergui.py:174
 msgid "Exit BootSetup program."
 msgstr ""
 
-#: src/lib/gathergui.py:288 src/lib/gathergui.py:297
+#: bootsetup/gathergui.py:289 bootsetup/gathergui.py:298
 msgid "Set..."
 msgstr ""
 
-#: src/lib/gathergui.py:294
+#: bootsetup/gathergui.py:295
 msgid ""
 "You have used the same label for different Operating Systems. Please check "
 "and correct.\n"
 msgstr ""
 
-#: src/lib/urwid_more.py:1221 src/lib/urwid_more.py:1239
-msgid "OK"
-msgstr ""
-
-#: src/lib/urwid_more.py:1245
-msgid "Cancel"
-msgstr ""
-
-#: data/bootsetup.desktop.in.h:2
+#: resources/bootsetup.desktop.in.h:2
 msgid "Install a bootloader, LiLo or Grub2"
 msgstr ""
index f08c127..14ebeaf 100644 (file)
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Salix\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-12-20 09:22-0300\n"
+"POT-Creation-Date: 2014-06-11 00:39+0200\n"
 "PO-Revision-Date: 2013-11-29 14:03+0100\n"
 "Last-Translator: Cyrille Pontvieux <jrd@enialis.net>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/salix/language/"
@@ -22,108 +22,108 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Generator: Poedit 1.5.4\n"
 
-#: src/resources/bootsetup.glade:10 src/lib/gathercurses.py:246
+#: bootsetup/bootsetup.glade:10 bootsetup/gathercurses.py:248
 msgid "About BootSetup"
 msgstr "À propos de BootSetup"
 
-#: src/resources/bootsetup.glade:22 src/lib/gathercurses.py:236
+#: bootsetup/bootsetup.glade:22 bootsetup/gathercurses.py:238
 msgid "Helps set up a bootloader like LiLo or Grub2."
 msgstr "Aide à installer un chargeur de démarrage tel LiLo ou Grub2."
 
 #. Define your name and email here.
-#: src/resources/bootsetup.glade:44 src/lib/gathercurses.py:241
+#: bootsetup/bootsetup.glade:44 bootsetup/gathercurses.py:243
 msgid "translator_name <translator@email.com>"
 msgstr "Cyrille Pontvieux <jrd@enialis.net>"
 
-#: src/resources/bootsetup.glade:194 data/bootsetup.desktop.in.h:1
+#: bootsetup/bootsetup.glade:194 resources/bootsetup.desktop.in.h:1
 msgid "BootSetup"
 msgstr "BootSetup"
 
-#: src/resources/bootsetup.glade:352 src/lib/gathercurses.py:261
+#: bootsetup/bootsetup.glade:346 bootsetup/gathercurses.py:263
 msgid "Install bootloader on:"
 msgstr "Installer le chargeur de démarrage sur :"
 
-#: src/resources/bootsetup.glade:426 src/lib/gathercurses.py:269
+#: bootsetup/bootsetup.glade:420 bootsetup/gathercurses.py:270
 msgid "Partition"
 msgstr "Partition"
 
-#: src/resources/bootsetup.glade:438 src/lib/gathercurses.py:270
+#: bootsetup/bootsetup.glade:432 bootsetup/gathercurses.py:271
 msgid "File system"
 msgstr "Système de fichiers"
 
-#: src/resources/bootsetup.glade:450 src/lib/gathercurses.py:274
+#: bootsetup/bootsetup.glade:444 bootsetup/gathercurses.py:275
 msgid "Operating system"
 msgstr "Système d'exploitation"
 
-#: src/resources/bootsetup.glade:463 src/lib/gathercurses.py:271
+#: bootsetup/bootsetup.glade:457 bootsetup/gathercurses.py:272
 msgid "Boot menu label"
 msgstr "Étiquette du menu"
 
-#: src/resources/bootsetup.glade:591 src/lib/gathercurses.py:314
+#: bootsetup/bootsetup.glade:582 bootsetup/gathercurses.py:317
 msgid "_Undo configuration"
 msgstr "_Annuler la configuration"
 
-#: src/resources/bootsetup.glade:640 src/resources/bootsetup.glade:774
-#: src/lib/gathercurses.py:311 src/lib/gathercurses.py:326
+#: bootsetup/bootsetup.glade:630 bootsetup/bootsetup.glade:763
+#: bootsetup/gathercurses.py:315 bootsetup/gathercurses.py:327
 msgid "_Edit configuration"
 msgstr "_Modifier la configuration"
 
-#: src/resources/bootsetup.glade:697 src/lib/gathercurses.py:322
+#: bootsetup/bootsetup.glade:687 bootsetup/gathercurses.py:324
 msgid "Install Grub2 files on:"
 msgstr "Installer les fichiers de Grub2 sur :"
 
-#: src/resources/bootsetup.glade:874 src/lib/gathercurses.py:201
+#: bootsetup/bootsetup.glade:861 bootsetup/gathercurses.py:204
 msgid "_Install bootloader"
 msgstr "_Installer le gestionnaire de démarrage"
 
-#: src/bootsetup.py:116 src/bootsetup.py:123
+#: bootsetup/bootsetup.py:117 bootsetup/bootsetup.py:124
 msgid "Unrecognized parameter '{0}'."
 msgstr "Paramètre '{0}' non-reconnu."
 
-#: src/bootsetup.py:125
+#: bootsetup/bootsetup.py:126
 msgid "bootloader parameter should be lilo, grub2 or '_', given {0}."
 msgstr ""
 "Le paramètre du bootloader doit être lilo, grub2 ou '_', {0} a été saisi."
 
-#: src/bootsetup.py:129
+#: bootsetup/bootsetup.py:130
 msgid "Partition {0} not found."
 msgstr "Partition {0} non trouvée."
 
-#: src/lib/bootsetup_curses.py:32 src/lib/bootsetup_gtk.py:25
+#: bootsetup/bootsetup_curses.py:28 bootsetup/bootsetup_gtk.py:29
 msgid "Root privileges are required to run this program."
 msgstr ""
 "Les droits d'administrateur (Root) sont requis pour exécuter ce programme."
 
-#: src/lib/bootsetup_curses.py:32 src/lib/bootsetup_gtk.py:25
+#: bootsetup/bootsetup_curses.py:28 bootsetup/bootsetup_gtk.py:29
 msgid "Sorry!"
 msgstr "Désolé !"
 
-#: src/lib/bootsetup_curses.py:55
+#: bootsetup/bootsetup_curses.py:51
 msgid "INFO"
 msgstr "INFO"
 
-#: src/lib/bootsetup_curses.py:61
+#: bootsetup/bootsetup_curses.py:57
 msgid "ERROR"
 msgstr "ERREUR"
 
-#: src/lib/gathercurses.py:167 src/lib/gathercurses.py:235
+#: bootsetup/gathercurses.py:171 bootsetup/gathercurses.py:237
 msgid "BootSetup curses, version {ver}"
 msgstr "BootSetup curses, version {ver}"
 
-#: src/lib/gathercurses.py:172 src/lib/gathercurses.py:219
+#: bootsetup/gathercurses.py:176 bootsetup/gathercurses.py:221
 msgid "Help"
 msgstr "Aide"
 
-#: src/lib/gathercurses.py:173
+#: bootsetup/gathercurses.py:177
 msgid "About"
 msgstr "À propos"
 
-#: src/lib/gathercurses.py:174
+#: bootsetup/gathercurses.py:178
 msgid "Quit"
 msgstr "Quitter"
 
-#: src/lib/gathercurses.py:181 src/lib/gathercurses.py:360
-#: src/lib/gathergui.py:86
+#: bootsetup/gathercurses.py:185 bootsetup/gathercurses.py:366
+#: bootsetup/gathergui.py:89
 msgid ""
 "<b>BootSetup will install a new bootloader on your computer.</b> \n"
 "\n"
@@ -139,29 +139,23 @@ msgstr ""
 "plusieurs systèmes d'exploitation différents sont disponibles sur votre "
 "machine."
 
-#: src/lib/gathercurses.py:189
+#: bootsetup/gathercurses.py:193
 msgid "Bootloader:"
 msgstr "Chargeur de démarrage :"
 
-#: src/lib/gathercurses.py:223 src/lib/gathercurses.py:250
+#: bootsetup/gathercurses.py:225 bootsetup/gathercurses.py:252
 msgid "Close"
 msgstr "Fermer"
 
-#: src/lib/gathercurses.py:240
+#: bootsetup/gathercurses.py:242
 msgid "Authors:"
 msgstr ""
 
-#: src/lib/gathercurses.py:240
-msgid ""
-"Cyrille Pontvieux <jrd~at~enialis~dot~net>\n"
-"Pierrick Le Brun <akuna~at~salixos~dot~org>"
-msgstr ""
-
-#: src/lib/gathercurses.py:241
+#: bootsetup/gathercurses.py:243
 msgid "Translators:"
 msgstr ""
 
-#: src/lib/gathercurses.py:365
+#: bootsetup/gathercurses.py:371
 #, fuzzy
 msgid ""
 "Here you can choose between LiLo or Grub2 bootloader.\n"
@@ -178,7 +172,7 @@ msgstr ""
 "Grub2 est un chargeur de démarrage plein de fonctionnalités et plus robuste "
 "(il ne repose pas sur les « blocklists »)."
 
-#: src/lib/gathercurses.py:370 src/lib/gathergui.py:126
+#: bootsetup/gathercurses.py:376 bootsetup/gathergui.py:129
 msgid ""
 "Select the device that will contain your bootloader.\n"
 "This is commonly the device you set your Bios to boot on."
@@ -186,7 +180,7 @@ msgstr ""
 "Sélectionnez le disque qui contiendra votre chargeur de démarrage.\n"
 "C'est en général le disque sur lequel votre Bios démarre."
 
-#: src/lib/gathercurses.py:373 src/lib/gathergui.py:130
+#: bootsetup/gathercurses.py:379 bootsetup/gathergui.py:133
 msgid ""
 "Here you must define a boot menu label for each of the operating systems "
 "that will be displayed in your bootloader menu.\n"
@@ -208,7 +202,7 @@ msgstr ""
 "Chacun de ces paramètres peut être modifié manuellement dans le fichier de "
 "configuration."
 
-#: src/lib/gathercurses.py:381 src/lib/gathergui.py:139
+#: bootsetup/gathercurses.py:387 bootsetup/gathergui.py:142
 msgid ""
 "Use this arrow if you want to move the selected Operating System up to a "
 "higher rank.\n"
@@ -224,7 +218,7 @@ msgstr ""
 "Chacun de ces paramètres peut être modifié manuellement dans le fichier de "
 "configuration."
 
-#: src/lib/gathercurses.py:386 src/lib/gathergui.py:145
+#: bootsetup/gathercurses.py:392 bootsetup/gathergui.py:148
 msgid ""
 "Use this arrow if you want to move the selected Operating System down to a "
 "lower rank.\n"
@@ -239,7 +233,7 @@ msgstr ""
 "Chacun de ces paramètres peut être modifié manuellement dans le fichier de "
 "configuration."
 
-#: src/lib/gathercurses.py:391 src/lib/gathergui.py:154
+#: bootsetup/gathercurses.py:397 bootsetup/gathergui.py:157
 msgid ""
 "Experienced users can manually edit the LiLo configuration file.\n"
 "Please do not tamper with this file unless you know what you are doing and "
@@ -252,12 +246,12 @@ msgstr ""
 "instructions 'commentées' au sujet des chemins d'accès de la partition "
 "'chrootée'."
 
-#: src/lib/gathercurses.py:396 src/lib/gathergui.py:151
+#: bootsetup/gathercurses.py:402 bootsetup/gathergui.py:154
 msgid "This will undo all settings (even manual modifications)."
 msgstr ""
 "Cette action annulera tout le paramétrage (même vos modifications manuelles)."
 
-#: src/lib/gathercurses.py:398 src/lib/gathergui.py:160
+#: bootsetup/gathercurses.py:404 bootsetup/gathergui.py:163
 msgid ""
 "Select the partition that will contain the Grub2 files.\n"
 "These will be in /boot/grub/. This partition should be readable by Grub2.\n"
@@ -270,7 +264,7 @@ msgstr ""
 "Il est recommandé d'utiliser votre partition /, ou votre partition /boot si "
 "vous en avez une."
 
-#: src/lib/gathercurses.py:402 src/lib/gathergui.py:165
+#: bootsetup/gathercurses.py:408 bootsetup/gathergui.py:168
 msgid ""
 "You can edit the etc/default/grub file for adjusting the Grub2 settings.\n"
 "This will not let you choose the label or the order of the menu entries, "
@@ -281,7 +275,7 @@ msgstr ""
 "Cela ne vous permettra pas de choisir l'étiquette ou l'ordre des entrées du "
 "menu, ceci est automatiquement réalisé par Grub2."
 
-#: src/lib/gathercurses.py:407 src/lib/gathergui.py:174
+#: bootsetup/gathercurses.py:413 bootsetup/gathergui.py:177
 msgid ""
 "Once you have defined your settings, click on this button to install your "
 "bootloader."
@@ -289,7 +283,7 @@ msgstr ""
 "Après avoir défini vos paramètres, veuillez cliquer sur ce bouton afin de "
 "démarrer l'installation de votre chargeur de démarrage."
 
-#: src/lib/gathercurses.py:452 src/lib/gathergui.py:281
+#: bootsetup/gathercurses.py:459 bootsetup/gathergui.py:282
 #, fuzzy
 msgid ""
 "\n"
@@ -302,7 +296,7 @@ msgstr ""
 "\n"
 "Veuillez vérifier et corriger.\n"
 
-#: src/lib/gathercurses.py:456 src/lib/gathergui.py:283
+#: bootsetup/gathercurses.py:463 bootsetup/gathergui.py:284
 #, fuzzy
 msgid ""
 "\n"
@@ -316,7 +310,7 @@ msgstr ""
 "\n"
 "Veuillez vérifier et corriger.\n"
 
-#: src/lib/gathercurses.py:514 src/lib/gathergui.py:373
+#: bootsetup/gathercurses.py:523 bootsetup/gathergui.py:374
 msgid ""
 "Sorry, BootSetup is unable to find a Linux filesystem on your choosen boot "
 "entries, so cannot install LiLo.\n"
@@ -324,7 +318,7 @@ msgstr ""
 "Désolé, BootSetup n'a pas trouvé de système de fichiers Linux parmi vos "
 "entrées de démarrage, et ne peut donc installer LiLo.\n"
 
-#: src/lib/gathercurses.py:532 src/lib/gathergui.py:385
+#: bootsetup/gathercurses.py:541 bootsetup/gathergui.py:394
 msgid ""
 "Sorry, BootSetup is unable to find a suitable text editor in your system. "
 "You will not be able to manually modify the LiLo configuration.\n"
@@ -333,7 +327,7 @@ msgstr ""
 "système. Il vous sera impossible de modifier la configuration de Lilo "
 "manuellement.\n"
 
-#: src/lib/gathercurses.py:599 src/lib/gathergui.py:411
+#: bootsetup/gathercurses.py:609 bootsetup/gathergui.py:427
 msgid ""
 "Sorry, BootSetup is unable to find a suitable text editor in your system. "
 "You will not be able to manually modify the Grub2 default configuration.\n"
@@ -342,15 +336,15 @@ msgstr ""
 "système. Il vous sera impossible de modifier la configuration par défaut de "
 "Grub2 manuellement.\n"
 
-#: src/lib/gathercurses.py:614 src/lib/gathergui.py:462
+#: bootsetup/gathercurses.py:624 bootsetup/gathergui.py:478
 msgid "Bootloader installation process completed."
 msgstr "Installation du chargeur de démarrage terminée."
 
-#: src/lib/gathergui.py:117
+#: bootsetup/gathergui.py:120
 msgid "About BootSetup."
 msgstr "À propos de BootSetup."
 
-#: src/lib/gathergui.py:120
+#: bootsetup/gathergui.py:123
 #, fuzzy
 msgid ""
 "Here you can choose between LiLo or the Grub2 bootloader.\n"
@@ -367,15 +361,15 @@ msgstr ""
 "Grub2 est un chargeur de démarrage plein de fonctionnalités et plus robuste "
 "(il ne repose pas sur les « blocklists »)."
 
-#: src/lib/gathergui.py:171
+#: bootsetup/gathergui.py:174
 msgid "Exit BootSetup program."
 msgstr "Quitter le programme BootSetup."
 
-#: src/lib/gathergui.py:288 src/lib/gathergui.py:297
+#: bootsetup/gathergui.py:289 bootsetup/gathergui.py:298
 msgid "Set..."
 msgstr "Définir..."
 
-#: src/lib/gathergui.py:294
+#: bootsetup/gathergui.py:295
 #, fuzzy
 msgid ""
 "You have used the same label for different Operating Systems. Please check "
@@ -384,14 +378,12 @@ msgstr ""
 "Vous avez utilisé le même intitulé pour plusieurs systèmes d'exploitation "
 "différents. Veuillez vérifier et corriger.\n"
 
-#: src/lib/urwid_more.py:1221 src/lib/urwid_more.py:1239
-msgid "OK"
-msgstr "Ok"
-
-#: src/lib/urwid_more.py:1245
-msgid "Cancel"
-msgstr "Annuler"
-
-#: data/bootsetup.desktop.in.h:2
+#: resources/bootsetup.desktop.in.h:2
 msgid "Install a bootloader, LiLo or Grub2"
 msgstr "Installer un chargeur de démarrage, LiLo ou Grub2"
+
+#~ msgid "OK"
+#~ msgstr "Ok"
+
+#~ msgid "Cancel"
+#~ msgstr "Annuler"
index 5e40900..94956cb 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,2 +1,2 @@
 [wheel]
-universal = 1
+universal = 0
index 6e43c92..cb06f47 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -1,11 +1,23 @@
 #!/bin/env python
 # coding: utf-8
 # vim:et:sta:sw=2:sts=2:ts=2:tw=0:
+from __future__ import division, print_function, absolute_import
 
+from setuptools import setup
+from distutils import cmd
+from distutils.command.build import build as build_class
+from distutils.command.install import install as install_class
+from distutils.command.install_data import install_data as install_data_class
 import os
 import codecs
 import re
-from setuptools import setup
+from glob import glob
+import polib
+import subprocess as sp
+import shutil
+
+
+MODULE_NAME = 'bootsetup'
 
 
 def read(*paths):
@@ -15,10 +27,23 @@ def read(*paths):
 
 
 def find_info(info, *file_paths):
+  file_paths = list(file_paths)
+  file_paths.append('__init__.py')
   info_file = read(*file_paths)
-  info_match = re.search(r"^__{0}__ = ['\"]([^'\"]*)['\"]".format(info), info_file, re.M)
+  python_simple_string = r"(?:[^'\"\\]*)"
+  python_escapes = r"(?:\\['\"\\])"
+  python_string = r"{delim}((?:{simple}{esc}?)*){delim}".format(delim=r"['\"]", simple=python_simple_string, esc=python_escapes)
+  info_match = re.search(r"^__{0}__ = {1}".format(info, python_string), info_file, re.M)
   if info_match:
     return info_match.group(1)
+  else:
+    python_arrays = r"\[(?:{ps})?((?:, {ps})*)\]".format(ps=python_string)
+    info_match = re.search(r"^__{0}__ = {1}".format(info, python_arrays), info_file, re.M)
+    if info_match:
+      matches = [info_match.group(1)]
+      if info_match.groups(2):
+        matches.extend(re.findall(r", {0}".format(python_string), info_match.group(2)))
+      return ', '.join(matches)
   raise RuntimeError("Unable to find {0} string.".format(info))
 
 
@@ -26,20 +51,130 @@ def find_version(*file_paths):
   return find_info('version', *file_paths)
 
 
+class build_trans(cmd.Command):
+  """
+  Compile .po files to .mo files and .desktop.in to .desktop
+  """
+  description = __doc__
+
+  def initialize_options(self):
+    pass
+
+  def finalize_options(self):
+    pass
+
+  def run(self):
+    po_dir = os.path.join('resources', 'po')
+    for pot_name in [os.path.basename(filename)[:-4] for filename in glob(os.path.join(po_dir, '*.pot'))]:
+      print('* Compiling po files for {0}'.format(pot_name))
+      for po_file in glob(os.path.join(po_dir, '*.po')):
+        lang = os.path.basename(po_file)[:-3]  # len('.po') == 3
+        mo_file = os.path.join('build', 'locale', lang, 'LC_MESSAGES', '{0}.mo'.format(pot_name))
+        mo_dir = os.path.dirname(mo_file)
+        if not os.path.exists(mo_dir):
+          os.makedirs(mo_dir)
+        create_mo = False
+        if not os.path.exists(mo_file):
+          create_mo = True
+        else:
+          po_mtime = os.stat(po_file)[8]
+          mo_mtime = os.stat(mo_file)[8]
+          if po_mtime > mo_mtime:
+            create_mo = True
+        if create_mo:
+          print('** Compiling {0}'.format(po_file))
+          po = polib.pofile(po_file)
+          po.save_as_mofile(mo_file)
+    for in_file in glob(os.path.join('resources', '*.desktop.in')):
+      out_file = os.path.join('build', os.path.basename(in_file)[:-3])  # len('.in') == 3
+      sp.check_call(['intltool-merge', po_dir, '-d', '-u', in_file, out_file])
+
+
+class build_icons(cmd.Command):
+  """
+  Copy icons files to the build directory.
+  """
+  description = __doc__
+
+  def initialize_options(self):
+    pass
+
+  def finalize_options(self):
+    pass
+
+  def run(self):
+    icons_dir = os.path.join('resources', 'icons')
+    for icon in glob(os.path.join(icons_dir, '*.png')):
+      m = re.search(r'^(.+)-([0-9]+)\.png', os.path.basename(icon))
+      if m:
+        name = '{0}.png'.format(m.group(1))
+        size = m.group(2)
+        icon_dir = os.path.join('build', 'icons', 'hicolor', '{0}x{0}'.format(size), 'apps')
+        if not os.path.exists(icon_dir):
+          os.makedirs(icon_dir)
+        shutil.copyfile(icon, os.path.join(icon_dir, name))
+    svg_icon_dir = os.path.join('build', 'icons', 'hicolor', 'scalable', 'apps')
+    for icon in glob(os.path.join(icons_dir, '*.svg')):
+      if not os.path.exists(svg_icon_dir):
+        os.makedirs(svg_icon_dir)
+      shutil.copyfile(icon, os.path.join(svg_icon_dir, os.path.basename(icon)))
+
+
+class build(build_class):
+  """
+  Add 'build_trans' as a sub-command.
+  """
+  sub_commands = build_class.sub_commands + [('build_trans', None), ('build_icons', None)]
+
+
+class install_data(install_data_class):
+  """
+  Install custom data, like .mo files and icons.
+  """
+  def run(self):
+    po_dir = os.path.join('resources', 'po')
+    for pot_name in [os.path.basename(filename)[:-4] for filename in glob(os.path.join(po_dir, '*.pot'))]:
+      for lang in os.listdir(os.path.join('build', 'locale')):
+        lang_dir = os.path.join('share', 'locale', lang, 'LC_MESSAGES')
+        lang_file = os.path.join('build', 'locale', lang, 'LC_MESSAGES', '{0}.mo'.format(pot_name))
+        self.data_files.append((lang_dir, [lang_file]))
+    app_files = glob(os.path.join('build', '*.desktop'))
+    if app_files:
+      self.data_files.append((os.path.join('share', 'applications'), app_files))
+    for icon in glob(os.path.join('build', 'icons', 'hicolor', '*', '*', '*')):
+      icon_dest = os.path.join('share', os.path.dirname(os.path.dirname(icon[::-1])[::-1]))  # replace build with share
+      self.data_files.append((icon_dest, [icon]))
+    doc_dir = os.path.join('doc', '{0}-{1}'.format(MODULE_NAME, find_version(MODULE_NAME)))
+    self.data_files.append((doc_dir, glob(os.path.join('docs', '*'))))
+    print('data_files', self.data_files)
+    install_data_class.run(self)
+
+
+class install(install_class):
+  """
+  Hack for having install_data run even if there is no data listed.
+  """
+  def initialize_options(self):
+    install_class.initialize_options(self)
+    self.distribution.has_data_files = lambda: True
+    if not self.distribution.data_files:
+      self.distribution.data_files = []
+
 config = {
   'name': 'BootSetup',
   'description': 'Helps installing a bootloader like LiLo or Grub2 on your computer',
   'long_description': read('README.rst'),
-  'license': find_info('license', 'bootsetup', 'bootsetup.py'),
-  'author': find_info('author', 'bootsetup', 'bootsetup.py'),
-  'author_email': find_info('email', 'bootsetup', 'bootsetup.py'),
-  'version': find_version('bootsetup', 'bootsetup.py'),
+  'license': find_info('license', MODULE_NAME),
+  'author': find_info('credits', MODULE_NAME),
+  'author_email': find_info('email', MODULE_NAME),
+  'version': find_version(MODULE_NAME),
   'url': 'https://github.com/jrd/bootsetup/',
   'download_url': 'https://github.com/jrd/bootsetup/archive/master.zip',
-  'packages': ['bootsetup'],
+  'packages': [MODULE_NAME],
   'include_package_data': True,
-  'package_data': {'bootsetup': ['*.glade']},
-  'entry_points': {'console_scripts': ['bootsetup = bootsetup.bootsetup:main']},
+  'package_data': {MODULE_NAME: ['*.glade', '*.png']},
+  'entry_points': {'console_scripts': ['bootsetup = {0}.bootsetup:main'.format(MODULE_NAME)]},
+  'cmdclass': {'build': build, 'build_trans': build_trans, 'build_icons': build_icons, 'install': install, 'install_data': install_data},
   'classifiers': [  # https://pypi.python.org/pypi?:action=list_classifiers
     'Development Status :: 4 - Beta',
     'Environment :: Console',
diff --git a/test.sh b/test.sh
index e25c970..4a594ce 100755 (executable)
--- a/test.sh
+++ b/test.sh
@@ -1,14 +1,3 @@
 #!/bin/sh
 cd $(dirname "$0")
-if [ -d data/po ] && [ $(find data/po -maxdepth 1 -name '*.po'|wc -l) -gt 0 ]; then
-  for p in data/po/*.po; do
-    d=$(basename $p .po)
-    if [ ! -d data/locale/$d ]; then
-      mkdir -p data/locale/$d/LC_MESSAGES
-      echo "$p..."
-      msgfmt $p -o data/locale/$d/LC_MESSAGES/bootsetup.mo
-    fi
-  done
-fi
-[ -e src/bootsetup.log ] && rm src/bootsetup.log
-./src/bootsetup.py --test "$@"
+./make install && gnsu -E bootsetup --test "$@"
diff --git a/tox.ini b/tox.ini
index 0dff541..151acd8 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -1,3 +1,4 @@
 [flake8]
 ignore = E111,E121,F403
 max-line-length = 512
+builtins = _
index 7cc56b3..7b02739 100755 (executable)
@@ -1,32 +1,32 @@
 #!/bin/sh
 cd $(dirname "$0")
-# create data/po/bootsetup.pot template file from glade file
+# create resources/po/bootsetup.pot template file from glade file
 xgettext --from-code=utf-8 \
        -L Glade \
-       -o data/po/bootsetup.pot \
-       src/resources/bootsetup.glade
-# update data/po/bootsetup.pot template file from python files
-for p in src/bootsetup.py src/lib/*.py; do
+       -o resources/po/bootsetup.pot \
+       bootsetup/bootsetup.glade
+# update resources/po/bootsetup.pot template file from python files
+for p in bootsetup/*.py; do
   xgettext --from-code=utf-8 \
     -j \
     -L Python \
-    -o data/po/bootsetup.pot \
+    -o resources/po/bootsetup.pot \
     $p
 done
-# create data/bootsetup.desktop.in.h containing the key to translate
-intltool-extract --type="gettext/ini" data/bootsetup.desktop.in
+# create resources/bootsetup.desktop.in.h containing the key to translate
+intltool-extract --type="gettext/ini" resources/bootsetup.desktop.in
 # use the .in.h file to update the template file
 xgettext --from-code=utf-8 \
   -j \
   -L C \
   -kN_ \
-  -o data/po/bootsetup.pot \
-  data/bootsetup.desktop.in.h
+  -o resources/po/bootsetup.pot \
+  resources/bootsetup.desktop.in.h
 # remove unused .in.h file
-rm data/bootsetup.desktop.in.h
+rm resources/bootsetup.desktop.in.h
 # update the po files using the pot file
 (
-  cd data/po
+  cd resources/po
   for p in *.po; do
          msgmerge -U $p bootsetup.pot
   done