X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=remake.cpp;h=aea5353f023af08df0725c00ae9c97cc06d8964a;hp=77020a5b1a379981ebd4613b01181b4511b123d0;hb=aade6d9ba2e2b65e021de8a1c3a2d3874aa5742e;hpb=f8128e98f2f4d61309fdb4b24e12eb33b08d630c diff --git a/remake.cpp b/remake.cpp index 77020a5..aea5353 100644 --- a/remake.cpp +++ b/remake.cpp @@ -783,9 +783,34 @@ static std::ostream &operator<<(std::ostream &out, escape_string const &se) /** * Initialize #working_dir. */ -void init_working_dir() +void init_working_dir(char *argv0, bool client_mode) { char buf[1024]; + std::string cmd(argv0); +#ifdef WINDOWS + char dirsep = '\\'; +#else + char dirsep = '/'; +#endif + + if (!client_mode) + { + size_t pos = cmd.find_last_of(dirsep); + if (pos != std::string::npos) + { + std::string dir = cmd.substr(0, pos+1); + if (chdir(dir.c_str()) != 0) + { + perror("Failed to change working directory"); + exit(EXIT_FAILURE); + } + else + { + std::cout << "Entering directory `" + << dir << "'" << std::endl; + } + } + } char *res = getcwd(buf, sizeof(buf)); if (!res) { @@ -2565,6 +2590,7 @@ void accept_client() goto error; } DEBUG << "adding variable " << line << " to job " << job_id << std::endl; + vars[name].clear(); read_words(in, vars[name]); p += len + 1; } @@ -2806,7 +2832,8 @@ void usage(int exit_status) */ int main(int argc, char *argv[]) { - init_working_dir(); + char *sn = getenv("REMAKE_SOCKET"); + init_working_dir(argv[0], sn); std::string remakefile = "Remakefile"; string_list targets; @@ -2891,7 +2918,7 @@ int main(int argc, char *argv[]) #endif // Run as client if REMAKE_SOCKET is present in the environment. - if (char *sn = getenv("REMAKE_SOCKET")) client_mode(sn, targets); + if (sn) client_mode(sn, targets); // Otherwise run as server. server_mode(remakefile, targets);