git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv2/RFC] gitweb: Prepare for splitting gitweb
@ 2010-07-07  9:57 Jakub Narebski
  2010-07-07 10:30 ` Ævar Arnfjörð Bjarmason
  2010-07-07 16:25 ` Junio C Hamano
  0 siblings, 2 replies; 14+ messages in thread
From: Jakub Narebski @ 2010-07-07  9:57 UTC (permalink / raw)
  To: git; +Cc: Pavan Kumar Sunkara, Petr Baudis, Christian Couder,
	Jakub Narebski

Prepare gitweb for having been split into modules that are to be
installed alongside gitweb in 'lib/' subdirectory, by adding

  use lib __DIR__.'/lib';

to gitweb.perl (to main gitweb script), and preparing for putting
modules (relative path) in $(GITWEB_MODULES) in gitweb/Makefile.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---

This version uses shell 'for' loop, instead of make's $(foreach)
function, to avoid possible problem with generating a command line
that exceeded the maximum argument list length.  This solution has
also advantage of being more readable than original $(foreach ...)
version, with its overly long lines.

This idea is based on discussion surrounding Brandon Casey's patch.
In particular Bruce Stephens's suggestion was implemented to solve
issue of empty $(GITWEB_MODULES) variable (which is in this patch),
as implemented in
  [PATCH 2/2 v2] Makefile: work around ksh's failure to handle missing list argument to for loop
  http://thread.gmane.org/gmane.comp.version-control.git/147796/focus=150413

This version also moves installing modules to separate install-modules
target, as compared to previous version.

It also contains improvement from Pavan Kumar Sunkara, namely that
target is a directory, rather than destibation filename.  This might
be not necessary (and not much of an improvement).

 gitweb/Makefile    |   14 +++++++++++++-
 gitweb/gitweb.perl |    9 +++++++++
 2 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/gitweb/Makefile b/gitweb/Makefile
index 2fb7c2d..84a1d71 100644
--- a/gitweb/Makefile
+++ b/gitweb/Makefile
@@ -55,6 +55,7 @@ PERL_PATH  ?= /usr/bin/perl
 bindir_SQ = $(subst ','\'',$(bindir))#'
 gitwebdir_SQ = $(subst ','\'',$(gitwebdir))#'
 gitwebstaticdir_SQ = $(subst ','\'',$(gitwebdir)/static)#'
+gitweblibdir_SQ = $(subst ','\'',$(gitwebdir)/lib)#'
 SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))#'
 PERL_PATH_SQ  = $(subst ','\'',$(PERL_PATH))#'
 DESTDIR_SQ    = $(subst ','\'',$(DESTDIR))#'
@@ -145,12 +146,23 @@ gitweb.cgi: gitweb.perl GITWEB-BUILD-OPTIONS
 
 ### Installation rules
 
-install: all
+install: all install-modules
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitwebdir_SQ)'
 	$(INSTALL) -m 755 $(GITWEB_PROGRAMS) '$(DESTDIR_SQ)$(gitwebdir_SQ)'
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitwebstaticdir_SQ)'
 	$(INSTALL) -m 644 $(GITWEB_FILES) '$(DESTDIR_SQ)$(gitwebstaticdir_SQ)'
 
+install-modules:
+	install_dirs=$(sort $(dir $(GITWEB_MODULES))) && \
+	for dir in $$install_dirs; do \
+		test -d '$(DESTDIR_SQ)$(gitwebdir_SQ)/$$dir' || \
+		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitwebdir_SQ)/$$dir'; \
+	done
+	gitweb_modules=$(GITWEB_MODULES) && \
+	for mod in $$gitweb_modules; do \
+		$(INSTALL) -m 644 $$mod '$(DESTDIR_SQ)$(gitwebdir_SQ)/$$(dirname $$mod)'; \
+	done
+
 ### Cleaning rules
 
 clean:
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 1f611d2..bf1485c 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -9,6 +9,14 @@
 
 use strict;
 use warnings;
+
+use File::Spec;
+# __DIR__ is taken from Dir::Self __DIR__ fragment
+sub __DIR__ () {
+	File::Spec->rel2abs(join '', (File::Spec->splitpath(__FILE__))[0, 1]);
+}
+use lib __DIR__ . '/lib';
+
 use CGI qw(:standard :escapeHTML -nosticky);
 use CGI::Util qw(unescape);
 use CGI::Carp qw(fatalsToBrowser set_message);
@@ -16,6 +24,7 @@ use Encode;
 use Fcntl ':mode';
 use File::Find qw();
 use File::Basename qw(basename);
+
 binmode STDOUT, ':utf8';
 
 our $t0;
-- 
1.7.0.1

^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2010-07-14 21:21 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-07  9:57 [PATCHv2/RFC] gitweb: Prepare for splitting gitweb Jakub Narebski
2010-07-07 10:30 ` Ævar Arnfjörð Bjarmason
2010-07-07 20:05   ` Jakub Narebski
2010-07-08  7:01     ` Jakub Narebski
2010-07-13 22:24     ` Jakub Narebski
2010-07-13 22:30       ` Ævar Arnfjörð Bjarmason
2010-07-14  9:24         ` Jakub Narebski
2010-07-14 10:05           ` Ævar Arnfjörð Bjarmason
2010-07-14 21:21             ` Jakub Narebski
2010-07-07 16:25 ` Junio C Hamano
2010-07-07 20:20   ` Jakub Narebski
2010-07-08  0:30     ` Junio C Hamano
2010-07-08  6:59       ` Jakub Narebski
2010-07-08  7:20         ` [PATCHv3/RFC] " Jakub Narebski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).