Exemple #1
0
	fl::configuration get_freelan_configuration(const fscp::logger& logger, const service_configuration& configuration)
	{
		namespace po = boost::program_options;

		po::options_description configuration_options("Configuration");
		configuration_options.add(get_server_options());
		configuration_options.add(get_client_options());
		configuration_options.add(get_fscp_options());
		configuration_options.add(get_security_options());
		configuration_options.add(get_tap_adapter_options());
		configuration_options.add(get_switch_options());
		configuration_options.add(get_router_options());

		fl::configuration fl_configuration;
		po::variables_map vm;
		const fs::path configuration_file = configuration.configuration_file;
		const fs::path root_directory = configuration_file.parent_path();
		fs::basic_ifstream<char> ifs(configuration_file);

		if (!ifs)
		{
			throw po::reading_file(configuration_file.string().c_str());
		}

		po::store(po::parse_config_file(ifs, configuration_options, true), vm);
		make_paths_absolute(vm, root_directory);
		po::notify(vm);

		setup_configuration(logger, fl_configuration, vm);

		return fl_configuration;
	}
// ------------------------------------------------------------------
int main(int argc,char *argv[])
{
    bool info = false;
    bool usage = false;
    setup_configuration();
    for (int i = 1; i < argc; i++)
        if (!strcmp(argv[i], "-info"))
            info = true;
        else if (!strncmp(argv[i], "--enable-", 9))
            set(&argv[i][9], true);
        else if (!strncmp(argv[i], "--disable-", 10))
            set(&argv[i][10], false);
        else if (!strncmp(argv[i], "--platform=", 11))
            set_platform(&argv[i][11]);
        else if (!strncmp(argv[i], "--name=", 7))
            replace_makefile("NAME", &argv[i][7]);
        else if (!strncmp(argv[i], "--prefix=", 9))
            replace_makefile("PREFIX", &argv[i][9]);
        else if (!strncmp(argv[i], "--namespace=", 12))
            set_namespace(&argv[i][12]);
        else if (!strcmp(argv[i], "-v"))
            any_set = true;
        else if (!strcmp(argv[i], "-q"))
            quiet = true;
        else if (*argv[i] == '-')
        {
            fprintf(stderr, "Unknown command line option: %s\n", argv[i]);
            usage = true;
        }
        else
            usage = true;
    if (usage)
    {
        fprintf(stderr, "Usage: %s [-info] [-v] [-h] [--platform=PLATFORM] [--prefix=<path>] [--name=<Name>] [--namespace=<ns>] [--enable-OPTION] [--disable-OPTION]\n", *argv);
        fprintf(stderr, "\n");
        fprintf(stderr, "Options (default value)\n");
        fprintf(stderr, "\n");
        fprintf(stderr, "  -info        Show compiled options\n");
        fprintf(stderr, "  -v           Show configuration options\n");
        fprintf(stderr, "  -q           Don't show extra info\n");
        fprintf(stderr, "  -h           Show this help\n");
        fprintf(stderr, "\n");
        fprintf(stderr, "  --platform=  Select target platform\n");
        fprintf(stderr, "  --prefix=    Set installation path (/usr/local/$NAME)\n");
        fprintf(stderr, "  --name=      Set library name (Sockets)\n");
        fprintf(stderr, "  --namespace= Set C++ namespace for entire library\n");
        fprintf(stderr, "\n");
        fprintf(stderr, "Defined platforms\n");
        fprintf(stderr, "\n");
        fprintf(stderr, "  linux-x86-32\n");
        fprintf(stderr, "  linux-x86-64\n");
        fprintf(stderr, "  win32-cygwin\n");
        fprintf(stderr, "  solaris9-sparc-64\n");
        fprintf(stderr, "  macosx\n");
        fprintf(stderr, "  solaris8\n");
        fprintf(stderr, "\n");
        fprintf(stderr, "Possible OPTION values:\n");
        fprintf(stderr, "\n");
        fprintf(stderr, "  openssl      Enable openssl library\n");
        fprintf(stderr, "  ipv6         Add ipv6 support\n");
        fprintf(stderr, "  sctp         Add SCTP support\n");
        fprintf(stderr, "  no_addrinfo  Do not use addrinfo API for dns requests\n");
        fprintf(stderr, "  pool         Enable client connection pool\n");
        fprintf(stderr, "  socks4       Enable socks4 client support\n");
        fprintf(stderr, "  resolver     Enable asynchronous dns\n");
        fprintf(stderr, "  reconnect    Enable tcp reconnect\n");
        fprintf(stderr, "  detach       Enable detach functionality\n");
        fprintf(stderr, "  exceptions   Enable C++ exceptions on some error conditions\n");
        fprintf(stderr, "  xml2         Enable libxml2 support\n");
        fprintf(stderr, "\n");
        fprintf(stderr, "Use with no options to show platform configuration options in CFLAGS format.\n");
        return 0;
    }
    if (argc > 1 && info)
    {
        show_info();
        return 0;
    }
    if (any_set)
    {
        if (!quiet)
            show_configuration();
        return 0;
    }
    printf(" -D_VERSION='\"%s\"'", _VERSION);

#ifdef LINUX
    printf(" -DLINUX");
#endif
#ifdef MACOSX
    printf(" -DMACOSX");
#endif
#ifdef SOLARIS
    printf(" -DSOLARIS");
#endif
#ifdef SOLARIS8
    printf(" -DSOLARIS8");
#endif
#ifdef _WIN32
    printf(" -D_WIN32");
#endif
#ifdef __CYGWIN__
    printf(" -D__CYGWIN__");
#endif
#ifdef SOCKETS_NAMESPACE
    printf(" -DSOCKETS_NAMESPACE=%s", SOCKETS_NAMESPACE_STR);
#endif
#ifdef _DEBUG
    printf(" -D_DEBUG");
#endif

}