From e0e4478e7b4812f822d60a13a33525f8e529e1e8 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Mon, 24 Mar 2008 01:09:39 +0100 Subject: Add command dispatcher This simplifies the code in cgit.c and makes it easier to extend cgit with new pages/commands. Signed-off-by: Lars Hjemli --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 7102908..d9ff7d8 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2 EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lcrypto OBJECTS = shared.o cache.o parsing.o html.o ui-shared.o ui-repolist.o \ ui-summary.o ui-log.o ui-tree.o ui-commit.o ui-diff.o \ - ui-snapshot.o ui-blob.o ui-tag.o ui-refs.o ui-patch.o + ui-snapshot.o ui-blob.o ui-tag.o ui-refs.o ui-patch.o cmd.o ifdef NEEDS_LIBICONV -- cgit v1.2.3-70-g09d2 From 271818693d6803b5df25ee87570808c2a9dbd7e7 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Mon, 24 Mar 2008 20:49:41 +0100 Subject: Initial Makefile cleanup Sort the list of object files to improve readability/mergeability and remove manual dependency information which will soon be generated automatically. Signed-off-by: Lars Hjemli --- Makefile | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index d9ff7d8..d1950cb 100644 --- a/Makefile +++ b/Makefile @@ -14,10 +14,25 @@ GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2 EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lcrypto -OBJECTS = shared.o cache.o parsing.o html.o ui-shared.o ui-repolist.o \ - ui-summary.o ui-log.o ui-tree.o ui-commit.o ui-diff.o \ - ui-snapshot.o ui-blob.o ui-tag.o ui-refs.o ui-patch.o cmd.o - +OBJECTS = +OBJECTS += cache.o +OBJECTS += cgit.o +OBJECTS += cmd.o +OBJECTS += html.o +OBJECTS += parsing.o +OBJECTS += shared.o +OBJECTS += ui-blob.o +OBJECTS += ui-commit.o +OBJECTS += ui-diff.o +OBJECTS += ui-log.o +OBJECTS += ui-patch.o +OBJECTS += ui-refs.o +OBJECTS += ui-repolist.o +OBJECTS += ui-shared.o +OBJECTS += ui-snapshot.o +OBJECTS += ui-summary.o +OBJECTS += ui-tag.o +OBJECTS += ui-tree.o ifdef NEEDS_LIBICONV EXTLIBS += -liconv @@ -41,10 +56,10 @@ CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' -cgit: cgit.c $(OBJECTS) - $(CC) $(CFLAGS) cgit.c -o cgit $(OBJECTS) $(EXTLIBS) +cgit: $(OBJECTS) + $(CC) $(CFLAGS) -o cgit $(OBJECTS) $(EXTLIBS) -$(OBJECTS): cgit.h git/xdiff/lib.a git/libgit.a VERSION +$(OBJECTS): git/xdiff/lib.a git/libgit.a VERSION git/xdiff/lib.a: | git -- cgit v1.2.3-70-g09d2 From df90b51bafec24336cf30339b2978ff6df22b075 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Mon, 24 Mar 2008 23:01:44 +0100 Subject: Makefile: autobuild dependency rules This uses gcc to generate dependency rules for each `.o` file, based on the corresponding `.c` file, into a new set of `.d` files (which are also defined to depend on the same set of source files as their `.o` files). Result: * all objectfile dependencies are correctly calculated * only the necessary dependencies are recalculated when a sourcefile is updated Inspiration for the build rules: * http://www.gnu.org/software/make/manual/make.html#Automatic-Prerequisites * http://make.paulandlesley.org/autodep.html Signed-off-by: Lars Hjemli --- .gitignore | 1 + Makefile | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'Makefile') diff --git a/.gitignore b/.gitignore index aa36ff7..1e016e5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ cgit cgit.conf VERSION *.o +*.d diff --git a/Makefile b/Makefile index d1950cb..faf7b98 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,13 @@ GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2 -include cgit.conf +# +# Define a pattern rule for automatic dependency building +# +%.d: %.c + $(CC) $(CFLAGS) -MM $< | sed -e 's/\($*\)\.o:/\1.o $@:/g' >$@ + + EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lcrypto OBJECTS = OBJECTS += cache.o @@ -61,6 +68,8 @@ cgit: $(OBJECTS) $(OBJECTS): git/xdiff/lib.a git/libgit.a VERSION +-include $(OBJECTS:.o=.d) + git/xdiff/lib.a: | git git/libgit.a: | git @@ -84,7 +93,7 @@ uninstall: rm -f $(CGIT_SCRIPT_PATH)/cgit.png clean: - rm -f cgit VERSION *.o + rm -f cgit VERSION *.o *.d cd git && $(MAKE) clean distclean: clean -- cgit v1.2.3-70-g09d2 From 92908af4558d7362c7deeb05254343a5a5f11a05 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Mon, 24 Mar 2008 23:10:59 +0100 Subject: Move cgit_version from shared.c to cgit.c With the matching Makefile change, this makes sure that only cgit.o and cgit proper needs to be rebuildt when VERSION has been modified. Signed-off-by: Lars Hjemli --- Makefile | 4 +++- cgit.c | 2 ++ shared.c | 2 -- 3 files changed, 5 insertions(+), 3 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index faf7b98..c9be8fa 100644 --- a/Makefile +++ b/Makefile @@ -66,7 +66,9 @@ CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' cgit: $(OBJECTS) $(CC) $(CFLAGS) -o cgit $(OBJECTS) $(EXTLIBS) -$(OBJECTS): git/xdiff/lib.a git/libgit.a VERSION +$(OBJECTS): git/xdiff/lib.a git/libgit.a + +cgit.o: VERSION -include $(OBJECTS:.o=.d) diff --git a/cgit.c b/cgit.c index b3dd119..3943a0f 100644 --- a/cgit.c +++ b/cgit.c @@ -10,6 +10,8 @@ #include "cmd.h" #include "ui-shared.h" +const char *cgit_version = CGIT_VERSION; + void config_cb(const char *name, const char *value) { if (!strcmp(name, "root-title")) diff --git a/shared.c b/shared.c index cd60da5..48002ac 100644 --- a/shared.c +++ b/shared.c @@ -12,8 +12,6 @@ struct cgit_repolist cgit_repolist; struct cgit_context ctx; int cgit_cmd; -const char *cgit_version = CGIT_VERSION; - int chk_zero(int result, char *msg) { if (result != 0) -- cgit v1.2.3-70-g09d2 From c60781d677ee3b2e53b1f3078fef763622e5effe Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Tue, 25 Mar 2008 01:41:10 +0100 Subject: Makefile: copy the QUIET constructs from the Makefile in git.git These constructs were introduced by Shawn O. Pearce in commit 74f2b2a8d006a49e1be7e30731c2f7365d2741d1. Signed-off-by: Lars Hjemli --- Makefile | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index c9be8fa..223765d 100644 --- a/Makefile +++ b/Makefile @@ -12,12 +12,38 @@ GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2 # -include cgit.conf +# +# Define a way to invoke make in subdirs quietly, shamelessly ripped +# from git.git +# +QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir +QUIET_SUBDIR1 = + +ifneq ($(findstring $(MAKEFLAGS),w),w) +PRINT_DIR = --no-print-directory +else # "make -w" +NO_SUBDIR = : +endif + +ifndef V + QUIET_CC = @echo ' ' CC $@; + QUIET_MM = @echo ' ' MM $@; + QUIET_SUBDIR0 = +@subdir= + QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ + $(MAKE) $(PRINT_DIR) -C $$subdir +endif # # Define a pattern rule for automatic dependency building # %.d: %.c - $(CC) $(CFLAGS) -MM $< | sed -e 's/\($*\)\.o:/\1.o $@:/g' >$@ + $(QUIET_MM)$(CC) $(CFLAGS) -MM $< | sed -e 's/\($*\)\.o:/\1.o $@:/g' >$@ + +# +# Define a pattern rule for silent object building +# +%.o: %.c + $(QUIET_CC)$(CC) -o $*.o -c $(CFLAGS) $< EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lcrypto @@ -64,7 +90,7 @@ CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' cgit: $(OBJECTS) - $(CC) $(CFLAGS) -o cgit $(OBJECTS) $(EXTLIBS) + $(QUIET_CC)$(CC) $(CFLAGS) -o cgit $(OBJECTS) $(EXTLIBS) $(OBJECTS): git/xdiff/lib.a git/libgit.a @@ -77,11 +103,11 @@ git/xdiff/lib.a: | git git/libgit.a: | git git: - cd git && $(MAKE) xdiff/lib.a - cd git && $(MAKE) libgit.a + $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) xdiff/lib.a + $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) libgit.a test: all - $(MAKE) -C tests + $(QUIET_SUBDIR0)tests $(QUIET_SUBDIR1) all install: all mkdir -p $(DESTDIR)$(CGIT_SCRIPT_PATH) -- cgit v1.2.3-70-g09d2 From 20a33548b9a87a6eb23162ee5d137daa46d78613 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Fri, 28 Mar 2008 00:09:11 +0100 Subject: Move function for configfile parsing into configfile.[ch] This is a generic function which wanted its own little object file. Signed-off-by: Lars Hjemli --- Makefile | 1 + cgit.c | 5 ++-- cgit.h | 1 - configfile.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configfile.h | 8 ++++++ parsing.c | 75 --------------------------------------------------- 6 files changed, 99 insertions(+), 78 deletions(-) create mode 100644 configfile.c create mode 100644 configfile.h (limited to 'Makefile') diff --git a/Makefile b/Makefile index 223765d..355186e 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,7 @@ OBJECTS = OBJECTS += cache.o OBJECTS += cgit.o OBJECTS += cmd.o +OBJECTS += configfile.o OBJECTS += html.o OBJECTS += parsing.o OBJECTS += shared.o diff --git a/cgit.c b/cgit.c index 73b1f02..1f46e0d 100644 --- a/cgit.c +++ b/cgit.c @@ -9,6 +9,7 @@ #include "cgit.h" #include "cache.h" #include "cmd.h" +#include "configfile.h" #include "ui-shared.h" const char *cgit_version = CGIT_VERSION; @@ -103,7 +104,7 @@ void config_cb(const char *name, const char *value) else ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value)); } else if (!strcmp(name, "include")) - cgit_read_config(value, config_cb); + parse_configfile(value, config_cb); } static void querystring_cb(const char *name, const char *value) @@ -436,7 +437,7 @@ int main(int argc, const char **argv) cgit_repolist.count = 0; cgit_repolist.repos = NULL; - cgit_read_config(cgit_config_env ? cgit_config_env : CGIT_CONFIG, + parse_configfile(cgit_config_env ? cgit_config_env : CGIT_CONFIG, config_cb); if (getenv("SCRIPT_NAME")) ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME")); diff --git a/cgit.h b/cgit.h index f600912..91d18f8 100644 --- a/cgit.h +++ b/cgit.h @@ -214,7 +214,6 @@ extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); extern char *fmt(const char *format,...); -extern int cgit_read_config(const char *filename, configfn fn); extern int cgit_parse_query(char *txt, configfn fn); extern struct commitinfo *cgit_parse_commit(struct commit *commit); extern struct taginfo *cgit_parse_tag(struct tag *tag); diff --git a/configfile.c b/configfile.c new file mode 100644 index 0000000..4908058 --- /dev/null +++ b/configfile.c @@ -0,0 +1,87 @@ +/* configfile.c: parsing of config files + * + * Copyright (C) 2008 Lars Hjemli + * + * Licensed under GNU General Public License v2 + * (see COPYING for full license text) + */ + +#include +#include +#include "configfile.h" + +int next_char(FILE *f) +{ + int c = fgetc(f); + if (c=='\r') { + c = fgetc(f); + if (c!='\n') { + ungetc(c, f); + c = '\r'; + } + } + return c; +} + +void skip_line(FILE *f) +{ + int c; + + while((c=next_char(f)) && c!='\n' && c!=EOF) + ; +} + +int read_config_line(FILE *f, char *line, const char **value, int bufsize) +{ + int i = 0, isname = 0; + + *value = NULL; + while(i 8) + return -1; + if (!(f = fopen(filename, "r"))) + return -1; + nesting++; + while((len = read_config_line(f, line, &value, sizeof(line))) > 0) + fn(line, value); + nesting--; + fclose(f); + return 0; +} + diff --git a/configfile.h b/configfile.h new file mode 100644 index 0000000..04235e5 --- /dev/null +++ b/configfile.h @@ -0,0 +1,8 @@ +#ifndef CONFIGFILE_H +#define CONFIGFILE_H + +typedef void (*configfile_value_fn)(const char *name, const char *value); + +extern int parse_configfile(const char *filename, configfile_value_fn fn); + +#endif /* CONFIGFILE_H */ diff --git a/parsing.c b/parsing.c index 8dce488..9a4a7a3 100644 --- a/parsing.c +++ b/parsing.c @@ -8,81 +8,6 @@ #include "cgit.h" -int next_char(FILE *f) -{ - int c = fgetc(f); - if (c=='\r') { - c = fgetc(f); - if (c!='\n') { - ungetc(c, f); - c = '\r'; - } - } - return c; -} - -void skip_line(FILE *f) -{ - int c; - - while((c=next_char(f)) && c!='\n' && c!=EOF) - ; -} - -int read_config_line(FILE *f, char *line, const char **value, int bufsize) -{ - int i = 0, isname = 0; - - *value = NULL; - while(i 8) - return -1; - if (!(f = fopen(filename, "r"))) - return -1; - nesting++; - while((len = read_config_line(f, line, &value, sizeof(line))) > 0) - (*fn)(line, value); - nesting--; - fclose(f); - return 0; -} - char *convert_query_hexchar(char *txt) { int d1, d2; -- cgit v1.2.3-70-g09d2