/**
* 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)
{
*/
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;
#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);