+use Getopt::Long;
+
+my (%links, %oldlinks, %oldpagemtime, %renderedfiles, %pagesources);
+
+# Holds global config settings, also used by some modules.
+our %config=( #{{{
+ wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$)},
+ wiki_link_regexp => qr/\[\[([^\s]+)\]\]/,
+ wiki_file_regexp => qr/(^[-A-Za-z0-9_.:\/+]+$)/,
+ verbose => 0,
+ wikiname => "wiki",
+ default_pageext => ".mdwn",
+ cgi => 0,
+ svn => 1,
+ url => '',
+ cgiurl => '',
+ historyurl => '',
+ anonok => 0,
+ rebuild => 0,
+ wrapper => undef,
+ wrappermode => undef,
+ srcdir => undef,
+ destdir => undef,
+ templatedir => undef,
+ setup => undef,
+); #}}}
+
+GetOptions( #{{{
+ "setup=s" => \$config{setup},
+ "wikiname=s" => \$config{wikiname},
+ "verbose|v!" => \$config{verbose},
+ "rebuild!" => \$config{rebuild},
+ "wrapper=s" => sub { $config{wrapper}=$_[1] ? $_[1] : "ikiwiki-wrap" },
+ "wrappermode=i" => \$config{wrappermode},
+ "svn!" => \$config{svn},
+ "anonok!" => \$config{anonok},
+ "cgi!" => \$config{cgi},
+ "url=s" => \$config{url},
+ "cgiurl=s" => \$config{cgiurl},
+ "historyurl=s" => \$config{historyurl},
+ "exclude=s@" => sub {
+ $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/;
+ },
+) || usage();
+
+if (! $config{setup}) {
+ usage() unless @ARGV == 3;
+ $config{srcdir} = possibly_foolish_untaint(shift);
+ $config{templatedir} = possibly_foolish_untaint(shift);
+ $config{destdir} = possibly_foolish_untaint(shift);
+ if ($config{cgi} && ! length $config{url}) {
+ error("Must specify url to wiki with --url when using --cgi");
+ }