1
0
Fork 0
libreoffice/codemaker/source/netmaker/netoptions.cxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

150 lines
4.5 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <iostream>
#include <string>
#include "netoptions.hxx"
// the third parameter, bCmdFile, is unimplemented and hence unused
bool NetOptions::initOptions(int argc, char* argv[], bool)
{
if (argc < 2)
{
std::cerr << prepareHelp();
return false;
}
for (int i = 1; i < argc; i++)
{
OString argument = argv[i];
if (argument == "-h"_ostr || argument == "--help"_ostr)
{
std::cout << prepareHelp();
return false;
}
else if (argument == "-v"_ostr || argument == "--verbose"_ostr)
{
m_options["--verbose"_ostr] = ""_ostr;
}
else if (argument == "-n"_ostr || argument == "--dry-run"_ostr)
{
m_options["--dry-run"_ostr] = ""_ostr;
// dry run implies verbose
m_options["--verbose"_ostr] = "--dry-run"_ostr;
}
else if (argument == "-T"_ostr || argument == "--types"_ostr)
{
if (i + 1 < argc)
{
if (m_options.count("--types"_ostr) == 0)
{
m_options["--types"_ostr] = argv[++i];
}
else
{
m_options["--types"_ostr] += ";"_ostr + argv[++i];
}
}
else
{
throw IllegalArgument("-T/--types must be followed by type name or wildcard"_ostr);
}
}
else if (argument == "-X"_ostr || argument == "--extra-types"_ostr)
{
if (i + 1 < argc)
{
m_extra_input_files.emplace_back(argv[++i]);
}
else
{
throw IllegalArgument("-X/--extra-types must be followed by .rdb file"_ostr);
}
}
else if (argument == "-O"_ostr || argument == "--output-dir"_ostr)
{
if (i + 1 < argc)
{
m_options["--output-dir"_ostr] = argv[++i];
}
else
{
throw IllegalArgument("-O/--output-dir must be followed by directory"_ostr);
}
}
else
{
m_inputFiles.emplace_back(argument);
}
}
if (m_inputFiles.empty())
{
throw IllegalArgument("at least one .rdb file must be provided"_ostr);
}
if (m_options.count("--output-dir"_ostr) == 0)
{
throw IllegalArgument("-O/--output-dir must be provided"_ostr);
}
return true;
}
OString NetOptions::prepareHelp()
{
return prepareVersion() + R"(
About:
netmaker is a tool for generating C# files from a type library generated by the UNOIDL compiler unoidl-write.
The generated code files require a reference to the net_basetypes.dll assembly to build.
Usage:
netmaker [-v|--verbose] [-n|--dry-run]
[-T|--types <type name or wildcard>]
[-X|--extra-types <.rdb file>]
-O|--output-dir <output directory>
<rdb file(s)>
Options:
-h, --help
Display this help message.
-v, --verbose
Log the name of every file created and type generated to stdout.
-n, --dry-run
Do not write generated files to disk. Implies --verbose.
-T, --types <type name or wildcard>
Specify a type name or a wildcard pattern to generate code for. This option can be specified multiple times. If not specified, all types in the given .rdb files are generated.
-X, --extra-types <.rdb file>
Use an .rdb file containing types to be taken into account without generating output for them. This option can be specified multiple times.
-O, --output-dir <directory>
Specify the directory to write generated files to.
Examples:
netmaker --verbose -T com.acme.XSomething \
-X types.rdb -O acme/ acmetypes.rdb
netmaker --dry-run -T com.acme.* -X types.rdb \
-X offapi.rdb -O acme/ acmetypes.rdb
netmaker -X types.rdb -O acme/ \
acmetypes.rdb moretypes.rdb
)"_ostr;
}
OString NetOptions::prepareVersion() const { return m_program + " version "_ostr + m_version; }
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */