diff --git a/Makefile.am b/Makefile.am index fefc2f7fe0..c8fdf0f219 100644 --- a/Makefile.am +++ b/Makefile.am @@ -420,7 +420,7 @@ build/print_git_revision: build/print_git_revision.c src/include/switch_version.h: src/include/switch_version.h.in Makefile build/print_git_revision $(libfreeswitch_la_SOURCES) $(library_include_HEADERS) @cat $< > $@; \ - if [ -d .git ]; then \ + if [ -d .git ] && [ -n "$$(which git)" ]; then \ xver="$$(./build/print_git_revision)"; \ sed -e "/#define *SWITCH_VERSION_REVISION/{s/\"\([^\"]*\)\"/\"\1$$xver\"/}" \ $< > $@; \ diff --git a/build/print_git_revision.c b/build/print_git_revision.c index f29e45f16f..6b11646c8e 100644 --- a/build/print_git_revision.c +++ b/build/print_git_revision.c @@ -9,51 +9,50 @@ #include #include -int sys(char *buf, int buflen, char *cmd) { +static int sys(char *buf, int buflen, char *cmd) { int i, p[2]; - pipe(p); + if (pipe(p)) return 255; if (!(i=fork())) { close(p[0]); dup2(p[1],1); close(p[1]); execlp("sh","sh","-c",cmd,NULL); } else { - int s, x, c=0; + int s, x=0; close(p[1]); waitpid(i,&s,0); if (!(WIFEXITED(s))) return 255; if (WEXITSTATUS(s)) return WEXITSTATUS(s); - while ((x=read(p[0],buf,buflen-1))>0) c+=x; - if (x<0) return 1; - buf[c] = 0; + if (buf) { + while (buflen>1 && (x=read(p[0],buf,buflen-1))>0) buf+=x,buflen-=x; + close(p[0]); + if (x<0) return 255; + *buf=0; + } else close(p[0]); } return 0; } -int sys1(char *buf, int buflen, char *cmd) { - int r = sys(buf,buflen,cmd); - char *c; - if (r!=0) return r; +static int sys1(char *buf, int buflen, char *cmd) { + int r; char *c; + if ((r=sys(buf,buflen,cmd))) return r; if ((c=strstr(buf,"\n"))) *c=0; return 0; } int main(int argc, char **argv) { - char buf[256], xdate[256], xfdate[256], xcommit[256], xver[256]; - time_t xdate_t; - struct tm *xdate_tm; - - sys1(xdate,sizeof(xdate),"git log -n1 --format='%ct' HEAD"); - xdate_t = (time_t) atoi(xdate); - if (!(xdate_tm = gmtime(&xdate_t))) return 1; + char xver[256], xdate[256], xfdate[256], xcommit[256]; + time_t xdate_t; struct tm *xdate_tm; + if ((sys1(xdate,sizeof(xdate),"git log -n1 --format='%ct' HEAD"))) return 1; + xdate_t=(time_t)atoi(xdate); + if (!(xdate_tm=gmtime(&xdate_t))) return 1; strftime(xfdate,sizeof(xfdate),"%Y%m%dT%H%M%SZ",xdate_tm); - sys1(xcommit,sizeof(xcommit),"git rev-list -n1 --abbrev=10 --abbrev-commit HEAD"); + if ((sys1(xcommit,sizeof(xcommit),"git rev-list -n1 --abbrev=10 --abbrev-commit HEAD"))) + return 1; snprintf(xver,sizeof(xver),"+git~%s~%s",xfdate,xcommit); - if ((sys(buf,sizeof(buf),"git diff-index --quiet HEAD"))) { - time_t now_t = time(NULL); - struct tm *now_tm = gmtime(&now_t); - char now[256]; - if (!now_tm) return 1; + if ((sys(NULL,0,"git diff-index --quiet HEAD"))) { + char buf[256], now[256]; time_t now_t=time(NULL); struct tm *now_tm; + if (!(now_tm=gmtime(&now_t))) return 1; strftime(now,sizeof(now),"%Y%m%dT%H%M%SZ",now_tm); snprintf(buf,sizeof(buf),"%s+unclean~%s",xver,now); strncpy(xver,buf,sizeof(xver));