This program behaves in two different ways.
3054{
3055 std::string remakefile;
3057 bool literal_targets = false;
3058 bool indirect_targets = false;
3059
3060
3061 for (int i = 1; i < argc; ++i)
3062 {
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);
3067 if (arg == "-d")
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")
3079 {
3080 if (++i == argc)
usage(EXIT_FAILURE);
3081 remakefile = argv[i];
3082 }
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)
3089 else
3090 {
3091 if (arg[0] ==
'-')
usage(EXIT_FAILURE);
3092 if (arg.find('=') != std::string::npos)
3093 {
3094 std::istringstream in(arg);
3098 continue;
3099 }
3100 new_target:
3101 targets.push_back(arg);
3102 DEBUG <<
"New target: " << arg <<
'\n';
3103 }
3104 }
3105
3108
3109 if (indirect_targets)
3110 {
3113 targets.swap(l);
3115 {
3116 l.push_back(
dependencies.begin()->second->targets.front());
3117 }
3118 for (string_list::const_iterator i = l.begin(),
3119 i_end = l.end(); i != i_end; ++i)
3120 {
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)
3126 {
3128 }
3129 }
3131 }
3132
3133#ifdef WINDOWS
3134 WSADATA wsaData;
3135 if (WSAStartup(MAKEWORD(2,2), &wsaData))
3136 {
3137 std::cerr << "Unexpected failure while initializing Windows Socket" << std::endl;
3138 return 1;
3139 }
3140#endif
3141
3142
3143 if (
char *sn = getenv(
"REMAKE_SOCKET"))
client_mode(sn, targets);
3144
3145
3146 if (remakefile.empty())
3147 {
3148 remakefile = "Remakefile";
3150 }
3153}
static void client_mode(char *socket_name, string_list const &targets)
static void load_dependencies()
static int expect_token(std::istream &in, int mask)
static std::string read_word(std::istream &in, bool detect_equal=true)
static std::string normalize(std::string const &s, std::string const &w, std::string const &p)
static void init_working_dir()
static void init_prefix_dir()
static void normalize_list(string_list &l, std::string const &w, std::string const &p)
static void server_mode(std::string const &remakefile, string_list const &targets)
static bool read_words(input_generator &in, string_list &res)
static void usage(int exit_status)
static int max_active_jobs
std::list< std::string > string_list
static std::string working_dir
static dependency_map dependencies
static variable_map variables
static bool obsolete_targets
static std::string prefix_dir