]> sjero.net Git - wget/blobdiff - src/main.c
Drop the current maintainer line from the version display.
[wget] / src / main.c
index 4616b0639b5600afbc07f7147cc54a6aa7161771..fa46eb57d35ef3d072728143219109a87f7a1ed3 100644 (file)
@@ -1,6 +1,6 @@
 /* Command line parsing.
-   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+   2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 This file is part of GNU Wget.
 
@@ -44,6 +44,7 @@ as that of the covered work.  */
 #include <errno.h>
 #include <time.h>
 
+#include "exits.h"
 #include "utils.h"
 #include "init.h"
 #include "retr.h"
@@ -75,7 +76,7 @@ extern char *compilation_string;
 extern char *system_getrc;
 extern char *link_string;
 /* defined in build_info.c */
-extern char *compiled_features[];
+extern const char *compiled_features[];
 /* Used for --version output in print_version */
 #define MAX_CHARS_PER_LINE      72
 #define TABULATION              4
@@ -147,6 +148,7 @@ struct cmdline_option {
 static struct cmdline_option option_data[] =
   {
     { "accept", 'A', OPT_VALUE, "accept", -1 },
+    { "adjust-extension", 'E', OPT_BOOLEAN, "adjustextension", -1 },
     { "append-output", 'a', OPT__APPEND_OUTPUT, NULL, required_argument },
     { "ask-password", 0, OPT_BOOLEAN, "askpassword", -1 },
     { "auth-no-challenge", 0, OPT_BOOLEAN, "authnochallenge", -1 },
@@ -195,7 +197,7 @@ static struct cmdline_option option_data[] =
     { "header", 0, OPT_VALUE, "header", -1 },
     { "help", 'h', OPT_FUNCALL, (void *)print_help, no_argument },
     { "host-directories", 0, OPT_BOOLEAN, "addhostdir", -1 },
-    { "html-extension", 'E', OPT_BOOLEAN, "htmlextension", -1 },
+    { "html-extension", 'E', OPT_BOOLEAN, "adjustextension", -1 }, /* deprecated */
     { "htmlify", 0, OPT_BOOLEAN, "htmlify", -1 },
     { "http-keep-alive", 0, OPT_BOOLEAN, "httpkeepalive", -1 },
     { "http-passwd", 0, OPT_VALUE, "httppassword", -1 }, /* deprecated */
@@ -230,7 +232,7 @@ static struct cmdline_option option_data[] =
     { "post-data", 0, OPT_VALUE, "postdata", -1 },
     { "post-file", 0, OPT_VALUE, "postfile", -1 },
     { "prefer-family", 0, OPT_VALUE, "preferfamily", -1 },
-    { "preserve-permissions", 0, OPT_BOOLEAN, "preservepermissions", -1 },
+    { "preserve-permissions", 0, OPT_BOOLEAN, "preservepermissions", -1 }, /* deprecated */
     { IF_SSL ("private-key"), 0, OPT_VALUE, "privatekey", -1 },
     { IF_SSL ("private-key-type"), 0, OPT_VALUE, "privatekeytype", -1 },
     { "progress", 0, OPT_VALUE, "progress", -1 },
@@ -264,6 +266,7 @@ static struct cmdline_option option_data[] =
     { "timeout", 'T', OPT_VALUE, "timeout", -1 },
     { "timestamping", 'N', OPT_BOOLEAN, "timestamping", -1 },
     { "tries", 't', OPT_VALUE, "tries", -1 },
+    { "use-server-timestamps", 0, OPT_BOOLEAN, "useservertimestamps", -1 },
     { "user", 0, OPT_VALUE, "user", -1 },
     { "user-agent", 'U', OPT_VALUE, "useragent", -1 },
     { "verbose", 'v', OPT_BOOLEAN, "verbose", -1 },
@@ -271,7 +274,7 @@ static struct cmdline_option option_data[] =
     { "version", 'V', OPT_FUNCALL, (void *) print_version, no_argument },
     { "wait", 'w', OPT_VALUE, "wait", -1 },
     { "waitretry", 0, OPT_VALUE, "waitretry", -1 },
-#ifdef MSDOS
+#ifdef USE_WATT32
     { "wdebug", 0, OPT_BOOLEAN, "wdebug", -1 },
 #endif
   };
@@ -379,9 +382,10 @@ init_switches (void)
 
 /* Print the usage message.  */
 static void
-print_usage (void)
+print_usage (int error)
 {
-  printf (_("Usage: %s [OPTION]... [URL]...\n"), exec_name);
+  fprintf (error ? stderr : stdout, _("Usage: %s [OPTION]... [URL]...\n"),
+           exec_name);
 }
 
 /* Print the help message, describing all the available options.  If
@@ -417,7 +421,7 @@ Logging and input file:\n"),
     N_("\
   -d,  --debug               print lots of debugging information.\n"),
 #endif
-#ifdef MSDOS
+#ifdef USE_WATT32
     N_("\
        --wdebug              print Watt-32 debug output.\n"),
 #endif
@@ -455,6 +459,9 @@ Download:\n"),
   -N,  --timestamping            don't re-retrieve files unless newer than\n\
                                  local.\n"),
     N_("\
+  --no-use-server-timestamps     don't set the local file's timestamp by\n\
+                                 the one on the server.\n"),
+    N_("\
   -S,  --server-response         print server response.\n"),
     N_("\
        --spider                  don't download anything.\n"),
@@ -537,7 +544,7 @@ HTTP options:\n"),
        --default-page=NAME     Change the default page name (normally\n\
                                this is `index.html'.).\n"),
     N_("\
-  -E,  --html-extension        save HTML documents with `.html' extension.\n"),
+  -E,  --adjust-extension      save HTML/CSS documents with proper extensions.\n"),
     N_("\
        --ignore-length         ignore `Content-Length' header field.\n"),
     N_("\
@@ -685,7 +692,7 @@ Recursive accept/reject:\n"),
 
   printf (_("GNU Wget %s, a non-interactive network retriever.\n"),
           version_string);
-  print_usage ();
+  print_usage (0);
 
   for (i = 0; i < countof (help); i++)
     fputs (_(help[i]), stdout);
@@ -735,11 +742,11 @@ prompt_for_password (void)
    lines.*/
 static void
 format_and_print_line (const char *prefix, const char *line,
-                       int line_length) 
+                       int line_length)
 {
   int remaining_chars;
   char *line_dup, *token;
-  
+
   assert (prefix != NULL);
   assert (line != NULL);
 
@@ -752,12 +759,12 @@ format_and_print_line (const char *prefix, const char *line,
   remaining_chars = line_length;
   /* We break on spaces. */
   token = strtok (line_dup, " ");
-  while (token != NULL) 
+  while (token != NULL)
     {
       /* If however a token is much larger than the maximum
          line length, all bets are off and we simply print the
          token on the next line. */
-      if (remaining_chars <= strlen (token)) 
+      if (remaining_chars <= strlen (token))
         {
           printf ("\n%*c", TABULATION, ' ');
           remaining_chars = line_length - TABULATION;
@@ -779,23 +786,15 @@ print_version (void)
   const char *locale_title  = _("Locale: ");
   const char *compile_title = _("Compile: ");
   const char *link_title    = _("Link: ");
-  char *line;
   char *env_wgetrc, *user_wgetrc;
   int i;
 
-#ifdef __VMS
-  printf (_("GNU Wget %s built on VMS %s %s.\n\n"),
-   version_string, vms_arch(), vms_vers());
-#else /* def __VMS */
   printf (_("GNU Wget %s built on %s.\n\n"), version_string, OS_TYPE);
-#endif /* def __VMS */
-  /* compiled_features is a char*[]. We limit the characters per
-     line to MAX_CHARS_PER_LINE and prefix each line with a constant
-     number of spaces for proper alignment. */
-  for (i = 0; compiled_features[i] != NULL; ) 
+
+  for (i = 0; compiled_features[i] != NULL; )
     {
       int line_length = MAX_CHARS_PER_LINE;
-      while ((line_length > 0) && (compiled_features[i] != NULL)) 
+      while ((line_length > 0) && (compiled_features[i] != NULL))
         {
           printf ("%s ", compiled_features[i]);
           line_length -= strlen (compiled_features[i]) + 2;
@@ -804,17 +803,18 @@ print_version (void)
       printf ("\n");
     }
   printf ("\n");
-  /* Handle the case when $WGETRC is unset and $HOME/.wgetrc is 
+
+  /* Handle the case when $WGETRC is unset and $HOME/.wgetrc is
      absent. */
   printf ("%s\n", wgetrc_title);
   env_wgetrc = wgetrc_env_file_name ();
-  if (env_wgetrc && *env_wgetrc) 
+  if (env_wgetrc && *env_wgetrc)
     {
       printf (_("    %s (env)\n"), env_wgetrc);
       xfree (env_wgetrc);
     }
   user_wgetrc = wgetrc_user_file_name ();
-  if (user_wgetrc) 
+  if (user_wgetrc)
     {
       printf (_("    %s (user)\n"), user_wgetrc);
       xfree (user_wgetrc);
@@ -823,17 +823,21 @@ print_version (void)
   printf (_("    %s (system)\n"), SYSTEM_WGETRC);
 #endif
 
+#ifdef ENABLE_NLS
   format_and_print_line (locale_title,
-                        LOCALEDIR, 
-                        MAX_CHARS_PER_LINE);
-  
-  format_and_print_line (compile_title,
-                        compilation_string,
-                        MAX_CHARS_PER_LINE);
+                        LOCALEDIR,
+                        MAX_CHARS_PER_LINE);
+#endif /* def ENABLE_NLS */
+
+  if (compilation_string != NULL)
+    format_and_print_line (compile_title,
+                           compilation_string,
+                           MAX_CHARS_PER_LINE);
 
-  format_and_print_line (link_title,
-                        link_string,
-                        MAX_CHARS_PER_LINE);
+  if (link_string != NULL)
+    format_and_print_line (link_title,
+                           link_string,
+                           MAX_CHARS_PER_LINE);
 
   printf ("\n");
   /* TRANSLATORS: When available, an actual copyright character
@@ -849,8 +853,6 @@ There is NO WARRANTY, to the extent permitted by law.\n"), stdout);
      names such as this one. See en_US.po for reference. */
   fputs (_("\nOriginally written by Hrvoje Niksic <hniksic@xemacs.org>.\n"),
          stdout);
-  fputs (_("Currently maintained by Micah Cowan <micah@cowan.name>.\n"),
-         stdout);
   fputs (_("Please send bug reports and questions to <bug-wget@gnu.org>.\n"),
          stdout);
   exit (0);
@@ -871,11 +873,16 @@ main (int argc, char **argv)
   i18n_initialize ();
 
   /* Construct the name of the executable, without the directory part.  */
+#ifdef __VMS
+  /* On VMS, lose the "dev:[dir]" prefix and the ".EXE;nnn" suffix. */
+  exec_name = vms_basename (argv[0]);
+#else /* def __VMS */
   exec_name = strrchr (argv[0], PATH_SEPARATOR);
   if (!exec_name)
     exec_name = argv[0];
   else
     ++exec_name;
+#endif /* def __VMS [else] */
 
 #ifdef WINDOWS
   /* Drop extension (typically .EXE) from executable filename. */
@@ -899,7 +906,7 @@ main (int argc, char **argv)
         {
           if (ret == '?')
             {
-              print_usage ();
+              print_usage (0);
               printf ("\n");
               printf (_("Try `%s --help' for more options.\n"), exec_name);
               exit (2);
@@ -967,10 +974,12 @@ main (int argc, char **argv)
                   setoptval ("noparent", "1", opt->long_name);
                   break;
                 default:
-                  printf (_("%s: illegal option -- `-n%c'\n"), exec_name, *p);
-                  print_usage ();
-                  printf ("\n");
-                  printf (_("Try `%s --help' for more options.\n"), exec_name);
+                  fprintf (stderr, _("%s: illegal option -- `-n%c'\n"),
+                           exec_name, *p);
+                  print_usage (1);
+                  fprintf (stderr, "\n");
+                  fprintf (stderr, _("Try `%s --help' for more options.\n"),
+                           exec_name);
                   exit (1);
                 }
             break;
@@ -1025,34 +1034,35 @@ main (int argc, char **argv)
   /* Sanity checks.  */
   if (opt.verbose && opt.quiet)
     {
-      printf (_("Can't be verbose and quiet at the same time.\n"));
-      print_usage ();
+      fprintf (stderr, _("Can't be verbose and quiet at the same time.\n"));
+      print_usage (1);
       exit (1);
     }
   if (opt.timestamping && opt.noclobber)
     {
-      printf (_("\
+      fprintf (stderr, _("\
 Can't timestamp and not clobber old files at the same time.\n"));
-      print_usage ();
+      print_usage (1);
       exit (1);
     }
 #ifdef ENABLE_IPV6
   if (opt.ipv4_only && opt.ipv6_only)
     {
-      printf (_("Cannot specify both --inet4-only and --inet6-only.\n"));
-      print_usage ();
+      fprintf (stderr,
+               _("Cannot specify both --inet4-only and --inet6-only.\n"));
+      print_usage (1);
       exit (1);
     }
 #endif
   if (opt.output_document)
     {
-      if (opt.convert_links 
+      if (opt.convert_links
           && (nurl > 1 || opt.page_requisites || opt.recursive))
         {
           fputs (_("\
 Cannot specify both -k and -O if multiple URLs are given, or in combination\n\
-with -p or -r. See the manual for details.\n\n"), stdout);
-          print_usage ();
+with -p or -r. See the manual for details.\n\n"), stderr);
+          print_usage (1);
           exit (1);
         }
       if (opt.page_requisites
@@ -1069,30 +1079,33 @@ WARNING: timestamping does nothing in combination with -O. See the manual\n\
 for details.\n\n"));
           opt.timestamping = false;
         }
-      if (opt.noclobber && file_exists_p(opt.output_document)) 
-           { 
+      if (opt.noclobber && file_exists_p(opt.output_document))
+           {
               /* Check if output file exists; if it does, exit. */
-              logprintf (LOG_VERBOSE, _("File `%s' already there; not retrieving.\n"), opt.output_document);
+              logprintf (LOG_VERBOSE,
+                         _("File `%s' already there; not retrieving.\n"),
+                         opt.output_document);
               exit(1);
-           }  
+           }
     }
 
   if (opt.ask_passwd && opt.passwd)
     {
-      printf (_("Cannot specify both --ask-password and --password.\n"));
-      print_usage ();
+      fprintf (stderr,
+               _("Cannot specify both --ask-password and --password.\n"));
+      print_usage (1);
       exit (1);
     }
 
   if (!nurl && !opt.input_filename)
     {
       /* No URL specified.  */
-      printf (_("%s: missing URL\n"), exec_name);
-      print_usage ();
+      fprintf (stderr, _("%s: missing URL\n"), exec_name);
+      print_usage (1);
       printf ("\n");
       /* #### Something nicer should be printed here -- similar to the
          pre-1.5 `--help' page.  */
-      printf (_("Try `%s --help' for more options.\n"), exec_name);
+      fprintf (stderr, _("Try `%s --help' for more options.\n"), exec_name);
       exit (1);
     }
 
@@ -1112,7 +1125,7 @@ for details.\n\n"));
   if (opt.enable_iri || opt.locale || opt.encoding_remote)
     {
       /* sXXXav : be more specific... */
-      printf(_("This version does not have support for IRIs\n"));
+      fprintf (stderr, _("This version does not have support for IRIs\n"));
       exit(1);
     }
 #endif
@@ -1125,7 +1138,7 @@ for details.\n\n"));
         exit (1);
     }
 
-#ifdef MSDOS
+#ifdef USE_WATT32
   if (opt.wdebug)
      dbug_init();
   sock_init();
@@ -1208,6 +1221,13 @@ WARNING: Can't reopen standard output in binary mode;\n\
           if (fstat (fileno (output_stream), &st) == 0 && S_ISREG (st.st_mode))
             output_stream_regular = true;
         }
+      if (!output_stream_regular && opt.convert_links)
+        {
+          fprintf (stderr, _("-k can be used together with -O only if \
+outputting to a regular file.\n"));
+          print_usage (1);
+          exit(1);
+        }
     }
 
 #ifdef __VMS
@@ -1215,13 +1235,9 @@ WARNING: Can't reopen standard output in binary mode;\n\
      any), otherwise according to the current default device.
   */
   if (output_stream == NULL)
-    {
-      set_ods5_dest( "SYS$DISK");
-    }
+    set_ods5_dest( "SYS$DISK");
   else if (output_stream != stdout)
-    {
-      set_ods5_dest( opt.output_document);
-    }
+    set_ods5_dest( opt.output_document);
 #endif /* def __VMS */
 
 #ifdef WINDOWS
@@ -1278,9 +1294,9 @@ WARNING: Can't reopen standard output in binary mode;\n\
               int old_follow_ftp = opt.follow_ftp;
 
               /* Turn opt.follow_ftp on in case of recursive FTP retrieval */
-              if (url_scheme (*t) == SCHEME_FTP) 
+              if (url_scheme (*t) == SCHEME_FTP)
                 opt.follow_ftp = 1;
-          
+
               status = retrieve_tree (url_parsed, NULL);
 
               opt.follow_ftp = old_follow_ftp;
@@ -1288,7 +1304,7 @@ WARNING: Can't reopen standard output in binary mode;\n\
           else
           {
             status = retrieve_url (url_parsed, *t, &filename, &redirected_URL,
-                                   NULL, &dt, opt.recursive, iri);
+                                   NULL, &dt, opt.recursive, iri, true);
           }
 
           if (opt.delete_after && file_exists_p(filename))
@@ -1317,10 +1333,8 @@ WARNING: Can't reopen standard output in binary mode;\n\
 
   /* Print broken links. */
   if (opt.recursive && opt.spider)
-    {
-      print_broken_links();
-    }
-  
+    print_broken_links ();
+
   /* Print the downloaded sum.  */
   if ((opt.recursive || opt.page_requisites
        || nurl > 1
@@ -1353,10 +1367,7 @@ WARNING: Can't reopen standard output in binary mode;\n\
     xfree (url[i]);
   cleanup ();
 
-  if (status == RETROK)
-    return 0;
-  else
-    return 1;
+  return get_exit_status ();
 }
 #endif /* TESTING */
 \f