aboutsummaryrefslogtreecommitdiffstats
path: root/src/blogc-git-receiver/pre-receive.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blogc-git-receiver/pre-receive.c')
-rw-r--r--src/blogc-git-receiver/pre-receive.c69
1 files changed, 40 insertions, 29 deletions
diff --git a/src/blogc-git-receiver/pre-receive.c b/src/blogc-git-receiver/pre-receive.c
index c780055..15db99a 100644
--- a/src/blogc-git-receiver/pre-receive.c
+++ b/src/blogc-git-receiver/pre-receive.c
@@ -40,8 +40,6 @@ rmdir_recursive(const char *dir)
return;
struct stat buf;
if (0 != stat(dir, &buf)) {
- fprintf(stderr, "warning: failed to remove directory (%s): %s\n", dir,
- strerror(errno));
return;
}
if (!S_ISDIR(buf.st_mode)) {
@@ -178,11 +176,6 @@ bgr_pre_receive_hook(int argc, char *argv[])
goto cleanup;
}
- if ((0 != access("Makefile", F_OK)) && (0 != access("GNUMakefile", F_OK))) {
- fprintf(stderr, "warning: no makefile found. skipping ...\n");
- goto cleanup;
- }
-
char *home = getenv("HOME");
if (home == NULL) {
fprintf(stderr, "error: failed to find user home path\n");
@@ -190,21 +183,6 @@ bgr_pre_receive_hook(int argc, char *argv[])
goto cleanup;
}
- const char *make_impl = NULL;
-
- if (127 != WEXITSTATUS(system("gmake -f /dev/null 2> /dev/null > /dev/null"))) {
- make_impl = "gmake";
- }
- else if (127 != WEXITSTATUS(system("make -f /dev/null 2> /dev/null > /dev/null"))) {
- make_impl = "make";
- }
-
- if (make_impl == NULL) {
- fprintf(stderr, "error: no 'make' implementation found\n");
- rv = 3;
- goto cleanup;
- }
-
unsigned long epoch = time(NULL);
output_dir = bc_strdup_printf("%s/builds/%s-%lu", home, master, epoch);
@@ -214,19 +192,52 @@ bgr_pre_receive_hook(int argc, char *argv[])
free(tmp);
}
- char *gmake_cmd = bc_strdup_printf(
- "%s -j%d OUTPUT_DIR=\"%s\" BLOGC_GIT_RECEIVER=1", make_impl,
- cpu_count(), output_dir);
- fprintf(stdout, "running command: %s\n\n", gmake_cmd);
+ // detect if we will run blogc-make, make or nothing, and generate the
+ // command.
+ char *build_cmd = NULL;
+ if (0 == access("blogcfile", F_OK)) {
+ if (127 == WEXITSTATUS(system("blogc-make -v 2> /dev/null > /dev/null"))) {
+ fprintf(stderr, "error: failed to find blogc-make binary\n");
+ rv = 3;
+ goto cleanup;
+ }
+ build_cmd = bc_strdup_printf("OUTPUT_DIR=\"%s\" blogc-make -V all",
+ output_dir);
+ }
+ else if ((0 == access("Makefile", F_OK)) || (0 == access("GNUMakefile", F_OK))) {
+ const char *make_impl = NULL;
+
+ if (127 != WEXITSTATUS(system("gmake -f /dev/null 2> /dev/null > /dev/null"))) {
+ make_impl = "gmake";
+ }
+ else if (127 != WEXITSTATUS(system("make -f /dev/null 2> /dev/null > /dev/null"))) {
+ make_impl = "make";
+ }
+
+ if (make_impl == NULL) {
+ fprintf(stderr, "error: no 'make' implementation found\n");
+ rv = 3;
+ goto cleanup;
+ }
+ build_cmd = bc_strdup_printf(
+ "%s -j%d OUTPUT_DIR=\"%s\" BLOGC_GIT_RECEIVER=1", make_impl,
+ cpu_count(), output_dir);
+ }
+ else {
+ fprintf(stderr, "warning: no blogcfile or Makefile found. skipping ...\n");
+ goto cleanup;
+ }
+
+ fprintf(stdout, "running command: %s\n\n", build_cmd);
fflush(stdout);
- if (0 != system(gmake_cmd)) {
+ if (0 != system(build_cmd)) {
fprintf(stderr, "error: failed to build website ...\n");
rmdir_recursive(output_dir);
- free(gmake_cmd);
+ free(build_cmd);
rv = 3;
goto cleanup;
}
- free(gmake_cmd);
+ free(build_cmd);
if (0 != chdir(repo_dir)) {
fprintf(stderr, "error: failed to chdir (%s): %s\n", repo_dir,