|
static void | usage (int exit_status) |
|
int | main (int argc, char *argv[]) |
|
◆ main()
int main |
( |
int |
argc, |
|
|
char * |
argv[] |
|
) |
| |
This program behaves in two different ways.
- If the environment contains the REMAKE_SOCKET variable, the client connects to this socket and sends to the server its build targets. It exits once it receives the server reply.
- Otherwise, it creates a server that waits for build requests. It also creates a pseudo-client that requests the targets passed on the command line.
Definition at line 3053 of file remake.cpp.
3055 std::string remakefile;
3057 bool literal_targets =
false;
3058 bool indirect_targets =
false;
3061 for (
int i = 1; i < argc; ++i)
3063 std::string arg = argv[i];
3064 if (arg.empty())
usage(EXIT_FAILURE);
3065 if (literal_targets)
goto new_target;
3066 if (arg ==
"-h" || arg ==
"--help")
usage(EXIT_SUCCESS);
3070 else if (arg ==
"-k" || arg ==
"--keep-going")
3072 else if (arg ==
"-s" || arg ==
"--silent" || arg ==
"--quiet")
3074 else if (arg ==
"-r")
3075 indirect_targets =
true;
3076 else if (arg ==
"-B" || arg ==
"--always-make")
3078 else if (arg ==
"-f")
3080 if (++i == argc)
usage(EXIT_FAILURE);
3081 remakefile = argv[i];
3083 else if (arg ==
"--")
3084 literal_targets =
true;
3085 else if (arg.compare(0, 2,
"-j") == 0)
3087 else if (arg.compare(0, 7,
"--jobs=") == 0)
3091 if (arg[0] ==
'-')
usage(EXIT_FAILURE);
3092 if (arg.find(
'=') != std::string::npos)
3094 std::istringstream in(arg);
3101 targets.push_back(arg);
3102 DEBUG <<
"New target: " << arg <<
'\n';
3109 if (indirect_targets)
3116 l.push_back(
dependencies.begin()->second->targets.front());
3118 for (string_list::const_iterator i = l.begin(),
3119 i_end = l.end(); i != i_end; ++i)
3121 dependency_map::const_iterator j =
dependencies.find(*i);
3124 for (string_set::const_iterator k = dep.
deps.begin(),
3125 k_end = dep.
deps.end(); k != k_end; ++k)
3135 if (WSAStartup(MAKEWORD(2,2), &wsaData))
3137 std::cerr <<
"Unexpected failure while initializing Windows Socket" << std::endl;
3143 if (
char *sn = getenv(
"REMAKE_SOCKET"))
client_mode(sn, targets);
3146 if (remakefile.empty())
3148 remakefile =
"Remakefile";
◆ usage()
static void usage |
( |
int |
exit_status | ) |
|
|
static |
Display usage and exit with exit_status.
Definition at line 3026 of file remake.cpp.
3028 std::cerr <<
"Usage: remake [options] [target] ...\n"
3030 " -B, --always-make Unconditionally make all targets.\n"
3031 " -d Echo script commands.\n"
3032 " -d -d Print lots of debugging information.\n"
3033 " -f FILE Read FILE as Remakefile.\n"
3034 " -h, --help Print this message and exit.\n"
3035 " -j[N], --jobs=[N] Allow N jobs at once; infinite jobs with no arg.\n"
3036 " -k, --keep-going Keep going when some targets cannot be made.\n"
3037 " -r Look up targets from the dependencies on stdin.\n"
3038 " -s, --silent, --quiet Do not echo targets.\n";
Referenced by main().
std::list< std::string > string_list
static std::string normalize(std::string const &s, std::string const &w, std::string const &p)
static void init_prefix_dir()
static dependency_map dependencies
static bool read_words(input_generator &in, string_list &res)
static void init_working_dir()
static int max_active_jobs
static std::string read_word(std::istream &in, bool detect_equal=true)
static std::string prefix_dir
static std::string working_dir
static void client_mode(char *socket_name, string_list const &targets)
static void normalize_list(string_list &l, std::string const &w, std::string const &p)
static variable_map variables
static void server_mode(std::string const &remakefile, string_list const &targets)
static bool obsolete_targets
static void usage(int exit_status)
static int expect_token(std::istream &in, int mask)
static void load_dependencies(std::istream &in)