firasuke / cross / slibtool

Forked from cross/slibtool 3 months ago
Clone

Blame src/skin/slbt_skin_default.c

9ca8c4
#include "slibtool_driver_impl.h"
4b56de
#include "slibtool_visibility_impl.h"
9ca8c4
#include "argv/argv.h"
9ca8c4
4b56de
const slbt_hidden struct argv_option slbt_default_options[] = {
070b2a
	{"version",		0,TAG_VERSION,ARGV_OPTARG_NONE,0,0,0,
c4e10a
				"show version information."},
9ca8c4
803034
	{"help",		'h',TAG_HELP,ARGV_OPTARG_OPTIONAL,0,0,0,
c4e10a
				"show usage information."},
9ca8c4
efd47f
	{"help-all",		'h',TAG_HELP_ALL,ARGV_OPTARG_NONE,0,0,0,
c4e10a
				"show comprehensive help information."},
efd47f
499a71
	{"heuristics",		0,TAG_HEURISTICS,ARGV_OPTARG_OPTIONAL,0,0,"<path>",
499a71
				"enable/disable creation of shared/static libraries "
499a71
				"by parsing a project-specific shell script, "
499a71
				"the %s of which is either provided via this "
499a71
				"command-line argument, or detected by the program."},
499a71
efd47f
	{"mode",		0,TAG_MODE,ARGV_OPTARG_REQUIRED,0,
efd47f
				"clean|compile|execute|finish"
4c3fb7
				"|install|link|uninstall|ar"
4c3fb7
				"|stoolie|slibtoolize",0,
242ef8
				"set the execution mode, where <mode> "
242ef8
				"is one of {%s}. of the above modes, "
242ef8
				"'finish' is not needed and is therefore "
0066a6
				"a no-op; 'clean' is currently not implemented, "
0066a6
				"however its addition is expected before the "
c4e10a
				"next major release."},
efd47f
b9575f
	{"finish",		0,TAG_FINISH,ARGV_OPTARG_NONE,0,0,0,
b9575f
				"same as --mode=finish"},
b9575f
efd47f
	{"dry-run",		'n',TAG_DRY_RUN,ARGV_OPTARG_NONE,0,0,0,
efd47f
				"do not spawn any processes, "
c4e10a
				"do not make any changes to the file system."},
efd47f
efd47f
	{"tag",			0,TAG_TAG,ARGV_OPTARG_REQUIRED,0,
fb5e7f
				"CC|CXX|FC|F77|ASM|NASM|RC|disable-static|disable-shared",0,
242ef8
				"a universal playground game; "
c4e10a
				"currently accepted tags are {%s}."},
efd47f
c1f216
	{"config",		0,TAG_CONFIG,ARGV_OPTARG_NONE,0,0,0,
c1f216
				"print a compatible --config output"},
c1f216
c57816
	{"info",		0,TAG_INFO,ARGV_OPTARG_NONE,0,0,0,
c4e10a
				"display detected (or cached) environment information."},
efd47f
c2dde6
	{"rosylee",		0,TAG_INFO,ARGV_OPTARG_NONE,0,0,0,
c2dde6
				"synonym for --info"},
c2dde6
c2dde6
	{"valerius",		0,TAG_INFO,ARGV_OPTARG_NONE,0,0,0,
c2dde6
				"alternative for --rosylee"},
c2dde6
efd47f
	{"debug",		0,TAG_DEBUG,ARGV_OPTARG_NONE,0,0,0,
c4e10a
				"display internal debug information."},
efd47f
efd47f
	{"features",		0,TAG_FEATURES,ARGV_OPTARG_NONE,0,0,0,
c4e10a
				"show feature information."},
efd47f
6f4115
	{"dumpmachine",		0,TAG_DUMPMACHINE,ARGV_OPTARG_NONE,0,0,0,
6f4115
				"print the cached result of the native compiler's "
6f4115
				"-dumpmachine output (bootstrapping: print the cached, "
6f4115
				"manual setting of CCHOST)."},
6f4115
0a9bff
	{"legabits",		0,TAG_LEGABITS,ARGV_OPTARG_OPTIONAL,0,
0a9bff
				"enabled|disabled",0,
0a9bff
				"enable/disable legacy bits, i.e. "
0a9bff
				"the installation of an .la wrapper "
0a9bff
				"along with its associated shared library "
0a9bff
				"and/or static archive. option syntax is "
0a9bff
				"--legabits[=%s]"},
0a9bff
34988f
	{"ccwrap",		0,TAG_CCWRAP,ARGV_OPTARG_REQUIRED,0,0,
34988f
				"<program>",
34988f
				"use %s as a compiler driver wrapper; "
34988f
				"for the purpose of compatibility, "
34988f
				"this switch may be omitted for known "
34988f
				"wrappers (ccache, compiler, distcc, "
34988f
				"and purify) when immediately followed "
34988f
				"by the compiler argument."},
34988f
efd47f
	{"no-warnings",		0,TAG_WARNINGS,ARGV_OPTARG_NONE,0,0,0,""},
efd47f
efd47f
	{"preserve-dup-deps",	0,TAG_DEPS,ARGV_OPTARG_NONE,0,0,0,
c4e10a
				"leave the dependency list alone."},
efd47f
2bc175
	{"annotate",		0,TAG_ANNOTATE,ARGV_OPTARG_REQUIRED,0,
2bc175
				"always|never|minimal|full",0,
2bc175
				"modify default annotation options; "
2bc175
				"the defautls are full annotation when "
2bc175
				"stdout is a tty, and no annotation "
242ef8
				"at all otherwise; accepted modes "
c4e10a
				"are {%s}."},
2bc175
efd47f
	{"quiet",		0,TAG_SILENT,ARGV_OPTARG_NONE,0,0,0,
c4e10a
				"do not say anything."},
efd47f
efd47f
	{"silent",		0,TAG_SILENT,ARGV_OPTARG_NONE,0,0,0,
c4e10a
				"say absolutely nothing."},
efd47f
efd47f
	{"verbose",		0,TAG_VERBOSE,ARGV_OPTARG_NONE,0,0,0,
efd47f
				"generate lots of informational messages "
c4e10a
				"that nobody can understand."},
efd47f
302dac
	{"host",		0,TAG_HOST,ARGV_OPTARG_REQUIRED,0,0,"<host>",
c4e10a
				"set an explicit (cross-)host."},
302dac
302dac
	{"flavor",		0,TAG_FLAVOR,ARGV_OPTARG_REQUIRED,0,
302dac
				"bsd|cygwin|darwin|linux|midipix|mingw",
242ef8
				0,"explicitly specify the host's flavor; "
c4e10a
				"currently accepted flavors are {%s}."},
302dac
302dac
	{"ar",			0,TAG_AR,ARGV_OPTARG_REQUIRED,0,0,"<ar>",
c4e10a
				"explicitly specify the archiver to be used."},
302dac
6bc170
	{"as",			0,TAG_AS,ARGV_OPTARG_REQUIRED,0,0,"<as>",
c4e10a
				"explicitly specify the assembler to be used (with dlltool)."},
6bc170
b5e104
	{"nm",			0,TAG_NM,ARGV_OPTARG_REQUIRED,0,0,"<nm>",
c4e10a
				"explicitly specify the name mangler to be used."},
b5e104
302dac
	{"ranlib",		0,TAG_RANLIB,ARGV_OPTARG_REQUIRED,0,0,"<ranlib>",
c4e10a
				"explicitly specify the librarian to be used."},
302dac
302dac
	{"dlltool",		0,TAG_DLLTOOL,ARGV_OPTARG_REQUIRED,0,0,"<dlltool>",
302dac
				"explicitly specify the PE import library generator "
c4e10a
				"to be used."},
302dac
fbda3a
	{"mdso",		0,TAG_MDSO,ARGV_OPTARG_REQUIRED,0,0,"<mdso>",
fbda3a
				"explicitly specify the PE custom import library "
c4e10a
				"generator to be used."},
fbda3a
9a02e2
	{"windres",		0,TAG_WINDRES,ARGV_OPTARG_REQUIRED,0,0,"<windres>",
9a02e2
				"explicitly specify the PE resource compiler "
c4e10a
				"to be used."},
9a02e2
fbda3a
	{"implib",		0,TAG_IMPLIB,ARGV_OPTARG_REQUIRED,0,
fbda3a
				"idata|dsometa",0,
fbda3a
				"PE import libraries should either use the legacy "
fbda3a
				"format (.idata section) and be generated by dlltool, "
fbda3a
				"or the custom format (.dsometa section) and be "
c4e10a
				"generated by mdso."},
fbda3a
efd47f
	{"warnings",		0,TAG_WARNINGS,ARGV_OPTARG_REQUIRED,0,
efd47f
				"all|none|error",0,
242ef8
				"set the warning reporting level; "
c4e10a
				"accepted levels are {%s}."},
efd47f
efd47f
	{"W",			0,TAG_WARNINGS,ARGV_OPTARG_REQUIRED,
efd47f
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_JOINED,
efd47f
				"all|none|error","",
c4e10a
				"convenient shorthands for the above."},
efd47f
116dbb
	{"output",		'o',TAG_OUTPUT,ARGV_OPTARG_REQUIRED,0,0,"<file>",
c4e10a
				"write output to %s."},
116dbb
80b431
	{"target",		0,TAG_TARGET,ARGV_OPTARG_REQUIRED,
80b431
				ARGV_OPTION_HYBRID_SPACE,0,"<target>",
e39281
				"set an explicit (cross-)target, then pass it to "
c4e10a
				"the compiler."},
e39281
523027
	{"R",			0,TAG_LDRPATH,ARGV_OPTARG_REQUIRED,
523027
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_CIRCUS,0,0,
523027
				"encode library path into the executable image "
523027
				"[currently a no-op]"},
523027
63a1b4
	{"bindir",		0,TAG_BINDIR,ARGV_OPTARG_REQUIRED,
63a1b4
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,0,0,
63a1b4
				"override destination directory when installing "
63a1b4
				"PE shared libraries. Not needed, ignored for "
c4e10a
				"compatibility."},
63a1b4
bfa8ca
	{"shrext",		0,TAG_SHREXT,ARGV_OPTARG_REQUIRED,
bfa8ca
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,0,0,
bfa8ca
				"shared library extention, including the dot, that "
bfa8ca
				"should override the default for the target system. "
bfa8ca
				"regardless of build target and type (native/cross), "
bfa8ca
				"you should never need to use this option."},
bfa8ca
9c664d
	{"rpath",		0,TAG_RPATH,ARGV_OPTARG_REQUIRED,
9c664d
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,0,0,
9c664d
				"where a library should eventually be "
9c664d
				"installed, relative to $(DESTDIR)$(PREFIX)"},
9c664d
17e18a
	{"sysroot",		0,TAG_SYSROOT,ARGV_OPTARG_REQUIRED,0,0,"<sysroot>",
17e18a
				"an absolute sysroot path to pass to the compiler "
c4e10a
				"or linker driver."},
17e18a
9aa1f4
	{"release",		0,TAG_RELEASE,ARGV_OPTARG_REQUIRED,
9aa1f4
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,0,0,
112a2b
				"specify release information; this will result "
112a2b
				"in the generation of libfoo-x.y.z.so, "
112a2b
				"followed by the creation of libfoo.so "
c4e10a
				"as a symlink thereto."},
9aa1f4
a126a7
	{"objectlist",		0,TAG_OBJECTLIST,ARGV_OPTARG_REQUIRED,
a126a7
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
a126a7
				0,"<file>",
c4e10a
				"add the object listed in %s to the object vector}."},
a126a7
05ca7e
	{"dlopen",		0,TAG_DLOPEN,ARGV_OPTARG_REQUIRED,
05ca7e
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
05ca7e
				0,"<module>",
e47cd7
				"create and link into the dynamic library, dynamic module, "
e47cd7
				"or executable program a minimal, backward-compatible dlsyms "
e47cd7
				"vtable. On modern systems, this has the same effect as "
e47cd7
				"``-dlpreopen force``."},
05ca7e
bb5843
	{"dlpreopen",		0,TAG_DLPREOPEN,ARGV_OPTARG_REQUIRED,
bb5843
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
bb5843
				0,"<FILE>",
bb5843
				"Link the specified %s into the generated library "
42187c
				"or executable, and make it available to the compiled "
42187c
				"shared library, dynamic module, or executable program "
8ef9e1
				"via a backward-compatible dlsymas vtable. The special "
8ef9e1
				"arguments 'self' and 'force' can be used to request "
8ef9e1
				"that symbols from the executable program be added "
8ef9e1
				"to the vtable, and that a vtable always be created, "
8ef9e1
				"respectively."},
bb5843
916050
	{"export-dynamic",	0,TAG_EXPORT_DYNAMIC,ARGV_OPTARG_NONE,
916050
				ARGV_OPTION_HYBRID_ONLY,0,0,
c4e10a
				"allow symbols in the output file to be resolved via dlsym()."},
916050
21bb4b
	{"export-symbols",	0,TAG_EXPSYMS_FILE,ARGV_OPTARG_REQUIRED,
873ecb
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
873ecb
				0,"<symfile>",
c4e10a
				"only export the symbols that are listed in %s."},
873ecb
21bb4b
	{"export-symbols-regex",0,TAG_EXPSYMS_REGEX,ARGV_OPTARG_REQUIRED,
73ca78
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
73ca78
				0,"<regex>",
c4e10a
				"only export symbols mathing the regex expression %s."},
73ca78
a943fc
	{"module",		0,TAG_MODULE,ARGV_OPTARG_NONE,
a943fc
				ARGV_OPTION_HYBRID_ONLY,0,0,
a943fc
				"create a shared object that will only be "
a943fc
				"loaded at runtime via dlopen(3). the shared "
a943fc
				"object name need not follow the platform's "
c4e10a
				"library naming conventions."},
a943fc
f7645c
	{"all-static",		0,TAG_ALL_STATIC,ARGV_OPTARG_NONE,
f7645c
				ARGV_OPTION_HYBRID_ONLY,0,0,
f7645c
				"for programs, create a zero-dependency, "
f7645c
				"statically linked binary; for libraries, "
c4e10a
				"only create an archive of non-pic objects."},
f7645c
0e609b
	{"disable-static",	0,TAG_DISABLE_STATIC,ARGV_OPTARG_NONE,
0e609b
				ARGV_OPTION_HYBRID_ONLY,0,0,
0e609b
				"for libraries, only create a shared library, "
0e609b
				"and accordingly do not create an archive "
c4e10a
				"containing the individual object files."},
0e609b
f5fa4c
	{"disable-shared",	0,TAG_DISABLE_SHARED,ARGV_OPTARG_NONE,
f5fa4c
				ARGV_OPTION_HYBRID_ONLY,0,0,
f5fa4c
				"for libraries, only create an archive "
f5fa4c
				"containing the individual object files, and "
c4e10a
				"accordingly do not create a shared library."},
f5fa4c
68f313
	{"avoid-version",	0,TAG_AVOID_VERSION,ARGV_OPTARG_NONE,
68f313
				ARGV_OPTION_HYBRID_ONLY,0,0,
68f313
				"do not store version information, "
c4e10a
				"do not create version-specific symlinks."},
68f313
5a9161
	{"version-info",	0,TAG_VERSION_INFO,ARGV_OPTARG_REQUIRED,
5a9161
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,0,
5a9161
				"<current>[:<revision>[:<age>]]",
c4e10a
				"specify version information using a %s syntax."},
5a9161
cd3d41
	{"version-number",	0,TAG_VERSION_NUMBER,ARGV_OPTARG_REQUIRED,
cd3d41
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,0,
cd3d41
				"<major>[:<minor>[:<revision>]]",
c4e10a
				"specify version information using a %s syntax."},
cd3d41
116dbb
	{"no-suppress",		0,TAG_NO_SUPPRESS,ARGV_OPTARG_NONE,
116dbb
				ARGV_OPTION_HYBRID_ONLY,0,0,
116dbb
				"transparently forward all "
c4e10a
				"compiler-generated output."},
116dbb
b76221
	{"no-install",		0,TAG_NO_INSTALL,ARGV_OPTARG_NONE,
b76221
				ARGV_OPTION_HYBRID_ONLY,0,0,
b76221
				"consider the executable image wrapper "
b76221
				"to be optional "
c4e10a
				"[currently a no-op]."},
b76221
116dbb
	{"prefer-pic",		0,TAG_PREFER_PIC,ARGV_OPTARG_NONE,
116dbb
				ARGV_OPTION_HYBRID_ONLY,0,0,
c4e10a
				"pick on non-PIC objects."},
116dbb
116dbb
	{"prefer-non-pic",	0,TAG_PREFER_NON_PIC,ARGV_OPTARG_NONE,
116dbb
				ARGV_OPTION_HYBRID_ONLY,0,0,
c4e10a
				"pick on PIC objects."},
116dbb
116dbb
	{"shared",		0,TAG_SHARED,ARGV_OPTARG_NONE,
116dbb
				ARGV_OPTION_HYBRID_ONLY,0,0,
116dbb
				"only build .libs/srcfile.o"},
116dbb
116dbb
	{"static",		0,TAG_STATIC,ARGV_OPTARG_NONE,
116dbb
				ARGV_OPTION_HYBRID_ONLY,0,0,
116dbb
				"only build ./srcfile.o"},
116dbb
56f236
	{"static-libtool-libs",	0,TAG_STATIC_LIBTOOL_LIBS,ARGV_OPTARG_NONE,
56f236
				ARGV_OPTION_HYBRID_ONLY,0,0,
56f236
				"statically link libtool libraries "
56f236
				"[currently a no-op]"},
56f236
116dbb
	{"Wc",			0,TAG_COMPILER_FLAG,ARGV_OPTARG_REQUIRED,
116dbb
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_COMMA,
116dbb
				0,"<flag>[,
242ef8
				"pass comma-separated flags to the compiler; "
242ef8
				"syntax: -Wc,%s"},
116dbb
116dbb
	{"Xcompiler",		0,TAG_VERBATIM_FLAG,ARGV_OPTARG_REQUIRED,
116dbb
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
116dbb
				0,"<flag>",
c4e10a
				"pass a raw flag to the compiler."},
116dbb
2c4e5f
	{"Xlinker",		0,TAG_VERBATIM_FLAG,ARGV_OPTARG_REQUIRED,
2c4e5f
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
2c4e5f
				0,"<flag>",
c4e10a
				"pass a raw flag to the compiler linker-driver."},
2c4e5f
0d693e
	{"XCClinker",		0,TAG_VERBATIM_FLAG,ARGV_OPTARG_REQUIRED,
0d693e
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
0d693e
				0,"<flag>",
c4e10a
				"pass a raw flag to the compiler linker-driver."},
0d693e
5e0269
	{"weak",		0,TAG_WEAK,ARGV_OPTARG_REQUIRED,
5e0269
				ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE,
5e0269
				0,"<LIBNAME>",
c4e10a
				"hint only, currently a no-op."},
5e0269
93b62c
	{"no-undefined",	0,TAG_NO_UNDEFINED,ARGV_OPTARG_NONE,
93b62c
				ARGV_OPTION_HYBRID_ONLY,0,0,
c4e10a
				"disallow unresolved references."},
93b62c
53b931
	{"thread-safe",		0,TAG_THREAD_SAFE,ARGV_OPTARG_NONE,
53b931
				ARGV_OPTION_HYBRID_ONLY,0,0,
c4e10a
				"sleep tight, your threads are now safe."},
53b931
9ca8c4
	{0,0,0,0,0,0,0,0}
9ca8c4
};