From 5bc73d7facbea81ae533777affaffbe3d7476c0f Mon Sep 17 00:00:00 2001 From: joey Date: Mon, 20 Nov 2006 22:12:43 +0000 Subject: * Rename ikiwiki.pl so MakeMaker doesn't see it, and install it. * Add some code to the build system that tries to determine if the lib installation directory is in @INC. If it's not, munge ikiwiki to hardcode the path to the lib directory. This should allow installing ikiwiki in nonstandard locations, including home directories, by just setting PREFIX at build time. * Fix nested examples directory in deb. --- Makefile.PL | 16 +++++-- debian/changelog | 11 ++++- debian/rules | 7 ++- ikiwiki.in | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ikiwiki.pl | 133 ------------------------------------------------------- pm_filter | 8 +++- t/syntax.t | 2 +- 7 files changed, 166 insertions(+), 144 deletions(-) create mode 100755 ikiwiki.in delete mode 100755 ikiwiki.pl diff --git a/Makefile.PL b/Makefile.PL index 831c13255..6e75097c8 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -13,8 +13,18 @@ pure_install:: extra_install VER=$(shell perl -e '$$_=<>;print m/\((.*?)\)/' ikiwiki.man ./mdwn2man ikiwiki-mass-rebuild 8 doc/ikiwiki-mass-rebuild.mdwn > ikiwiki-mass-rebuild.man - ./pm_filter $(PREFIX) $(VER) < ikiwiki.pl > ikiwiki.out + ./pm_filter $(PREFIX) $(VER) $(PROBABLE_INST_LIB) < ikiwiki.in > ikiwiki.out extra_clean: rm -rf html doc/.ikiwiki @@ -57,6 +67,6 @@ extra_install: WriteMakefile( NAME => 'IkiWiki', PREFIX => "/usr/local", - PM_FILTER => './pm_filter $(PREFIX) $(VER)', + PM_FILTER => './pm_filter $(PREFIX) $(VER) $(PROBABLE_INST_LIB)', MAN1PODS => {}, ); diff --git a/debian/changelog b/debian/changelog index b6f397f27..ed3b8fe6e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,8 +20,15 @@ ikiwiki (1.34) UNRELEASED; urgency=low * Split out a passwordauth module, that holds all the traditional password based authentication etc code. It's enabled by default, but can be disabled if you want only openid or some other auth method. - - -- Joey Hess Mon, 20 Nov 2006 09:17:07 -0500 + * Rename ikiwiki.pl so MakeMaker doesn't see it, and install it. + * Add some code to the build system that tries to determine if the + lib installation directory is in @INC. If it's not, munge ikiwiki + to hardcode the path to the lib directory. This should allow installing + ikiwiki in nonstandard locations, including home directories, by just + setting PREFIX at build time. + * Fix nested examples directory in deb. + + -- Joey Hess Mon, 20 Nov 2006 16:49:05 -0500 ikiwiki (1.33) unstable; urgency=low diff --git a/debian/rules b/debian/rules index 4e14b5ca3..9dedd3c45 100755 --- a/debian/rules +++ b/debian/rules @@ -3,7 +3,7 @@ build: build-stamp build-stamp: dh_testdir - perl Makefile.PL PREFIX=/usr + perl Makefile.PL PREFIX=/usr INSTALLDIRS=vendor $(MAKE) $(MAKE) test touch build-stamp @@ -22,11 +22,10 @@ binary-indep: build dh_testdir dh_testroot dh_clean -k - $(MAKE) pure_install INSTALLDIRS=vendor \ - DESTDIR=$(shell pwd)/debian/ikiwiki + $(MAKE) pure_install DESTDIR=$(shell pwd)/debian/ikiwiki dh_install wikilist etc/ikiwiki dh_installdocs html - dh_installexamples doc/examples + dh_installexamples doc/examples/* dh_link usr/share/common-licenses/GPL usr/share/doc/ikiwiki/html/GPL dh_installchangelogs dh_compress -X html diff --git a/ikiwiki.in b/ikiwiki.in new file mode 100755 index 000000000..7d13ab455 --- /dev/null +++ b/ikiwiki.in @@ -0,0 +1,133 @@ +#!/usr/bin/perl -T +$ENV{PATH}="/usr/local/bin:/usr/bin:/bin"; +delete @ENV{qw{IFS CDPATH ENV BASH_ENV}}; + +package IkiWiki; + +use warnings; +use strict; +use lib '.'; # For use in nonstandard directory, munged by Makefile. +use IkiWiki; + +sub usage () { #{{{ + die "usage: ikiwiki [options] source dest\n"; +} #}}} + +sub getconfig () { #{{{ + if (! exists $ENV{WRAPPED_OPTIONS}) { + %config=defaultconfig(); + eval q{use Getopt::Long}; + Getopt::Long::Configure('pass_through'); + GetOptions( + "setup|s=s" => \$config{setup}, + "wikiname=s" => \$config{wikiname}, + "verbose|v!" => \$config{verbose}, + "syslog!" => \$config{syslog}, + "rebuild!" => \$config{rebuild}, + "refresh!" => \$config{refresh}, + "render=s" => \$config{render}, + "wrappers!" => \$config{wrappers}, + "getctime" => \$config{getctime}, + "wrappermode=i" => \$config{wrappermode}, + "rcs=s" => \$config{rcs}, + "no-rcs" => sub { $config{rcs}="" }, + "anonok!" => \$config{anonok}, + "rss!" => \$config{rss}, + "atom!" => \$config{atom}, + "cgi!" => \$config{cgi}, + "discussion!" => \$config{discussion}, + "w3mmode!" => \$config{w3mmode}, + "notify!" => \$config{notify}, + "url=s" => \$config{url}, + "cgiurl=s" => \$config{cgiurl}, + "historyurl=s" => \$config{historyurl}, + "diffurl=s" => \$config{diffurl}, + "svnrepo" => \$config{svnrepo}, + "svnpath" => \$config{svnpath}, + "adminemail=s" => \$config{adminemail}, + "timeformat=s" => \$config{timeformat}, + "sslcookie!" => \$config{sslcookie}, + "httpauth!" => \$config{httpauth}, + "exclude=s@" => sub { + $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/; + }, + "adminuser=s@" => sub { + push @{$config{adminuser}}, $_[1] + }, + "templatedir=s" => sub { + $config{templatedir}=possibly_foolish_untaint($_[1]) + }, + "underlaydir=s" => sub { + $config{underlaydir}=possibly_foolish_untaint($_[1]) + }, + "wrapper:s" => sub { + $config{wrapper}=$_[1] ? $_[1] : "ikiwiki-wrap" + }, + "plugin=s@" => sub { + push @{$config{plugin}}, $_[1]; + }, + "disable-plugin=s@" => sub { + $config{plugin}=[grep { $_ ne $_[1] } @{$config{plugin}}]; + }, + "pingurl=s" => sub { + push @{$config{pingurl}}, $_[1]; + }, + "version" => sub { + print "ikiwiki version $IkiWiki::version\n"; + exit; + }, + ) || usage(); + + if (! $config{setup} && ! $config{render}) { + loadplugins(); + usage() unless @ARGV == 2; + $config{srcdir} = possibly_foolish_untaint(shift @ARGV); + $config{destdir} = possibly_foolish_untaint(shift @ARGV); + checkconfig(); + } + } + else { + # wrapper passes a full config structure in the environment + # variable + eval possibly_foolish_untaint($ENV{WRAPPED_OPTIONS}); + if ($@) { + error("WRAPPED_OPTIONS: $@"); + } + loadplugins(); + checkconfig(); + } +} #}}} + +sub main () { #{{{ + getconfig(); + + if ($config{cgi}) { + loadindex(); + require IkiWiki::CGI; + cgi(); + } + elsif ($config{setup}) { + require IkiWiki::Setup; + setup(); + } + elsif ($config{wrapper}) { + lockwiki(); + require IkiWiki::Wrapper; + gen_wrapper(); + } + elsif ($config{render}) { + require IkiWiki::Render; + commandline_render(); + } + else { + lockwiki(); + loadindex(); + require IkiWiki::Render; + rcs_update(); + refresh(); + rcs_notify() if $config{notify}; + saveindex(); + } +} #}}} + +main; diff --git a/ikiwiki.pl b/ikiwiki.pl deleted file mode 100755 index ff1da353e..000000000 --- a/ikiwiki.pl +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/perl -T -$ENV{PATH}="/usr/local/bin:/usr/bin:/bin"; -delete @ENV{qw{IFS CDPATH ENV BASH_ENV}}; - -package IkiWiki; - -use warnings; -use strict; -use lib '.'; # For use without installation, removed by Makefile. -use IkiWiki; - -sub usage () { #{{{ - die "usage: ikiwiki [options] source dest\n"; -} #}}} - -sub getconfig () { #{{{ - if (! exists $ENV{WRAPPED_OPTIONS}) { - %config=defaultconfig(); - eval q{use Getopt::Long}; - Getopt::Long::Configure('pass_through'); - GetOptions( - "setup|s=s" => \$config{setup}, - "wikiname=s" => \$config{wikiname}, - "verbose|v!" => \$config{verbose}, - "syslog!" => \$config{syslog}, - "rebuild!" => \$config{rebuild}, - "refresh!" => \$config{refresh}, - "render=s" => \$config{render}, - "wrappers!" => \$config{wrappers}, - "getctime" => \$config{getctime}, - "wrappermode=i" => \$config{wrappermode}, - "rcs=s" => \$config{rcs}, - "no-rcs" => sub { $config{rcs}="" }, - "anonok!" => \$config{anonok}, - "rss!" => \$config{rss}, - "atom!" => \$config{atom}, - "cgi!" => \$config{cgi}, - "discussion!" => \$config{discussion}, - "w3mmode!" => \$config{w3mmode}, - "notify!" => \$config{notify}, - "url=s" => \$config{url}, - "cgiurl=s" => \$config{cgiurl}, - "historyurl=s" => \$config{historyurl}, - "diffurl=s" => \$config{diffurl}, - "svnrepo" => \$config{svnrepo}, - "svnpath" => \$config{svnpath}, - "adminemail=s" => \$config{adminemail}, - "timeformat=s" => \$config{timeformat}, - "sslcookie!" => \$config{sslcookie}, - "httpauth!" => \$config{httpauth}, - "exclude=s@" => sub { - $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/; - }, - "adminuser=s@" => sub { - push @{$config{adminuser}}, $_[1] - }, - "templatedir=s" => sub { - $config{templatedir}=possibly_foolish_untaint($_[1]) - }, - "underlaydir=s" => sub { - $config{underlaydir}=possibly_foolish_untaint($_[1]) - }, - "wrapper:s" => sub { - $config{wrapper}=$_[1] ? $_[1] : "ikiwiki-wrap" - }, - "plugin=s@" => sub { - push @{$config{plugin}}, $_[1]; - }, - "disable-plugin=s@" => sub { - $config{plugin}=[grep { $_ ne $_[1] } @{$config{plugin}}]; - }, - "pingurl=s" => sub { - push @{$config{pingurl}}, $_[1]; - }, - "version" => sub { - print "ikiwiki version $IkiWiki::version\n"; - exit; - }, - ) || usage(); - - if (! $config{setup} && ! $config{render}) { - loadplugins(); - usage() unless @ARGV == 2; - $config{srcdir} = possibly_foolish_untaint(shift @ARGV); - $config{destdir} = possibly_foolish_untaint(shift @ARGV); - checkconfig(); - } - } - else { - # wrapper passes a full config structure in the environment - # variable - eval possibly_foolish_untaint($ENV{WRAPPED_OPTIONS}); - if ($@) { - error("WRAPPED_OPTIONS: $@"); - } - loadplugins(); - checkconfig(); - } -} #}}} - -sub main () { #{{{ - getconfig(); - - if ($config{cgi}) { - loadindex(); - require IkiWiki::CGI; - cgi(); - } - elsif ($config{setup}) { - require IkiWiki::Setup; - setup(); - } - elsif ($config{wrapper}) { - lockwiki(); - require IkiWiki::Wrapper; - gen_wrapper(); - } - elsif ($config{render}) { - require IkiWiki::Render; - commandline_render(); - } - else { - lockwiki(); - loadindex(); - require IkiWiki::Render; - rcs_update(); - refresh(); - rcs_notify() if $config{notify}; - saveindex(); - } -} #}}} - -main; diff --git a/pm_filter b/pm_filter index 89449bd91..f61e7810b 100755 --- a/pm_filter +++ b/pm_filter @@ -3,6 +3,7 @@ BEGIN { $prefix=shift; $ver=shift; + $libdir=shift; } if (/INSTALLDIR_AUTOREPLACE/) { @@ -12,5 +13,10 @@ elsif (/VERSION_AUTOREPLACE/) { $_=qq{our \$version="$ver";}; } elsif (/^use lib/) { - $_=""; + if (grep { $_ eq $libdir } @INC) { + $_=""; + } + else { + $_="use lib '$libdir';\n"; + } } diff --git a/t/syntax.t b/t/syntax.t index cbbdee62f..20396aaae 100755 --- a/t/syntax.t +++ b/t/syntax.t @@ -3,7 +3,7 @@ use warnings; use strict; use Test::More; -my @progs="ikiwiki.pl"; +my @progs="ikiwiki.in"; my @libs="IkiWiki.pm"; push @libs, map { chomp; $_ } `find IkiWiki -type f -name \\*.pm`; -- cgit v1.2.3