Martin Mares wrote[1]:
> After upgrade to Stretch, gitweb no longer finds the configuration file
> "gitweb_config.perl" in the current directory. However, "man gitweb" still
> mentions this as one of the possible locations of the config file (and
> indeed a useful one when using multiple instances of gitweb).
>
> It was probably broken by Perl dropping "." from the default search path
> for security reasons.
Indeed, perldelta(1) tells me that in 5.24.1 (and 5.26, etc),
Core modules and tools no longer search "." for optional modules
gitweb.perl contains
sub read_config_file {
my $filename = shift;
return unless defined $filename;
# die if there are errors parsing config file
if (-e $filename) {
do $filename;
which implies an @INC search but it is silly --- as the "-e" test
illustrates, this never intended to search @INC.
Documentation says "If you are absolutely certain that you want your
script to load and execute a file from the current directory, then use
a ./ prefix". We can do that, like so:
diff --git i/gitweb/Makefile w/gitweb/Makefile
index cd194d057f..3160b6cc5d 100644
--- i/gitweb/Makefile
+++ w/gitweb/Makefile
@@ -18,7 +18,7 @@ RM ?= rm -f
INSTALL ?= install
# default configuration for gitweb
-GITWEB_CONFIG = gitweb_config.perl
+GITWEB_CONFIG = ./gitweb_config.perl
GITWEB_CONFIG_SYSTEM = /etc/gitweb.conf
GITWEB_CONFIG_COMMON = /etc/gitweb-common.conf
GITWEB_HOME_LINK_STR = projects
but that does not help if someone overrides GITWEB_CONFIG, and besides,
it would be nicer to avoid the possibility of an @INC search altogether.
Another alternative would be to use
local @INC = ('.');
Would that be better?
Advice from someone more versed than I am in perl would be very welcome
(hence the cc to Ævar).
Thanks for reporting and hope that helps,
Jonathan
[1] https://bugs.debian.org/915632