diff options
21 files changed, 480 insertions, 169 deletions
@@ -1,3 +1,66 @@ +2000-08-07 Eskil Heyn Olsen <eskil@eazel.com> + + * components/services/install/command-line/eazel-alt-install-corba.c: + (main): + Added --query, to test the corba query stuff + + * components/services/install/command-line/eazel-package-query.c: + Removed some erratic #defs. + + * components/services/install/command-line/genpkg_list.example: + Now has an error on purpose, to test the error checking + + * components/services/install/idl/trilobite-eazel-install.idl: + Renamed the query to simple_query + + * components/services/install/lib/eazel-install-corba-callback.c: + (impl_install_failed), (impl_uninstall_failed), + (eazel_install_callback_simple_query), + (eazel_install_callback_revert_transaction): + * components/services/install/lib/eazel-install-corba-callback.h: + * components/services/install/lib/eazel-install-corba-types.c: + (corba_packagedatastruct_from_packagedata): + * components/services/install/lib/eazel-install-corba.c: + (impl_Eazel_Install_simple_query), (eazel_install_get_epv): + * components/services/install/lib/eazel-install-query.c: + (eazel_install_simple_rpm_query), (eazel_install_simple_query): + Finished the corbafication of simple_query and added some const's + to some arguments. + + * components/services/install/lib/eazel-install-protocols.c: + (http_fetch_remote_file): + Fixed a bug where the first download-progress emit got called with + total == 0. + + * components/services/install/lib/eazel-install-query.h: + Removed debug output. + + * components/services/install/lib/eazel-install-rpm-glue.c: + (eazel_install_do_rpm_transaction_process_pipe), + (eazel_install_do_rpm_transaction_save_report), + (do_rpm_transaction), (eazel_install_fetch_rpm_dependencies): + Am tryink to fix the installer. Havink problems reading the output + from rpm, since it apparently gets buffered somewhere. + + * components/services/install/lib/eazel-install-xml-package-list.c: + (generate_xml_package_list): + Added error checking to the :-seperated values parsing. + + * components/services/install/lib/makefile.staticlib.in: + More static linking fun. + + * nautilus-installer/src/Makefile: + * nautilus-installer/src/Makefile.am: + * nautilus-installer/src/installer.c: (eazel_install_progress), + (eazel_download_progress), (download_failed), + (eazel_install_preflight), (eazel_install_dep_check), + (eazel_install_delete_files), (installer): + * nautilus-installer/src/interface.c: (create_window): + * nautilus-installer/src/link.sh: + * nautilus-installer/src/prescript: + Okaeh, the installer is slight prettier, but the install progress + is screwed because of the problem with progress bar. + 2000-08-07 John Sullivan <sullivan@eazel.com> Fixed bug 1969 enough for now (search bar buttons should diff --git a/components/services/install/command-line/eazel-alt-install-corba.c b/components/services/install/command-line/eazel-alt-install-corba.c index e39d61c3c..39d940d50 100644 --- a/components/services/install/command-line/eazel-alt-install-corba.c +++ b/components/services/install/command-line/eazel-alt-install-corba.c @@ -66,7 +66,8 @@ int arg_dry_run, arg_force, arg_upgrade, arg_downgrade, - arg_erase; + arg_erase, + arg_query; char *arg_server, *arg_config_file, *arg_tmp_dir; @@ -85,6 +86,7 @@ static const struct poptOption options[] = { {"downgrade", 'd', POPT_ARG_NONE, &arg_downgrade, 0, N_("Allow downgrades"), NULL}, {"tmp", '\0', POPT_ARG_STRING, &arg_tmp_dir, 0, N_("Set tmp dir (/tmp/eazel-install)"), NULL}, {"server", '\0', POPT_ARG_STRING, &arg_server, 0, N_("Specify server"), NULL}, + {"query", 'q', POPT_ARG_NONE, &arg_query, 0, N_("Run Query"), NULL}, {"http", 'h', POPT_ARG_NONE, &arg_http, 0, N_("Use http"), NULL}, {"ftp", 'f', POPT_ARG_NONE, &arg_ftp, 0, N_("Use ftp"), NULL}, {"local", 'l', POPT_ARG_NONE, &arg_local, 0, N_("Use local"), NULL}, @@ -390,10 +392,13 @@ int main(int argc, char *argv[]) { GList *packages; GList *categories; char *str; + GList *strs; EazelInstallCallback *cb; CORBA_exception_init (&ev); + strs = NULL; + /* Seems that bonobo_main doens't like not having gnome_init called, dies in a X call, yech */ @@ -411,6 +416,7 @@ int main(int argc, char *argv[]) { /* If there are more args, get them and parse them as packages */ while ((str = poptGetArg (ctxt)) != NULL) { packages = g_list_prepend (packages, create_package (str)); + strs = g_list_prepend (strs, g_strdup (str)); } if (packages) { CategoryData *category; @@ -422,11 +428,9 @@ int main(int argc, char *argv[]) { } /* Chech that we're root and on a redhat system */ - if (check_for_root_user() == FALSE) { - fprintf (stderr, "*** This tool requires root access.\n"); - } if (check_for_redhat () == FALSE) { fprintf (stderr, "*** This tool can only be used on RedHat.\n"); + exit (1); } orb = oaf_init (argc, argv); @@ -456,14 +460,32 @@ int main(int argc, char *argv[]) { gtk_signal_connect (GTK_OBJECT (cb), "delete_files", (void *)delete_files, NULL); gtk_signal_connect (GTK_OBJECT (cb), "done", done, NULL); + if (arg_erase + arg_query > 1) { + g_error ("Only one operation at a time please."); + } + if (arg_erase) { eazel_install_callback_uninstall_packages (cb, categories, &ev); + } else if (arg_query) { + GList *iterator; + for (iterator = strs; iterator; iterator = iterator->next) { + GList *matched_packages; + GList *match_it; + matched_packages = eazel_install_callback_simple_query (cb, (char*)iterator->data, &ev); + for (match_it = matched_packages; match_it; match_it = match_it->next) { + PackageData *p; + p = (PackageData*)match_it->data; + fprintf (stdout, "%s %s %50.50s", p->name, p->version, p->summary); + } + } } else { eazel_install_callback_install_packages (cb, categories, &ev); } - fprintf (stdout, "\nEntering main loop...\n"); - bonobo_main (); + if (!arg_query) { + fprintf (stdout, "\nEntering main loop...\n"); + bonobo_main (); + } eazel_install_callback_destroy (GTK_OBJECT (cb)); diff --git a/components/services/install/command-line/eazel-package-query.c b/components/services/install/command-line/eazel-package-query.c index aa7e9286a..4b8b931e8 100644 --- a/components/services/install/command-line/eazel-package-query.c +++ b/components/services/install/command-line/eazel-package-query.c @@ -32,11 +32,6 @@ #include <libtrilobite/helixcode-utils.h> -/* This ensure that if the arch is detected as i[3-9]86, the - requested archtype will be set to i386 */ -#define ASSUME_ix86_IS_i386 - - /* Popt stuff */ char *arg_query; int arg_owns, arg_provides, arg_requires; diff --git a/components/services/install/command-line/genpkg_list.example b/components/services/install/command-line/genpkg_list.example index 72c03c39b..b6e9f4f89 100644 --- a/components/services/install/command-line/genpkg_list.example +++ b/components/services/install/command-line/genpkg_list.example @@ -1,4 +1,5 @@ -Nautilus:GConf:0.5.EazelSourceSnapshot:1:i386:: +roev +:GConf:0.5.EazelSourceSnapshot:1:i386:: Nautilus:GConf-devel:0.5.EazelSourceSnapshot::i386:: Nautilus:ORBit:0.5.2.EazelSourceSnapshot::i386:: Nautilus:ORBit-devel:0.5.2.EazelSourceSnapshot::i386:: diff --git a/components/services/install/idl/trilobite-eazel-install.idl b/components/services/install/idl/trilobite-eazel-install.idl index c63d17af4..66e07b188 100644 --- a/components/services/install/idl/trilobite-eazel-install.idl +++ b/components/services/install/idl/trilobite-eazel-install.idl @@ -149,7 +149,7 @@ module Trilobite { oneway void uninstall_packages (in CategoryStructList categories, in InstallCallback cb); /* Run a query to the package sys */ - PackageDataStructList query (in string query); + PackageDataStructList simple_query (in string query); /* Revert a operation */ oneway void revert_transaction (in string xml, in InstallCallback cb); diff --git a/components/services/install/lib/eazel-install-corba-callback.c b/components/services/install/lib/eazel-install-corba-callback.c index af161d8d6..5663bf556 100644 --- a/components/services/install/lib/eazel-install-corba-callback.c +++ b/components/services/install/lib/eazel-install-corba-callback.c @@ -142,11 +142,21 @@ impl_install_failed (impl_POA_Trilobite_Eazel_InstallCallback *servant, GList *categories; PackageData *pack; categories = parse_memory_xml_package_list ((char*)xmlcorbapack, strlen (xmlcorbapack)); - /* FIXME bugzilla.eazel.com 1557: - semi ugly, but assuming that the xml parse was ok, this gets the package - in for the signal */ - pack = (PackageData*)((CategoryData*)categories->data)->packages->data; - gtk_signal_emit (GTK_OBJECT (servant->object), signals[INSTALL_FAILED], pack); + if (categories==NULL) { + g_warning ("install_failed called with error in xml."); + g_warning ("XML is = \n%s", xmlcorbapack); + } else { + CategoryData *cat; + cat = (CategoryData*)categories->data; + if (cat->packages==NULL) { + g_warning ("install_failed called with error in xml."); + g_warning ("XML is = \n%s", xmlcorbapack); + } else { + PackageData *pack; + pack = (PackageData*)cat->packages->data; + gtk_signal_emit (GTK_OBJECT (servant->object), signals[INSTALL_FAILED], pack); + } + } } static void @@ -157,11 +167,21 @@ impl_uninstall_failed (impl_POA_Trilobite_Eazel_InstallCallback *servant, GList *categories; PackageData *pack; categories = parse_memory_xml_package_list ((char*)xmlcorbapack, strlen (xmlcorbapack)); - /* FIXME bugzilla.eazel.com 1557: - semi ugly, but assuming that the xml parse was ok, this gets the package - in for the signal */ - pack = (PackageData*)((CategoryData*)categories->data)->packages->data; - gtk_signal_emit (GTK_OBJECT (servant->object), signals[UNINSTALL_FAILED], pack); + if (categories==NULL) { + g_warning ("install_failed called with error in xml."); + g_warning ("XML is = \n%s", xmlcorbapack); + } else { + CategoryData *cat; + cat = (CategoryData*)categories->data; + if (cat->packages==NULL) { + g_warning ("install_failed called with error in xml."); + g_warning ("XML is = \n%s", xmlcorbapack); + } else { + PackageData *pack; + pack = (PackageData*)cat->packages->data; + gtk_signal_emit (GTK_OBJECT (servant->object), signals[INSTALL_FAILED], pack); + } + } } static CORBA_boolean @@ -462,24 +482,25 @@ eazel_install_callback_uninstall_packages (EazelInstallCallback *service, } GList* -eazel_install_callback_query (EazelInstallCallback *service, - char *query, - CORBA_Environment *ev) +eazel_install_callback_simple_query (EazelInstallCallback *service, + const char *query, + CORBA_Environment *ev) { GList *result; Trilobite_Eazel_PackageDataStructList *corbares; - /* FIXME bugzilla.eazel.com 1446: ? */ - - corbares = Trilobite_Eazel_Install_query (service->installservice_corba, - query, - ev); + corbares = Trilobite_Eazel_Install_simple_query (service->installservice_corba, + query, + ev); + result = packagedata_list_from_corba_packagedatastructlist (*corbares); + CORBA_free (corbares); + return result; } void eazel_install_callback_revert_transaction (EazelInstallCallback *service, - char *xmlfile, + const char *xmlfile, CORBA_Environment *ev) { xmlDocPtr doc; diff --git a/components/services/install/lib/eazel-install-corba-callback.h b/components/services/install/lib/eazel-install-corba-callback.h index 5762cda33..eb59425dd 100644 --- a/components/services/install/lib/eazel-install-corba-callback.h +++ b/components/services/install/lib/eazel-install-corba-callback.h @@ -110,12 +110,12 @@ void eazel_install_callback_uninstall_packages (EazelInstallCallback *service, GList *categories, CORBA_Environment *ev); -GList* eazel_install_callback_query (EazelInstallCallback *service, - char *query, - CORBA_Environment *ev); +GList* eazel_install_callback_simple_query (EazelInstallCallback *service, + const char* query, + CORBA_Environment *ev); void eazel_install_callback_revert_transaction (EazelInstallCallback *service, - char *xmlfile, + const char *xmlfile, CORBA_Environment *ev); /* Stuff */ diff --git a/components/services/install/lib/eazel-install-corba-types.c b/components/services/install/lib/eazel-install-corba-types.c index 6d1c44b5b..c400c55ed 100644 --- a/components/services/install/lib/eazel-install-corba-types.c +++ b/components/services/install/lib/eazel-install-corba-types.c @@ -54,11 +54,13 @@ corba_packagedatastruct_from_packagedata (const PackageData *pack) if (pack->distribution.name == DISTRO_UNKNOWN) { DistributionInfo dist; dist = trilobite_get_distribution (); - corbapack.distribution.name = trilobite_get_distribution_name (dist, FALSE, FALSE); + corbapack.distribution.name = + CORBA_string_dup (trilobite_get_distribution_name (dist, FALSE, FALSE)); corbapack.distribution.major = dist.version_major; corbapack.distribution.minor = dist.version_minor; } else { - corbapack.distribution.name = trilobite_get_distribution_name (pack->distribution, FALSE, FALSE); + corbapack.distribution.name = + CORBA_string_dup (trilobite_get_distribution_name (pack->distribution, FALSE, FALSE)); corbapack.distribution.major = pack->distribution.version_major; corbapack.distribution.minor = pack->distribution.version_minor; } diff --git a/components/services/install/lib/eazel-install-corba.c b/components/services/install/lib/eazel-install-corba.c index 0c7b5d667..02f761e0c 100644 --- a/components/services/install/lib/eazel-install-corba.c +++ b/components/services/install/lib/eazel-install-corba.c @@ -33,6 +33,7 @@ #include "eazel-install-public.h" #include "eazel-install-private.h" #include "eazel-install-corba-types.h" +#include "eazel-install-query.h" #define RELEASE_CB if (servant->object->callback != CORBA_OBJECT_NIL) { \ CORBA_Object_release (servant->object->callback, ev); \ @@ -323,17 +324,17 @@ impl_Eazel_Install__get_protocol (impl_POA_Trilobite_Eazel_Install *servant, } static Trilobite_Eazel_PackageDataStructList* -impl_Eazel_Install_query (impl_POA_Trilobite_Eazel_Install *servant, - const CORBA_char *query, - CORBA_Environment *ev) +impl_Eazel_Install_simple_query (impl_POA_Trilobite_Eazel_Install *servant, + const CORBA_char *query, + CORBA_Environment *ev) { Trilobite_Eazel_PackageDataStructList *result; + GList *tmp_result; - /* FIXME bugzilla.eazel.com: - Finish this, need to convert the return value to a - corba sequence and return it. - */ - eazel_install_query_package_system (servant->object, query, 0); + tmp_result = eazel_install_simple_query (servant->object, query, EI_SIMPLE_QUERY_MATCHES, 0, NULL); + result = Trilobite_Eazel_PackageDataStructList__alloc (); + (*result) = corba_packagedatastructlist_from_packagedata_list (tmp_result); + g_list_foreach (tmp_result, (GFunc)packagedata_destroy_foreach, NULL); return result; } @@ -383,7 +384,7 @@ eazel_install_get_epv () epv->_set_tmp_dir = (gpointer)&impl_Eazel_Install__set_tmp_dir; epv->_get_tmp_dir = (gpointer)&impl_Eazel_Install__get_tmp_dir; - epv->query = (gpointer)&impl_Eazel_Install_query; + epv->simple_query = (gpointer)&impl_Eazel_Install_simple_query; return epv; }; diff --git a/components/services/install/lib/eazel-install-protocols.c b/components/services/install/lib/eazel-install-protocols.c index d278071cc..e4a69083d 100644 --- a/components/services/install/lib/eazel-install-protocols.c +++ b/components/services/install/lib/eazel-install-protocols.c @@ -121,7 +121,7 @@ http_fetch_remote_file (EazelInstall *service, ghttp_current_status curStat = ghttp_get_status (request); total_bytes = curStat.bytes_total; /* Ensure first emit is with amount==0 */ - if (first_emit) { + if (first_emit && total_bytes > 0) { eazel_install_emit_download_progress (service, g_basename (target_file), 0, total_bytes); first_emit = FALSE; } diff --git a/components/services/install/lib/eazel-install-query.c b/components/services/install/lib/eazel-install-query.c index 64440bfb5..e466c72a5 100644 --- a/components/services/install/lib/eazel-install-query.c +++ b/components/services/install/lib/eazel-install-query.c @@ -88,7 +88,7 @@ eazel_install_query_package_system (EazelInstall *service, static GList * eazel_install_simple_rpm_query (EazelInstall *service, - char *input, + const char *input, EazelInstallSimpleQueryEnum flag) { dbiIndexSet matches; @@ -104,7 +104,6 @@ eazel_install_simple_rpm_query (EazelInstall *service, open and close at the end. That way, this func can be used in both various enviroments */ if (db == NULL) { - g_message ("PREPARING PACKAGE SYS"); eazel_install_prepare_package_system (service); db = service->private->packsys.rpm.db; close_db = TRUE; @@ -151,7 +150,6 @@ eazel_install_simple_rpm_query (EazelInstall *service, } if (close_db) { - g_message ("KILLING PACKAGE SYS"); eazel_install_free_package_system (service); } @@ -160,10 +158,11 @@ eazel_install_simple_rpm_query (EazelInstall *service, GList* -eazel_install_simple_query (EazelInstall *service, char *input, +eazel_install_simple_query (EazelInstall *service, + const char *input, EazelInstallSimpleQueryEnum flag, int neglist_count, - GList *neglists,...) + const GList *neglists,...) { GList *result; GList *remove; diff --git a/components/services/install/lib/eazel-install-query.h b/components/services/install/lib/eazel-install-query.h index a536e4172..42f97b5b8 100644 --- a/components/services/install/lib/eazel-install-query.h +++ b/components/services/install/lib/eazel-install-query.h @@ -34,8 +34,8 @@ typedef enum { } EazelInstallSimpleQueryEnum; GList* eazel_install_simple_query (EazelInstall *service, - char *input, + const char *input, EazelInstallSimpleQueryEnum flag, - int neglists, GList *neglist,...); + int neglists, const GList *neglist,...); #endif /* EAZEL_INSTALL_QUERY_H */ diff --git a/components/services/install/lib/eazel-install-rpm-glue.c b/components/services/install/lib/eazel-install-rpm-glue.c index 88da62e95..c2c8b0663 100644 --- a/components/services/install/lib/eazel-install-rpm-glue.c +++ b/components/services/install/lib/eazel-install-rpm-glue.c @@ -557,12 +557,14 @@ eazel_install_do_rpm_transaction_process_pipe (EazelInstall *service, } if (tmp) { + g_message ("READ \"%s\"", tmp); /* Percentage output, parse and emit... */ if (tmp[0]=='%' && tmp[1]=='%') { char *ptr; int pct; int amount; + if (pack == NULL) { continue; } @@ -612,12 +614,17 @@ eazel_install_do_rpm_transaction_process_pipe (EazelInstall *service, service->private->packsys.rpm.total_size); } } + } else { + if (fflush (pipe)==0) { + g_warning ("cannot flush"); + } } } fclose (pipe); } +#ifndef EAZEL_INSTALL_SLIM static void eazel_install_do_rpm_transaction_save_report_helper (xmlNodePtr node, GList *packages) @@ -654,28 +661,33 @@ eazel_install_do_rpm_transaction_save_report (EazelInstall *service) xmlNodePtr node, root; char *name; - doc = xmlNewDoc ("1.0"); - root = node = xmlNewNode (NULL, "TRANSACTION"); - xmlDocSetRootElement (doc, node); - name = g_strdup_printf ("%s/transaction.%d", eazel_install_get_transaction_dir (service), time (NULL)); - while (g_file_test (name, G_FILE_TEST_ISFILE)) { - g_free (name); - sleep (1); - name = g_strdup_printf ("%s/transaction.%d", eazel_install_get_transaction_dir (service), time (NULL)); - } - /* Ensure the transaction dir is present */ if (! g_file_test (eazel_install_get_transaction_dir (service), G_FILE_TEST_ISDIR)) { int retval; retval = mkdir (eazel_install_get_transaction_dir (service), 0755); if (retval < 0) { if (errno != EEXIST) { - g_error (_("*** Could not create transaction directory (%s)! ***\n"), - eazel_install_get_transaction_dir (service)); + g_warning (_("*** Could not create transaction directory (%s)! ***\n"), + eazel_install_get_transaction_dir (service)); + return; } } } + /* Create xml */ + doc = xmlNewDoc ("1.0"); + root = node = xmlNewNode (NULL, "TRANSACTION"); + xmlDocSetRootElement (doc, node); + + /* Make a unique name */ + name = g_strdup_printf ("%s/transaction.%d", eazel_install_get_transaction_dir (service), time (NULL)); + while (g_file_test (name, G_FILE_TEST_ISFILE)) { + g_free (name); + sleep (1); + name = g_strdup_printf ("%s/transaction.%d", eazel_install_get_transaction_dir (service), time (NULL)); + } + + /* Open and save */ outfile = fopen (name, "w"); xmlAddChild (root, eazel_install_packagelist_to_xml (service->private->transaction)); node = xmlAddChild (node, xmlNewNode (NULL, "DESCRIPTIONS")); @@ -692,21 +704,19 @@ eazel_install_do_rpm_transaction_save_report (EazelInstall *service) xmlDocDump (outfile, doc); fclose (outfile); - g_free (name); - - /* FIXME bugzilla.eazel.com 1586: - FIXME bugzilla.eazel.com 1673: - at this point, we could emit the transaction info, by finding the toplevel - packages, and spewing out xml for them */ -} + g_free (name);} +#endif /* EAZEL_INSTALL_SLIM */ int do_rpm_transaction (EazelInstall *service, GList* packages) { +#ifndef EAZEL_INSTALL_SLIM TrilobiteRootHelper *root_helper; +#endif /* EAZEL_INSTALL_SLIM */ GList *args; int fd; + int res; if (g_list_length (packages) == 0) { return 0; @@ -718,6 +728,7 @@ do_rpm_transaction (EazelInstall *service, service->private->packsys.rpm.total_size = 0; args = NULL; + res = 0; eazel_install_do_rpm_transaction_fill_hash (service, packages); eazel_install_do_rpm_transaction_get_total_size (service, packages); @@ -726,6 +737,7 @@ do_rpm_transaction (EazelInstall *service, eazel_install_emit_preflight_check (service, service->private->packsys.rpm.total_size, service->private->packsys.rpm.num_packages); + { GList *iterator; fprintf (stdout, "\nARGS: "); @@ -735,27 +747,62 @@ do_rpm_transaction (EazelInstall *service, fprintf (stdout, "\n"); } - /* Fire off the helper */ +#ifdef EAZEL_INSTALL_SLIM + { + char **argv; + int i; + int flags; + GList *iterator; + + /* Create argv list */ + argv = g_new0 (char*, g_list_length (args) + 2); + argv[0] = g_strdup ("rpm"); + i = 1; + for (iterator = args; iterator; iterator = iterator->next) { + argv[i] = g_strdup (iterator->data); + i++; + } + argv[i] = NULL; + + if (access ("/bin/rpm", R_OK|X_OK)!=0) { + g_warning ("/bin/rpm missing or not executable for uid"); + res = service->private->packsys.rpm.num_packages; + } + /* start /bin/rpm... */ + if (res==0 && trilobite_pexec ("/bin/rpm", argv, NULL, &fd, NULL)!=0) { + g_warning ("Could not start rpm"); + res = service->private->packsys.rpm.num_packages; + } else { + g_message ("rpm running..."); + } + } +#else /* EAZEL_INSTALL_SLIM */ + /* Fire off the helper */ root_helper = gtk_object_get_data (GTK_OBJECT (service), "trilobite-root-helper"); if (trilobite_root_helper_start (root_helper) != TRILOBITE_ROOT_HELPER_SUCCESS) { g_warning ("Error in starting trilobite_root_helper"); - return service->private->packsys.rpm.num_packages; + res = service->private->packsys.rpm.num_packages; } /* Run RPM */ - if (trilobite_root_helper_run (root_helper, TRILOBITE_ROOT_HELPER_RUN_RPM, args, &fd) != + if (res==0 && trilobite_root_helper_run (root_helper, TRILOBITE_ROOT_HELPER_RUN_RPM, args, &fd) != TRILOBITE_ROOT_HELPER_SUCCESS) { g_warning ("Error in running trilobite_root_helper"); - return service->private->packsys.rpm.num_packages; + res = service->private->packsys.rpm.num_packages; + } + +#endif /* EAZEL_INSTALL_SLIM */ + if (res==0) { + eazel_install_do_rpm_transaction_process_pipe (service, fd); +#ifndef EAZEL_INSTALL_SLIM + eazel_install_do_rpm_transaction_save_report (service); +#endif /* EAZEL_INSTALL_SLIM */ } - - eazel_install_do_rpm_transaction_process_pipe (service, fd); - eazel_install_do_rpm_transaction_save_report (service); g_list_foreach (args, (GFunc)g_free, NULL); g_list_free (args); - return 0; + return res; } /* end do_rpm_transaction */ /* @@ -1243,6 +1290,12 @@ eazel_install_fetch_rpm_dependencies (EazelInstall *service, pack_entry = g_list_find_custom (*packages, (gpointer)conflict.needsName, (GCompareFunc)eazel_install_package_name_compare); + if (pack_entry==NULL) { + /* FIXME: bugzilla.eazel.com + Argh, if a lib*.so breaks a package, + we end up here */ + continue; + } dep = packagedata_new_from_rpm_conflict_reversed (conflict); pack = (PackageData*)(pack_entry->data); dep->archtype = g_strdup (pack->archtype); diff --git a/components/services/install/lib/eazel-install-xml-package-list.c b/components/services/install/lib/eazel-install-xml-package-list.c index 31e79cd00..45c37bc6b 100644 --- a/components/services/install/lib/eazel-install-xml-package-list.c +++ b/components/services/install/lib/eazel-install-xml-package-list.c @@ -272,15 +272,13 @@ generate_xml_package_list (const char* pkg_template_file, */ xmlDocPtr doc; - xmlNodePtr category; - xmlNodePtr packages; - xmlNodePtr package; - xmlNodePtr data; char* retbuf; int index; char** entry_array; char** package_array; - gint lines; + char *tags[] = {"NAME", "VERSION", "MINOR", "ARCH", "BYTESIZE", "SUMMARY", NULL}; + int num_tags = 6; + int lines; doc = xmlNewDoc ("1.0"); doc->root = xmlNewDocNode (doc, NULL, "CATEGORIES", NULL); @@ -297,25 +295,35 @@ generate_xml_package_list (const char* pkg_template_file, break; } - package_array = g_strsplit (entry_array[index], ":", 7); - - /* FIXME bugzilla.eazel.com 1283: this has no error control right now. It needs to be improved alot. */ - - if ((doc->root->childs == NULL) || - (xmlGetProp (doc->root->childs, package_array[0]))) { - category = xmlNewChild (doc->root, NULL, "CATEGORY", NULL); - xmlSetProp (category, "name", package_array[0]); - packages = xmlNewChild (category, NULL, "PACKAGES", NULL); + package_array = g_strsplit (entry_array[index], ":", num_tags+1); + + if (package_array && package_array[0]) { + xmlNodePtr packages; + xmlNodePtr category; + xmlNodePtr package; + xmlNodePtr data; + int i; + + if ((doc->root->childs == NULL) || + (xmlGetProp (doc->root->childs, package_array[0]))) { + category = xmlNewChild (doc->root, NULL, "CATEGORY", NULL); + xmlSetProp (category, "name", package_array[0]); + packages = xmlNewChild (category, NULL, "PACKAGES", NULL); + } + + package = xmlNewChild (packages, NULL, "PACKAGE", NULL); + + for (i = 1; i <= num_tags; i++) { + if (package_array[i]) { + data = xmlNewChild (package, NULL, tags[i], package_array[i]); + } else { + g_error ("line %d, tag %d (%s) is missing", index+1, i+1, tags[i]); + } + } + g_strfreev (package_array); } - package = xmlNewChild (packages, NULL, "PACKAGE", NULL); - data = xmlNewChild (package, NULL, "NAME", package_array[1]); - data = xmlNewChild (package, NULL, "VERSION", package_array[2]); - data = xmlNewChild (package, NULL, "MINOR", package_array[3]); - data = xmlNewChild (package, NULL, "ARCH", package_array[4]); - data = xmlNewChild (package, NULL, "BYTESIZE", package_array[5]); - data = xmlNewChild (package, NULL, "SUMMARY", package_array[6]); } - + if (doc == NULL) { g_warning (_("*** Error generating xml package list! ***\n")); xmlFreeDoc (doc); diff --git a/components/services/install/lib/makefile.staticlib.in b/components/services/install/lib/makefile.staticlib.in index e3a0afe8c..163102a67 100644 --- a/components/services/install/lib/makefile.staticlib.in +++ b/components/services/install/lib/makefile.staticlib.in @@ -4,11 +4,10 @@ OBJS=\ eazel-install-protocols.o \ eazel-install-rpm-glue.o \ eazel-install-query.o \ - eazel-install-tests.o \ eazel-install-xml-package-list.o \ eazel-install-object.o -DEFINES=-DEAZEL_INSTALL_NO_CORBA +DEFINES=-DEAZEL_INSTALL_NO_CORBA -DEAZEL_INSTALL_SLIM INCLUDES=\ -I. \ -I@top_srcdir@ \ @@ -25,6 +24,7 @@ LIB=libeazelinstall_minimal.a CC=gcc CPPFLAGS=$(INCLUDES) $(DEFINES) CFLAGS=-O -Werror +#CFLAGS=-g -Werror all: $(LIB) diff --git a/nautilus-installer/src/Makefile b/nautilus-installer/src/Makefile index 59cdc3b43..7ea749c24 100644 --- a/nautilus-installer/src/Makefile +++ b/nautilus-installer/src/Makefile @@ -60,9 +60,13 @@ POST_UNINSTALL = : host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu AS = @AS@ +BONOBOX_CFLAGS = -I/gnome/include -DNEED_GNOMESUPPORT_H -I/gnome/lib/gnome-libs/include -I/gnome/lib/glib/include -I/usr/X11R6/include -I/gnome/include/gnome-xml +BONOBOX_LIBS = -rdynamic -L/gnome/lib -L/usr/X11R6/lib -L/usr/lib -lbonobo -lgdk_pixbuf -ltiff -ljpeg -lpng -lgnomeprint -lgnomeui -lart_lgpl -lgdk_imlib -lSM -lICE -lgtk -lgdk -lgmodule -lXext -lX11 -lgnome -lgnomesupport -lesd -laudiofile -ldb1 -ldl -lxml -lz -loaf -lORBitCosNaming -lORBit -lIIOP -lORBitutil -lglib -lnsl -lm -lbonobox BONOBO_CFLAGS = -I/gnome/include -DNEED_GNOMESUPPORT_H -I/gnome/lib/gnome-libs/include -I/gnome/lib/glib/include -I/usr/X11R6/include -I/gnome/include/gnome-xml BONOBO_LIBS = -rdynamic -L/gnome/lib -L/usr/X11R6/lib -L/usr/lib -lbonobo -lgdk_pixbuf -ltiff -ljpeg -lpng -lgnomeprint -lgnomeui -lart_lgpl -lgdk_imlib -lSM -lICE -lgtk -lgdk -lgmodule -lXext -lX11 -lgnome -lgnomesupport -lesd -laudiofile -ldb1 -ldl -lxml -lz -loaf -lORBitCosNaming -lORBit -lIIOP -lORBitutil -lglib -lnsl -lm -CATALOGS = da.gmo de.gmo fr.gmo gl.gmo ja.gmo ko.gmo no.gmo ru.gmo sv.gmo tr.gmo +BONOBO_PRINT_CFLAGS = +BONOBO_PRINT_LIBS = +CATALOGS = da.gmo de.gmo fr.gmo gl.gmo ja.gmo ko.gmo no.gmo ru.gmo sv.gmo tr.gmo zh_TW.Big5.gmo CATOBJEXT = .gmo CC = gcc CPP = gcc -E @@ -83,7 +87,7 @@ GHTTP_LIBS = -L/gnome/lib -lghttp GLIB_CFLAGS = -I/gnome/lib/glib/include -I/gnome/include GLIB_CONFIG = /gnome/bin/glib-config GLIB_LIBS = -L/gnome/lib -lglib -GMOFILES = da.gmo de.gmo fr.gmo gl.gmo ja.gmo ko.gmo no.gmo ru.gmo sv.gmo tr.gmo +GMOFILES = da.gmo de.gmo fr.gmo gl.gmo ja.gmo ko.gmo no.gmo ru.gmo sv.gmo tr.gmo zh_TW.Big5.gmo GMSGFMT = /usr/bin/msgfmt GNOMECANVASPIXBUF_INCLUDEDIR = GNOMECANVASPIXBUF_LIBS = -rdynamic -L/gnome/lib -L/usr/X11R6/lib -lgdk_pixbuf -ltiff -ljpeg -lpng -lz -lgtk -lgdk -lgmodule -lglib -ldl -lXext -lX11 -lm -lgnomecanvaspixbuf @@ -132,7 +136,7 @@ ORBIT_IDL = /gnome/bin/orbit-idl ORBIT_LIBS = -L/gnome/lib -lORBit -lIIOP -lORBitutil -lglib -lnsl -lm PACKAGE = nautilus PAM_LIBS = -ldl -lpam -lpam_misc -POFILES = da.po de.po fr.po gl.po ja.po ko.po no.po ru.po sv.po tr.po +POFILES = da.po de.po fr.po gl.po ja.po ko.po no.po ru.po sv.po tr.po zh_TW.Big5.po POSUB = po RANLIB = ranlib RPM_LIBS = -lrpm -lz -lbz2 -lpopt -ldb @@ -165,7 +169,7 @@ nautilus_installer_SOURCES = main.c support.c support.h interface.c interfac nautilus_installer_LDFLAGS = -static -nautilus_installer_LDADD = $(top_builddir)/components/services/trilobite/libtrilobite/helixcode-utils.o $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-distribution.o $(top_builddir)/components/services/install/lib/libeazelinstall_minimal.a $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-root-helper.o $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-utils.o -L/gnome/lib -lgnomeui -lgnome -lart_lgpl -lgdk_imlib -lgtk -lgdk -lgmodule -lglib -L/usr/X11R6/lib -ldl -lXext -lX11 -lm -lSM -lICE /usr/lib/libesd.a /usr/lib/libaudiofile.a -lghttp -L/usr/lib -lrpm -lz -ldb1 -lpopt -lxml +nautilus_installer_LDADD = $(top_builddir)/components/services/trilobite/libtrilobite/helixcode-utils.o $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-distribution.o $(top_builddir)/components/services/install/lib/libeazelinstall_minimal.a $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-root-helper.o $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-utils.o -L/gnome/lib -lgnomeui -lgnome -lart_lgpl -lgdk_imlib -lgtk -lgdk -lgmodule -lglib -L/usr/X11R6/lib -ldl -lXext -lX11 -lm -lSM -lICE -lghttp -L/usr/lib -lrpm -lz -ldb1 -lpopt -lxml mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h @@ -183,8 +187,7 @@ $(top_builddir)/components/services/trilobite/libtrilobite/helixcode-utils.o \ $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-distribution.o \ $(top_builddir)/components/services/install/lib/libeazelinstall_minimal.a \ $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-root-helper.o \ -$(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-utils.o \ -/usr/lib/libesd.a /usr/lib/libaudiofile.a +$(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-utils.o COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) @@ -432,6 +435,9 @@ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean +# /usr/lib/libesd.a \ +# /usr/lib/libaudiofile.a \ + # # /gnome-source/nautilus/components/services/trilobite/libtrilobite/helixcode-utils.o \ # /gnome-source/nautilus/components/services/install/lib/libinstall.a \ diff --git a/nautilus-installer/src/Makefile.am b/nautilus-installer/src/Makefile.am index aec444954..78758bf40 100644 --- a/nautilus-installer/src/Makefile.am +++ b/nautilus-installer/src/Makefile.am @@ -46,13 +46,15 @@ nautilus_installer_LDADD = \ -lgmodule \ -lglib \ -L/usr/X11R6/lib -ldl -lXext -lX11 -lm -lSM -lICE \ - /usr/lib/libesd.a \ - /usr/lib/libaudiofile.a \ -lghttp \ -L/usr/lib -lrpm -lz -ldb1 \ -lpopt \ -lxml +# /usr/lib/libesd.a \ +# /usr/lib/libaudiofile.a \ + + # # /gnome-source/nautilus/components/services/trilobite/libtrilobite/helixcode-utils.o \ # /gnome-source/nautilus/components/services/install/lib/libinstall.a \ diff --git a/nautilus-installer/src/installer.c b/nautilus-installer/src/installer.c index b2b6e0694..9aecbc55a 100644 --- a/nautilus-installer/src/installer.c +++ b/nautilus-installer/src/installer.c @@ -46,28 +46,38 @@ eazel_install_progress (EazelInstall *service, int total_size_completed, int total_size, GtkWidget *widget) { - GtkProgressBar *progressbar; + GtkProgressBar *progressbar, *progress_overall; GtkLabel *action_label; GtkLabel *package_label; - float pct; - - pct = ( (total > 0) ? ((float) ((((float) amount) / total) * 100)): 100.0); - fprintf (stdout, "Install Progress - %s - %d %d %% %f\r", pack->name?pack->name:"(null)", amount, total, pct); action_label = gtk_object_get_data (GTK_OBJECT (widget), "action_label"); package_label = gtk_object_get_data (GTK_OBJECT (widget), "package_label"); - progressbar = gtk_object_get_data (GTK_OBJECT (widget), "progressbar"); + progressbar = gtk_object_get_data (GTK_OBJECT (widget), "progressbar_single"); + progress_overall = gtk_object_get_data (GTK_OBJECT (widget), "progressbar_overall"); + + if (amount == 0) { + gtk_label_set_text (action_label, "Install :"); + gtk_label_set_text (package_label, pack->name); + gtk_progress_set_format_string (GTK_PROGRESS (progressbar), "%p%% - %v kb/%u kb"); + gtk_progress_configure (GTK_PROGRESS (progressbar), 0, 0, (float)(total/1024)); + } - gtk_label_set_text (action_label, "Install :"); - gtk_label_set_text (package_label, pack->name); - gtk_progress_bar_update (progressbar, pct/100); + if (installer_debug) { + float pct; + pct = ( (total > 0) ? ((float) ((((float) amount) / total) * 100)): 100.0); + fprintf (stdout, "Install Progress - %s - %d %d %% %f\r", + pack->name?pack->name:"(null)", amount, total, pct); + } + + gtk_progress_set_value (GTK_PROGRESS (progressbar), (float)(amount/1024)); + gtk_progress_set_value (GTK_PROGRESS (progress_overall), (float)package_num-1); + g_main_iteration (FALSE); fflush (stdout); - if (amount == total) { + if (amount == total && installer_debug) { fprintf (stdout, "\n"); } - gtk_main_iteration (); } @@ -81,22 +91,36 @@ eazel_download_progress (EazelInstall *service, GtkProgressBar *progressbar; GtkLabel *action_label; GtkLabel *package_label; - float pct; - - pct = ( (total > 0) ? ((float) ((((float) amount) / total) * 100)): 100.0); - /* fprintf (stdout, "DOWNLOAD Progress - %s - %d %d %% %f\n", name?name:"(null)", amount, total, pct); */ action_label = gtk_object_get_data (GTK_OBJECT (widget), "action_label"); package_label = gtk_object_get_data (GTK_OBJECT (widget), "package_label"); - progressbar = gtk_object_get_data (GTK_OBJECT (widget), "progressbar"); + progressbar = gtk_object_get_data (GTK_OBJECT (widget), "progressbar_single"); - gtk_label_set_text (action_label, "Download :"); - gtk_label_set_text (package_label, name); - gtk_progress_bar_update (progressbar, pct/100); + if (amount == 0) { + gtk_label_set_text (package_label, name); + gtk_label_set_text (action_label, "Download :"); + gtk_progress_set_format_string (GTK_PROGRESS (progressbar), "%p%% - %v kb/%u kb"); + gtk_progress_configure (GTK_PROGRESS (progressbar), 0, 0, (float)(total/1024)); + } - fflush (stdout); - if (amount != total) { - gtk_main_iteration (); + if (installer_debug) { + float pct; + pct = ( (total > 0) ? ((float) ((((float) amount) / total) * 100)): 100.0); + fprintf (stdout, "DOWNLOAD Progress - %s - %d %d %% %f\r", + name?name:"(null)", amount, total, pct); + fflush (stdout); + } + + gtk_progress_set_value (GTK_PROGRESS (progressbar), amount/1024); + + if (amount != total) { + g_main_iteration (FALSE); + /* gtk_main_iteration (); */ + } else if (amount == total) { + /* + gtk_progress_set_format_string (GTK_OBJECT (progressbar), "done..."); + g_main_iteration (FALSE); + */ } } @@ -181,6 +205,80 @@ install_failed (EazelInstall *service, } static void +download_failed (EazelInstall *service, + const char *name, + char **output) +{ + (*output) = g_strdup_printf ("Download of %s failed", name); +} + +static void +eazel_install_preflight (EazelInstall *service, + int total_size, + int num_packages, + GtkWidget *widget) +{ + GtkLabel *action_label; + GtkLabel *package_label; + GtkProgressBar *progress_overall; + char *tmp; + + action_label = gtk_object_get_data (GTK_OBJECT (widget), "action_label"); + package_label = gtk_object_get_data (GTK_OBJECT (widget), "package_label"); + progress_overall = gtk_object_get_data (GTK_OBJECT (widget), "progressbar_overall"); + + gtk_progress_set_format_string (GTK_PROGRESS (progress_overall), "%p%% - package %v of %u"); + gtk_progress_configure (GTK_PROGRESS (progress_overall), 0, 0, (float)num_packages); + gtk_widget_show (GTK_WIDGET (progress_overall)); + + tmp = g_strdup_printf ("Preparing RPM, %d packages (%d mb)", num_packages, total_size/(1024*1024)); + + if (installer_debug) { + fprintf (stdout, "PREFLIGHT: %s\n", tmp); + } + + gtk_label_set_text (action_label, "Install :"); + gtk_label_set_text (package_label, tmp); + g_main_iteration (FALSE); + g_main_iteration (FALSE); +} + +static void +eazel_install_dep_check (EazelInstall *service, + const PackageData *pack, + const PackageData *needs, + GtkWidget *widget) +{ + GtkLabel *action_label; + GtkLabel *package_label; + char *tmp; + + action_label = gtk_object_get_data (GTK_OBJECT (widget), "action_label"); + package_label = gtk_object_get_data (GTK_OBJECT (widget), "package_label"); + + tmp = g_strdup_printf ("%s needs %d", pack->name, needs->name); + + if (installer_debug) { + fprintf (stdout, "DEP CHECK : %s\n", tmp); + } + + gtk_label_set_text (action_label, "Dep check :"); + gtk_label_set_text (package_label, tmp); + + g_main_iteration (FALSE); +} + +static gboolean +eazel_install_delete_files (EazelInstall *service, + GtkWidget *widget) +{ + if (installer_debug) { + fprintf (stdout, "Deleting rpm's\n"); + } + return TRUE ; +} + +static void make_dirs () { int retval; @@ -209,6 +307,7 @@ void installer (GtkWidget *window, EazelInstall *service; GtkProgressBar *progressbar; GtkLabel *package_label; + GtkLabel *action_label; make_dirs (); @@ -216,6 +315,7 @@ void installer (GtkWidget *window, gnome_warning_dialog ("We don't do UPGRADE yet"); return; } +#ifndef NAUTILUS_INSTALLER_RELEASE if (!installer_test) { GnomeDialog *d; d = GNOME_DIALOG (gnome_warning_dialog_parented (_("This is a warning, you're running\n" @@ -224,17 +324,19 @@ void installer (GtkWidget *window, GTK_WINDOW (window))); gnome_dialog_run_and_close (d); } - +#endif + + /* We set force, update and downgrade to true. */ service = EAZEL_INSTALL (gtk_object_new (TYPE_EAZEL_INSTALL, "verbose", TRUE, "silent", FALSE, "debug", TRUE, - "test", TRUE, //installer_test () ? FALSE : TRUE, + "test", installer_test ? TRUE : FALSE, "force", TRUE, "depend", FALSE, "update", TRUE, "uninstall", method==UNINSTALL ? TRUE : FALSE, - "downgrade", FALSE, + "downgrade", TRUE, "protocol", PROTOCOL, "tmp_dir", TMP_DIR, "rpmrc_file", RPMRC, @@ -258,10 +360,20 @@ void installer (GtkWidget *window, g_assert (service != NULL); - gtk_signal_connect (GTK_OBJECT (service), "download_progress", eazel_download_progress, window); - gtk_signal_connect (GTK_OBJECT (service), "install_progress", eazel_install_progress, window); - /* gtk_signal_connect (GTK_OBJECT (service), "download_failed", download_failed, window); */ - gtk_signal_connect (GTK_OBJECT (service), "install_failed", install_failed, &failure_info); + gtk_signal_connect (GTK_OBJECT (service), "download_progress", + GTK_SIGNAL_FUNC (eazel_download_progress), window); + gtk_signal_connect (GTK_OBJECT (service), "install_progress", + GTK_SIGNAL_FUNC (eazel_install_progress), window); + gtk_signal_connect (GTK_OBJECT (service), "preflight_check", + GTK_SIGNAL_FUNC (eazel_install_preflight), window); + gtk_signal_connect (GTK_OBJECT (service), "dependency_check", + GTK_SIGNAL_FUNC (eazel_install_dep_check), window); + gtk_signal_connect (GTK_OBJECT (service), "delete_files", + GTK_SIGNAL_FUNC (eazel_install_delete_files), window); + gtk_signal_connect (GTK_OBJECT (service), "download_failed", + GTK_SIGNAL_FUNC (download_failed), &failure_info); + gtk_signal_connect (GTK_OBJECT (service), "install_failed", + GTK_SIGNAL_FUNC (install_failed), &failure_info); failure_info = g_new0 (char, 8192); @@ -276,16 +388,23 @@ void installer (GtkWidget *window, eazel_install_uninstall_packages (service, NULL); break; }; + eazel_install_destroy (GTK_OBJECT (service)); package_label = gtk_object_get_data (GTK_OBJECT (window), "package_label"); - progressbar = gtk_object_get_data (GTK_OBJECT (window), "progressbar"); - - gtk_label_set_text (package_label, "Completed :"); - gtk_progress_bar_update (progressbar, 1); + progressbar = gtk_object_get_data (GTK_OBJECT (window), "progressbar_single"); + gtk_progress_set_format_string (GTK_PROGRESS (progressbar), "done"); + progressbar = gtk_object_get_data (GTK_OBJECT (window), "progressbar_overall"); + gtk_progress_set_format_string (GTK_PROGRESS (progressbar), "done"); if (strlen (failure_info)>1) { + gtk_label_set_text (package_label, "Failed"); + if (installer_debug) { + fprintf (stdout, "ERROR :\n%s", failure_info); + } gnome_error_dialog_parented (failure_info, GTK_WINDOW (window)); + } else { + gtk_label_set_text (package_label, "Completed"); } } diff --git a/nautilus-installer/src/interface.c b/nautilus-installer/src/interface.c index 8070ecbf8..2d13c6bc0 100644 --- a/nautilus-installer/src/interface.c +++ b/nautilus-installer/src/interface.c @@ -51,7 +51,8 @@ create_window (void) GtkWidget *table2; GtkWidget *label12; GtkWidget *action_label; - GtkWidget *progressbar; + GtkWidget *progressbar1; + GtkWidget *progressbar2; GtkWidget *package_label; GtkWidget *fixed1; GtkWidget *begin_button; @@ -233,14 +234,14 @@ create_window (void) gtk_widget_show (label11); gtk_box_pack_start (GTK_BOX (vbox5), label11, TRUE, FALSE, 0); - table2 = gtk_table_new (2, 2, FALSE); + table2 = gtk_table_new (3, 2, FALSE); set_white_stuff (GTK_WIDGET (table2)); gtk_widget_set_name (table2, "table2"); gtk_widget_ref (table2); gtk_object_set_data_full (GTK_OBJECT (window), "table2", table2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (table2); - gtk_box_pack_start (GTK_BOX (vbox5), table2, FALSE, FALSE, 16); + gtk_box_pack_start (GTK_BOX (vbox5), table2, FALSE, TRUE, 16); gtk_table_set_row_spacings (GTK_TABLE (table2), 16); label12 = gtk_label_new (_("Package :")); @@ -250,8 +251,9 @@ create_window (void) (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label12); gtk_table_attach (GTK_TABLE (table2), label12, 0, 1, 0, 1, - (GtkAttachOptions) (0), - (GtkAttachOptions) (0), 0, 0); + (GtkAttachOptions) 0, + (GtkAttachOptions) 0, + 0, 0); action_label = gtk_label_new (_("")); gtk_widget_set_name (action_label, ""); @@ -263,15 +265,27 @@ create_window (void) (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); - progressbar = gtk_progress_bar_new (); - gtk_widget_set_name (progressbar, "progressbar"); - gtk_widget_ref (progressbar); - gtk_object_set_data_full (GTK_OBJECT (window), "progressbar", progressbar, + progressbar1 = gtk_progress_bar_new (); + gtk_widget_set_name (progressbar1, "progressbar_single"); + gtk_widget_ref (progressbar1); + gtk_object_set_data_full (GTK_OBJECT (window), "progressbar_single", progressbar1, + (GtkDestroyNotify) gtk_widget_unref); + gtk_progress_set_show_text (GTK_PROGRESS (progressbar1), TRUE); + gtk_widget_show (progressbar1); + gtk_table_attach (GTK_TABLE (table2), progressbar1, 1, 2, 1, 2, + GTK_EXPAND, + GTK_EXPAND, + 0, 0); + + progressbar2 = gtk_progress_bar_new (); + gtk_widget_set_name (progressbar2, "progressbar_overall"); + gtk_widget_ref (progressbar2); + gtk_object_set_data_full (GTK_OBJECT (window), "progressbar_overall", progressbar2, (GtkDestroyNotify) gtk_widget_unref); - gtk_widget_show (progressbar); - gtk_table_attach (GTK_TABLE (table2), progressbar, 1, 2, 1, 2, - GTK_FILL, - GTK_FILL, + gtk_progress_set_show_text (GTK_PROGRESS (progressbar2), TRUE); + gtk_table_attach (GTK_TABLE (table2), progressbar2, 1, 2, 2, 3, + GTK_EXPAND, + GTK_EXPAND, 0, 0); package_label = gtk_label_new (_("")); diff --git a/nautilus-installer/src/link.sh b/nautilus-installer/src/link.sh index 68ad9ae2b..749c3d9cb 100755 --- a/nautilus-installer/src/link.sh +++ b/nautilus-installer/src/link.sh @@ -7,19 +7,18 @@ make -f makefile.staticlib popd make clean -make CFLAGS="-O -Werror" LDFLAGS="-static" +make CFLAGS="-O -Werror $*" LDFLAGS="-static" gcc -static -O -Werror -o nautilus-installer main.o support.o interface.o callbacks.o installer.o \ ../../components/services/install/lib/libeazelinstall_minimal.a \ ../../components/services/trilobite/libtrilobite/helixcode-utils.o \ ../../components/services/trilobite/libtrilobite/trilobite-core-distribution.o \ -../../components/services/trilobite/libtrilobite/trilobite-root-helper.o \ ../../components/services/trilobite/libtrilobite/trilobite-core-utils.o \ -L/gnome/lib -lgnomeui -lgnome -lart_lgpl -lgdk_imlib -lgtk -lgdk -lgmodule -lglib \ -L/usr/X11R6/lib -ldl -lXext -lX11 -lm -lSM -lICE /usr/lib/libesd.a /usr/lib/libaudiofile.a -lghttp \ -L/usr/lib -lrpm -lbz2 -lz -ldb1 -lpopt -lxml -echo Stripping... -strip nautilus-installer +#echo Stripping... +#strip nautilus-installer echo Packing... gzexe nautilus-installer diff --git a/nautilus-installer/src/prescript b/nautilus-installer/src/prescript index 5dbf10ed0..16f1fcf49 100644 --- a/nautilus-installer/src/prescript +++ b/nautilus-installer/src/prescript @@ -1,12 +1,14 @@ if test x$DISPLAY = x; then echo "The Nautilus-Installer requires X" fi -if ! test -d /var/eazel/services; then +if test $UID -ne 0; then echo "" - echo "Nautilus-Installer v 0.1d" + echo "Nautilus-Installer v 0.2" echo "" echo "argle bargle glob glyf muhainapuniua bork bork bork" echo "fisk er dumme og heste er grimme" + echo "To maend, gik ud i en skov, tog bukserne af, til de begge" + echo "blev flove. Gravballemanden blev min skaebne" echo "" echo "The Nautilus-Installer requires superuser access to prepare the system" echo "It needs to create a few administrative directories on in /var and" @@ -14,8 +16,12 @@ if ! test -d /var/eazel/services; then echo "we would never hurt a fly arglebargle." echo "" echo "Please enter root password at the prompt" - su - -c "mkdir /var/eazel && mkdir /var/eazel/services" - echo Uncompressing... - sh $0 $* $USER + xhost + localhost + su - -c "export DISPLAY=$DISPLAY && cd $PWD && echo Uncompressing... && sh $0 $* $USER" + xhost - localhost exit fi +if ! test -d /var/eazel/services; then + mkdir /var/eazel + mkdir /var/eazel/services +fi |