> I would guess there is a non-zero error code returned.

Then we can do the following.

1. check the return value of configure.py

Index: src/callback.cpp
===================================================================
--- src/callback.cpp    (revision 20528)
+++ src/callback.cpp    (working copy)
@@ -444,7 +444,7 @@
        string configure_command = package().configure_command();
        configure_command += option;
        Systemcall one;
-       one.startscript(Systemcall::Wait, configure_command);
+       int ret = one.startscript(Systemcall::Wait, configure_command);
        p.pop();
        // emit message signal.
        lv.message(_("Reloading configuration..."));
@@ -452,7 +452,13 @@
        // Re-read packages.lst
        LaTeXFeatures::getAvailable();

-       Alert::information(_("System reconfigured"),
+       if (ret)
+               Alert::information(_("System reconfiguration failed"),
+                          _("The system reconfiguration has failed.\n"
+                                         "Default textclass is used but lyx 
may not be able to work properly.\n"
+                                         "Please reconfigure again if 
needed."));
+       else
+               Alert::information(_("System reconfigured"),
                           _("The system has been reconfigured.\n"
                                          "You need to restart LyX to make use 
of any\n"
                                          "updated document class 
specifications."));

2. Check the return status of the long LATEX configure run.

http://docs.python.org/lib/os-newstreams.html#os-newstreams

The exit status of the command (encoded in the format specified for
wait()) is available as the return value of the close() method of the
file object, except that when the exit status is zero (termination
without errors), None is returned. Availability: Macintosh, Unix,
Windows.

Index: lib/configure.py
===================================================================
--- lib/configure.py    (revision 20528)
+++ lib/configure.py    (working copy)

                 break;
             if re.match('^\+', line):
                 print line,
-        fout.close()
+        # if the command succeeds, None will be returned
+        ret = fout.close()

3. Return the status of this LATEX configure.

-    checkLatexConfig( lyx_check_config and LATEX != '', bool_docbook,
bool_linuxdoc)
+    ret = checkLatexConfig(lyx_check_config and LATEX != '',
bool_docbook, bool_linuxdoc)
     createLaTeXConfig()
     removeTempFiles()
+    sys.exit(ret)

Of course, configure.py may fail due to other reasons, but this one is
right now the 100% source of trouble.

I have no time to polish this patch today. I can do it this weekend or
you can take it over if 1.5.2 is pressing.

Cheers,
Bo
Index: src/callback.cpp
===================================================================
--- src/callback.cpp	(revision 20528)
+++ src/callback.cpp	(working copy)
@@ -444,7 +444,7 @@
 	string configure_command = package().configure_command();
 	configure_command += option;
 	Systemcall one;
-	one.startscript(Systemcall::Wait, configure_command);
+	int ret = one.startscript(Systemcall::Wait, configure_command);
 	p.pop();
 	// emit message signal.
 	lv.message(_("Reloading configuration..."));
@@ -452,7 +452,13 @@
 	// Re-read packages.lst
 	LaTeXFeatures::getAvailable();
 
-	Alert::information(_("System reconfigured"),
+	if (ret)
+		Alert::information(_("System reconfiguration failed"),
+			   _("The system reconfiguration has failed.\n"
+					  "Default textclass is used but lyx may not be able to work properly.\n"
+					  "Please reconfigure again if needed."));
+	else
+		Alert::information(_("System reconfigured"),
 			   _("The system has been reconfigured.\n"
 					  "You need to restart LyX to make use of any\n"
 					  "updated document class specifications."));
Index: lib/configure.py
===================================================================
--- lib/configure.py	(revision 20528)
+++ lib/configure.py	(working copy)
@@ -589,7 +589,9 @@
 
     
 def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc):
-    ''' Explore the LaTeX configuration '''
+    ''' Explore the LaTeX configuration 
+        Return None (will be passed to sys.exit()) for success.
+    '''
     print 'checking LaTeX configuration... ',
     # if --without-latex-config is forced, or if there is no previous 
     # version of textclass.lst, re-generate a default file.
@@ -628,8 +630,10 @@
                 tx.write(processLayoutFile(file, bool_docbook, bool_linuxdoc))
         tx.close()
         print '\tdone'
+    if not check_config:
+        return None
     # the following will generate textclass.lst.tmp, and packages.lst.tmp
-    if check_config:
+    else:
         print '\tauto'
         removeFiles(['wrap_chkconfig.ltx', 'chkconfig.vars', \
             'chkconfig.classes', 'chklayouts.tex'])
@@ -671,7 +675,8 @@
                 break;
             if re.match('^\+', line):
                 print line,
-        fout.close()
+        # if the command succeeds, None will be returned
+        ret = fout.close()
         #
         # currently, values in chhkconfig are only used to set
         # \font_encoding
@@ -693,6 +698,7 @@
             and os.path.isfile('packages.lst.tmp') and len(open('packages.lst.tmp').read()) > 0:
             shutil.move('textclass.lst.tmp', 'textclass.lst')
             shutil.move('packages.lst.tmp', 'packages.lst')
+        return ret
 
 
 def createLaTeXConfig():
@@ -839,6 +845,7 @@
         addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths)
     checkOtherEntries()
     # --without-latex-config can disable lyx_check_config
-    checkLatexConfig( lyx_check_config and LATEX != '', bool_docbook, bool_linuxdoc)
+    ret = checkLatexConfig(lyx_check_config and LATEX != '', bool_docbook, bool_linuxdoc)
     createLaTeXConfig()
     removeTempFiles()
+    sys.exit(ret)

Reply via email to