Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
0bfee2c6
Commit
0bfee2c6
authored
Sep 27, 2019
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winegcc: Centralize argument parsing into the main switch.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
c3072237
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
33 additions
and
57 deletions
+33
-57
winegcc.c
tools/winegcc/winegcc.c
+33
-57
No files found.
tools/winegcc/winegcc.c
View file @
0bfee2c6
...
@@ -1304,7 +1304,6 @@ static int is_linker_arg(const char* arg)
...
@@ -1304,7 +1304,6 @@ static int is_linker_arg(const char* arg)
{
{
case
'R'
:
case
'R'
:
case
'z'
:
case
'z'
:
case
'l'
:
case
'u'
:
case
'u'
:
return
1
;
return
1
;
case
'W'
:
case
'W'
:
...
@@ -1324,43 +1323,6 @@ static int is_linker_arg(const char* arg)
...
@@ -1324,43 +1323,6 @@ static int is_linker_arg(const char* arg)
return
0
;
return
0
;
}
}
/*
* Target Options
* -b machine -V version
*/
static
int
is_target_arg
(
const
char
*
arg
)
{
return
arg
[
1
]
==
'b'
||
arg
[
1
]
==
'V'
;
}
/*
* Directory Options
* -Bprefix -Idir -I- -Ldir -specs=file
*/
static
int
is_directory_arg
(
const
char
*
arg
)
{
return
arg
[
1
]
==
'B'
||
arg
[
1
]
==
'L'
||
arg
[
1
]
==
'I'
||
strncmp
(
"-specs="
,
arg
,
7
)
==
0
;
}
/*
* MinGW Options
* -mno-cygwin -mwindows -mconsole -mthreads -municode
*/
static
int
is_mingw_arg
(
const
char
*
arg
)
{
static
const
char
*
mingw_switches
[]
=
{
"-mno-cygwin"
,
"-mwindows"
,
"-mconsole"
,
"-mthreads"
,
"-municode"
};
unsigned
int
j
;
for
(
j
=
0
;
j
<
ARRAY_SIZE
(
mingw_switches
);
j
++
)
if
(
strcmp
(
mingw_switches
[
j
],
arg
)
==
0
)
return
1
;
return
0
;
}
static
void
parse_target_option
(
struct
options
*
opts
,
const
char
*
target
)
static
void
parse_target_option
(
struct
options
*
opts
,
const
char
*
target
)
{
{
char
*
p
,
*
platform
,
*
spec
=
xstrdup
(
target
);
char
*
p
,
*
platform
,
*
spec
=
xstrdup
(
target
);
...
@@ -1524,25 +1486,8 @@ int main(int argc, char **argv)
...
@@ -1524,25 +1486,8 @@ int main(int argc, char **argv)
}
}
/* determine what options go 'as is' to the linker & the compiler */
/* determine what options go 'as is' to the linker & the compiler */
raw_compiler_arg
=
raw_linker_arg
=
0
;
raw_linker_arg
=
is_linker_arg
(
argv
[
i
]);
if
(
is_linker_arg
(
argv
[
i
]))
raw_compiler_arg
=
!
raw_linker_arg
;
{
raw_linker_arg
=
1
;
}
else
{
if
(
is_directory_arg
(
argv
[
i
])
||
is_target_arg
(
argv
[
i
]))
raw_linker_arg
=
1
;
raw_compiler_arg
=
!
is_mingw_arg
(
argv
[
i
]);
}
/* these things we handle explicitly so we don't pass them 'as is' */
if
(
argv
[
i
][
1
]
==
'l'
||
argv
[
i
][
1
]
==
'I'
||
argv
[
i
][
1
]
==
'L'
)
raw_linker_arg
=
0
;
if
(
argv
[
i
][
1
]
==
'c'
||
argv
[
i
][
1
]
==
'L'
)
raw_compiler_arg
=
0
;
if
(
argv
[
i
][
1
]
==
'o'
||
argv
[
i
][
1
]
==
'b'
||
argv
[
i
][
1
]
==
'V'
)
raw_compiler_arg
=
raw_linker_arg
=
0
;
/* do a bit of semantic analysis */
/* do a bit of semantic analysis */
switch
(
argv
[
i
][
1
])
switch
(
argv
[
i
][
1
])
...
@@ -1552,14 +1497,18 @@ int main(int argc, char **argv)
...
@@ -1552,14 +1497,18 @@ int main(int argc, char **argv)
if
(
strendswith
(
str
,
"/"
))
str
[
strlen
(
str
)
-
1
]
=
0
;
if
(
strendswith
(
str
,
"/"
))
str
[
strlen
(
str
)
-
1
]
=
0
;
if
(
!
opts
.
prefix
)
opts
.
prefix
=
strarray_alloc
();
if
(
!
opts
.
prefix
)
opts
.
prefix
=
strarray_alloc
();
strarray_add
(
opts
.
prefix
,
str
);
strarray_add
(
opts
.
prefix
,
str
);
raw_linker_arg
=
1
;
break
;
break
;
case
'b'
:
case
'b'
:
parse_target_option
(
&
opts
,
option_arg
);
parse_target_option
(
&
opts
,
option_arg
);
raw_compiler_arg
=
0
;
break
;
break
;
case
'V'
:
case
'V'
:
opts
.
version
=
xstrdup
(
option_arg
);
opts
.
version
=
xstrdup
(
option_arg
);
raw_compiler_arg
=
0
;
break
;
break
;
case
'c'
:
/* compile or assemble */
case
'c'
:
/* compile or assemble */
raw_compiler_arg
=
0
;
if
(
argv
[
i
][
2
]
==
0
)
opts
.
compile_only
=
1
;
if
(
argv
[
i
][
2
]
==
0
)
opts
.
compile_only
=
1
;
/* fall through */
/* fall through */
case
'S'
:
/* generate assembler code */
case
'S'
:
/* generate assembler code */
...
@@ -1583,24 +1532,45 @@ int main(int argc, char **argv)
...
@@ -1583,24 +1532,45 @@ int main(int argc, char **argv)
break
;
break
;
case
'l'
:
case
'l'
:
strarray_add
(
opts
.
files
,
strmake
(
"-l%s"
,
option_arg
));
strarray_add
(
opts
.
files
,
strmake
(
"-l%s"
,
option_arg
));
raw_compiler_arg
=
0
;
break
;
break
;
case
'L'
:
case
'L'
:
strarray_add
(
opts
.
lib_dirs
,
option_arg
);
strarray_add
(
opts
.
lib_dirs
,
option_arg
);
raw_compiler_arg
=
0
;
break
;
break
;
case
'M'
:
/* map file generation */
case
'M'
:
/* map file generation */
linking
=
0
;
linking
=
0
;
break
;
break
;
case
'm'
:
case
'm'
:
if
(
strcmp
(
"-mno-cygwin"
,
argv
[
i
])
==
0
)
if
(
strcmp
(
"-mno-cygwin"
,
argv
[
i
])
==
0
)
{
opts
.
use_msvcrt
=
1
;
opts
.
use_msvcrt
=
1
;
raw_compiler_arg
=
0
;
}
else
if
(
strcmp
(
"-mwindows"
,
argv
[
i
])
==
0
)
else
if
(
strcmp
(
"-mwindows"
,
argv
[
i
])
==
0
)
{
opts
.
gui_app
=
1
;
opts
.
gui_app
=
1
;
raw_compiler_arg
=
0
;
}
else
if
(
strcmp
(
"-mconsole"
,
argv
[
i
])
==
0
)
else
if
(
strcmp
(
"-mconsole"
,
argv
[
i
])
==
0
)
{
opts
.
gui_app
=
0
;
opts
.
gui_app
=
0
;
raw_compiler_arg
=
0
;
}
else
if
(
strcmp
(
"-municode"
,
argv
[
i
])
==
0
)
else
if
(
strcmp
(
"-municode"
,
argv
[
i
])
==
0
)
{
opts
.
unicode_app
=
1
;
opts
.
unicode_app
=
1
;
raw_compiler_arg
=
0
;
}
else
if
(
strcmp
(
"-mthreads"
,
argv
[
i
])
==
0
)
{
raw_compiler_arg
=
0
;
}
else
if
(
strcmp
(
"-m16"
,
argv
[
i
])
==
0
)
else
if
(
strcmp
(
"-m16"
,
argv
[
i
])
==
0
)
{
opts
.
win16_app
=
1
;
opts
.
win16_app
=
1
;
raw_compiler_arg
=
0
;
}
else
if
(
strcmp
(
"-m32"
,
argv
[
i
])
==
0
)
else
if
(
strcmp
(
"-m32"
,
argv
[
i
])
==
0
)
{
{
if
(
opts
.
target_cpu
==
CPU_x86_64
)
if
(
opts
.
target_cpu
==
CPU_x86_64
)
...
@@ -1642,12 +1612,15 @@ int main(int argc, char **argv)
...
@@ -1642,12 +1612,15 @@ int main(int argc, char **argv)
break
;
break
;
case
'o'
:
case
'o'
:
opts
.
output_name
=
option_arg
;
opts
.
output_name
=
option_arg
;
raw_compiler_arg
=
0
;
break
;
break
;
case
's'
:
case
's'
:
if
(
strcmp
(
"-static"
,
argv
[
i
])
==
0
)
if
(
strcmp
(
"-static"
,
argv
[
i
])
==
0
)
linking
=
-
1
;
linking
=
-
1
;
else
if
(
strcmp
(
"-save-temps"
,
argv
[
i
])
==
0
)
else
if
(
strcmp
(
"-save-temps"
,
argv
[
i
])
==
0
)
keep_generated
=
1
;
keep_generated
=
1
;
else
if
(
strncmp
(
"-specs="
,
argv
[
i
],
7
)
==
0
)
raw_linker_arg
=
1
;
else
if
(
strcmp
(
"-shared"
,
argv
[
i
])
==
0
)
else
if
(
strcmp
(
"-shared"
,
argv
[
i
])
==
0
)
{
{
opts
.
shared
=
1
;
opts
.
shared
=
1
;
...
@@ -1723,7 +1696,10 @@ int main(int argc, char **argv)
...
@@ -1723,7 +1696,10 @@ int main(int argc, char **argv)
if
(
strcmp
(
"-static"
,
argv
[
i
]
+
1
)
==
0
)
if
(
strcmp
(
"-static"
,
argv
[
i
]
+
1
)
==
0
)
linking
=
-
1
;
linking
=
-
1
;
else
if
(
is_option
(
argv
,
i
,
"--sysroot"
,
&
option_arg
))
else
if
(
is_option
(
argv
,
i
,
"--sysroot"
,
&
option_arg
))
{
opts
.
sysroot
=
option_arg
;
opts
.
sysroot
=
option_arg
;
raw_linker_arg
=
1
;
}
else
if
(
is_option
(
argv
,
i
,
"--target"
,
&
option_arg
))
else
if
(
is_option
(
argv
,
i
,
"--target"
,
&
option_arg
))
{
{
parse_target_option
(
&
opts
,
option_arg
);
parse_target_option
(
&
opts
,
option_arg
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment