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
6a912649
Commit
6a912649
authored
Oct 26, 2022
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
makefiles: Store PE objects in subdirectories in the build tree.
This will make it possible to build multiple PE architectures.
parent
8d43170b
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
62 additions
and
42 deletions
+62
-42
loader.c
dlls/ntdll/loader.c
+3
-1
loader.c
dlls/ntdll/unix/loader.c
+23
-16
fakedll.c
dlls/setupapi/fakedll.c
+19
-13
libraries.c
programs/winecfg/libraries.c
+6
-4
makedep.c
tools/makedep.c
+0
-0
widl.c
tools/widl/widl.c
+2
-2
utils.c
tools/winegcc/utils.c
+9
-6
No files found.
dlls/ntdll/loader.c
View file @
6a912649
...
...
@@ -2930,12 +2930,13 @@ static NTSTATUS find_builtin_without_file( const WCHAR *name, UNICODE_STRING *ne
if
(
!
name
[
1
]
||
wcscmp
(
name
+
wcslen
(
name
)
-
2
,
L"16"
))
return
status
;
}
if
(
!
get_env_var
(
L"WINEBUILDDIR"
,
20
+
2
*
wcslen
(
name
),
new_name
))
if
(
!
get_env_var
(
L"WINEBUILDDIR"
,
20
+
2
*
wcslen
(
name
)
+
wcslen
(
pe_dir
)
,
new_name
))
{
len
=
new_name
->
Length
;
RtlAppendUnicodeToString
(
new_name
,
L"
\\
dlls
\\
"
);
RtlAppendUnicodeToString
(
new_name
,
name
);
if
((
ext
=
wcsrchr
(
name
,
'.'
))
&&
!
wcscmp
(
ext
,
L".dll"
))
new_name
->
Length
-=
4
*
sizeof
(
WCHAR
);
RtlAppendUnicodeToString
(
new_name
,
pe_dir
);
RtlAppendUnicodeToString
(
new_name
,
L"
\\
"
);
RtlAppendUnicodeToString
(
new_name
,
name
);
status
=
open_dll_file
(
new_name
,
pwm
,
mapping
,
image_info
,
id
);
...
...
@@ -2944,6 +2945,7 @@ static NTSTATUS find_builtin_without_file( const WCHAR *name, UNICODE_STRING *ne
new_name
->
Length
=
len
;
RtlAppendUnicodeToString
(
new_name
,
L"
\\
programs
\\
"
);
RtlAppendUnicodeToString
(
new_name
,
name
);
RtlAppendUnicodeToString
(
new_name
,
pe_dir
);
RtlAppendUnicodeToString
(
new_name
,
L"
\\
"
);
RtlAppendUnicodeToString
(
new_name
,
name
);
status
=
open_dll_file
(
new_name
,
pwm
,
mapping
,
image_info
,
id
);
...
...
dlls/ntdll/unix/loader.c
View file @
6a912649
...
...
@@ -1441,6 +1441,21 @@ static inline char *prepend( char *buffer, const char *str, size_t len )
return
memcpy
(
buffer
-
len
,
str
,
len
);
}
static
inline
char
*
prepend_build_dir_path
(
char
*
ptr
,
const
char
*
ext
,
const
char
*
arch_dir
,
const
char
*
top_dir
)
{
char
*
name
=
ptr
;
unsigned
int
namelen
=
strlen
(
name
),
extlen
=
strlen
(
ext
);
if
(
namelen
>
extlen
&&
!
strcmp
(
name
+
namelen
-
extlen
,
ext
))
namelen
-=
extlen
;
ptr
=
prepend
(
ptr
,
arch_dir
,
strlen
(
arch_dir
)
);
ptr
=
prepend
(
ptr
,
name
,
namelen
);
ptr
=
prepend
(
ptr
,
top_dir
,
strlen
(
top_dir
)
);
ptr
=
prepend
(
ptr
,
build_dir
,
strlen
(
build_dir
)
);
return
ptr
;
}
/***********************************************************************
* open_dll_file
*
...
...
@@ -1536,7 +1551,7 @@ static NTSTATUS find_builtin_dll( UNICODE_STRING *nt_name, void **module, SIZE_T
SECTION_IMAGE_INFORMATION
*
image_info
,
ULONG_PTR
zero_bits
,
WORD
machine
,
BOOL
prefer_native
)
{
unsigned
int
i
,
pos
,
namepos
,
namelen
,
maxlen
=
0
;
unsigned
int
i
,
pos
,
namepos
,
maxlen
=
0
;
unsigned
int
len
=
nt_name
->
Length
/
sizeof
(
WCHAR
);
char
*
ptr
=
NULL
,
*
file
,
*
ext
=
NULL
;
const
char
*
pe_dir
=
get_pe_dir
(
machine
);
...
...
@@ -1569,28 +1584,20 @@ static NTSTATUS find_builtin_dll( UNICODE_STRING *nt_name, void **module, SIZE_T
if
(
build_dir
)
{
/* try as a dll */
ptr
=
file
+
pos
;
namelen
=
len
+
1
;
file
[
pos
+
len
+
1
]
=
0
;
if
(
ext
&&
!
strcmp
(
ext
,
".dll"
))
namelen
-=
4
;
ptr
=
prepend
(
ptr
,
ptr
,
namelen
);
ptr
=
prepend
(
ptr
,
"/dlls"
,
sizeof
(
"/dlls"
)
-
1
);
ptr
=
prepend
(
ptr
,
build_dir
,
strlen
(
build_dir
)
);
ptr
=
prepend_build_dir_path
(
file
+
pos
,
".dll"
,
pe_dir
,
"/dlls"
);
status
=
open_builtin_pe_file
(
ptr
,
&
attr
,
module
,
size_ptr
,
image_info
,
zero_bits
,
machine
,
prefer_native
);
ptr
=
prepend_build_dir_path
(
file
+
pos
,
".dll"
,
""
,
"/dlls"
);
if
(
status
!=
STATUS_DLL_NOT_FOUND
)
goto
done
;
strcpy
(
file
+
pos
+
len
+
1
,
".so"
);
status
=
open_builtin_so_file
(
ptr
,
&
attr
,
module
,
image_info
,
machine
,
prefer_native
);
if
(
status
!=
STATUS_DLL_NOT_FOUND
)
goto
done
;
/* now as a program */
ptr
=
file
+
pos
;
namelen
=
len
+
1
;
file
[
pos
+
len
+
1
]
=
0
;
if
(
ext
&&
!
strcmp
(
ext
,
".exe"
))
namelen
-=
4
;
ptr
=
prepend
(
ptr
,
ptr
,
namelen
);
ptr
=
prepend
(
ptr
,
"/programs"
,
sizeof
(
"/programs"
)
-
1
);
ptr
=
prepend
(
ptr
,
build_dir
,
strlen
(
build_dir
)
);
ptr
=
prepend_build_dir_path
(
file
+
pos
,
".exe"
,
pe_dir
,
"/programs"
);
status
=
open_builtin_pe_file
(
ptr
,
&
attr
,
module
,
size_ptr
,
image_info
,
zero_bits
,
machine
,
prefer_native
);
ptr
=
prepend_build_dir_path
(
file
+
pos
,
".exe"
,
""
,
"/programs"
);
if
(
status
!=
STATUS_DLL_NOT_FOUND
)
goto
done
;
strcpy
(
file
+
pos
+
len
+
1
,
".so"
);
status
=
open_builtin_so_file
(
ptr
,
&
attr
,
module
,
image_info
,
machine
,
prefer_native
);
...
...
@@ -1983,7 +1990,7 @@ static void load_ntdll(void)
InitializeObjectAttributes
(
&
attr
,
&
str
,
0
,
0
,
NULL
);
name
=
malloc
(
strlen
(
ntdll_dir
)
+
strlen
(
pe_dir
)
+
sizeof
(
"/ntdll.dll.so"
)
);
if
(
build_dir
)
sprintf
(
name
,
"%s
/ntdll.dll"
,
ntdll
_dir
);
if
(
build_dir
)
sprintf
(
name
,
"%s
%s/ntdll.dll"
,
ntdll_dir
,
pe
_dir
);
else
sprintf
(
name
,
"%s%s/ntdll.dll"
,
dll_dir
,
pe_dir
);
status
=
open_builtin_pe_file
(
name
,
&
attr
,
&
module
,
&
size
,
&
info
,
0
,
current_machine
,
FALSE
);
if
(
status
==
STATUS_DLL_NOT_FOUND
)
...
...
@@ -2023,8 +2030,8 @@ static void load_apiset_dll(void)
init_unicode_string
(
&
str
,
path
);
InitializeObjectAttributes
(
&
attr
,
&
str
,
0
,
0
,
NULL
);
name
=
malloc
(
strlen
(
ntdll_dir
)
+
strlen
(
pe_dir
)
+
sizeof
(
"/apisetschema.dll"
)
);
if
(
build_dir
)
sprintf
(
name
,
"%s/dlls/apisetschema
/apisetschema.dll"
,
build
_dir
);
name
=
malloc
(
strlen
(
ntdll_dir
)
+
strlen
(
pe_dir
)
+
sizeof
(
"/apisetschema
/apisetschema
.dll"
)
);
if
(
build_dir
)
sprintf
(
name
,
"%s/dlls/apisetschema
%s/apisetschema.dll"
,
build_dir
,
pe
_dir
);
else
sprintf
(
name
,
"%s%s/apisetschema.dll"
,
dll_dir
,
pe_dir
);
status
=
open_unix_file
(
&
handle
,
name
,
GENERIC_READ
|
SYNCHRONIZE
,
&
attr
,
0
,
FILE_SHARE_READ
|
FILE_SHARE_DELETE
,
FILE_OPEN
,
...
...
dlls/setupapi/fakedll.c
View file @
6a912649
...
...
@@ -407,6 +407,21 @@ static inline WCHAR *prepend( WCHAR *buffer, const WCHAR *str, size_t len )
return
memcpy
(
buffer
-
len
,
str
,
len
*
sizeof
(
WCHAR
)
);
}
static
inline
WCHAR
*
prepend_build_dir_path
(
WCHAR
*
ptr
,
const
WCHAR
*
ext
,
const
WCHAR
*
arch_dir
,
const
WCHAR
*
top_dir
,
const
WCHAR
*
build_dir
)
{
WCHAR
*
name
=
ptr
;
unsigned
int
namelen
=
wcslen
(
name
),
extlen
=
wcslen
(
ext
);
if
(
namelen
>
extlen
&&
!
wcscmp
(
name
+
namelen
-
extlen
,
ext
))
namelen
-=
extlen
;
ptr
=
prepend
(
ptr
,
arch_dir
,
wcslen
(
arch_dir
)
);
ptr
=
prepend
(
ptr
,
name
,
namelen
);
ptr
=
prepend
(
ptr
,
top_dir
,
wcslen
(
top_dir
)
);
ptr
=
prepend
(
ptr
,
build_dir
,
wcslen
(
build_dir
)
);
return
ptr
;
}
static
const
WCHAR
*
enum_load_path
(
unsigned
int
idx
)
{
WCHAR
buffer
[
32
];
...
...
@@ -421,7 +436,7 @@ static void *load_fake_dll( const WCHAR *name, SIZE_T *size )
const
WCHAR
*
path
;
WCHAR
*
file
,
*
ptr
;
void
*
data
=
NULL
;
unsigned
int
i
,
pos
,
len
,
namelen
,
maxlen
=
0
;
unsigned
int
i
,
pos
,
len
,
maxlen
=
0
;
WCHAR
*
p
;
int
res
=
0
;
...
...
@@ -442,23 +457,13 @@ static void *load_fake_dll( const WCHAR *name, SIZE_T *size )
if
(
build_dir
)
{
/* try as a dll */
ptr
=
file
+
pos
;
namelen
=
len
+
1
;
file
[
pos
+
len
+
1
]
=
0
;
if
(
namelen
>
4
&&
!
wcsncmp
(
ptr
+
namelen
-
4
,
L".dll"
,
4
))
namelen
-=
4
;
ptr
=
prepend
(
ptr
,
ptr
,
namelen
);
ptr
=
prepend
(
ptr
,
L"
\\
dlls"
,
5
);
ptr
=
prepend
(
ptr
,
build_dir
,
lstrlenW
(
build_dir
)
);
ptr
=
prepend_build_dir_path
(
file
+
pos
,
L".dll"
,
pe_dir
,
L"
\\
dlls"
,
build_dir
);
if
((
res
=
read_file
(
ptr
,
&
data
,
size
)))
goto
done
;
/* now as a program */
ptr
=
file
+
pos
;
namelen
=
len
+
1
;
file
[
pos
+
len
+
1
]
=
0
;
if
(
namelen
>
4
&&
!
wcsncmp
(
ptr
+
namelen
-
4
,
L".exe"
,
4
))
namelen
-=
4
;
ptr
=
prepend
(
ptr
,
ptr
,
namelen
);
ptr
=
prepend
(
ptr
,
L"
\\
programs"
,
9
);
ptr
=
prepend
(
ptr
,
build_dir
,
lstrlenW
(
build_dir
)
);
ptr
=
prepend_build_dir_path
(
file
+
pos
,
L".exe"
,
pe_dir
,
L"
\\
programs"
,
build_dir
);
if
((
res
=
read_file
(
ptr
,
&
data
,
size
)))
goto
done
;
}
...
...
@@ -979,6 +984,7 @@ static void install_lib_dir( WCHAR *dest, WCHAR *file, const WCHAR *wildcard,
lstrcpyW
(
name
,
data
.
name
);
if
(
default_ext
)
/* inside build dir */
{
lstrcatW
(
name
,
pe_dir
);
lstrcatW
(
name
,
L"
\\
"
);
lstrcatW
(
name
,
data
.
name
);
if
(
wcschr
(
data
.
name
,
'.'
)
&&
install_fake_dll
(
dest
,
file
,
delete
,
&
delay_copy
))
...
...
programs/winecfg/libraries.c
View file @
6a912649
...
...
@@ -252,14 +252,14 @@ static void clear_settings(HWND dialog)
/* load the list of available libraries from a given dir */
static
void
load_library_list_from_dir
(
HWND
dialog
,
const
WCHAR
*
dir_path
,
int
check_subdirs
)
{
static
const
WCHAR
*
const
ext
[]
=
{
L".dll"
,
L"
.dll.so"
,
L".so"
,
L"
"
};
static
const
WCHAR
*
const
ext
[]
=
{
L".dll"
,
L"
"
,
L".dll.so"
,
L".so
"
};
WCHAR
*
buffer
,
*
p
,
name
[
256
];
unsigned
int
i
;
HANDLE
handle
;
WIN32_FIND_DATAW
data
;
ULONG
maxlen
=
wcslen
(
dir_path
)
+
wcslen
(
pe_dir
)
+
10
+
2
*
ARRAY_SIZE
(
name
);
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
(
wcslen
(
dir_path
)
+
10
)
*
sizeof
(
WCHAR
)
+
2
*
sizeof
(
name
)
);
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
maxlen
*
sizeof
(
WCHAR
)
);
wcscpy
(
buffer
,
dir_path
);
wcscat
(
buffer
,
L"
\\
*"
);
buffer
[
1
]
=
'\\'
;
/* change \??\ to \\?\ */
...
...
@@ -282,7 +282,9 @@ static void load_library_list_from_dir( HWND dialog, const WCHAR *dir_path, int
if
(
!
show_dll_in_list
(
data
.
cFileName
))
continue
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
ext
);
i
++
)
{
swprintf
(
p
,
2
*
ARRAY_SIZE
(
name
)
+
10
,
L"%s
\\
%s%s"
,
data
.
cFileName
,
data
.
cFileName
,
ext
[
i
]
);
if
(
!
ext
[
i
][
0
]
&&
!
wcschr
(
data
.
cFileName
,
'.'
))
continue
;
swprintf
(
p
,
buffer
+
maxlen
-
p
,
L"%s%s
\\
%s%s"
,
data
.
cFileName
,
i
>
1
?
L""
:
pe_dir
,
data
.
cFileName
,
ext
[
i
]
);
if
(
GetFileAttributesW
(
buffer
)
!=
INVALID_FILE_ATTRIBUTES
)
{
SendDlgItemMessageW
(
dialog
,
IDC_DLLCOMBO
,
CB_ADDSTRING
,
0
,
(
LPARAM
)
data
.
cFileName
);
...
...
tools/makedep.c
View file @
6a912649
This diff is collapsed.
Click to expand it.
tools/widl/widl.c
View file @
6a912649
...
...
@@ -686,8 +686,8 @@ int open_typelib( const char *name )
{
int
namelen
=
strlen
(
name
);
if
(
strendswith
(
name
,
".dll"
))
namelen
-=
4
;
TRYOPEN
(
strmake
(
"%.*s/%.*s/%s"
,
(
int
)
strlen
(
dlldirs
.
str
[
i
])
-
2
,
dlldirs
.
str
[
i
],
namelen
,
name
,
name
));
TRYOPEN
(
strmake
(
"%.*s/%.*s
%s
/%s"
,
(
int
)
strlen
(
dlldirs
.
str
[
i
])
-
2
,
dlldirs
.
str
[
i
],
namelen
,
name
,
pe_dir
,
name
));
}
else
{
...
...
tools/winegcc/utils.c
View file @
6a912649
...
...
@@ -93,7 +93,7 @@ file_type get_file_type(const char* filename)
return
file_other
;
}
static
char
*
try_lib_path
(
const
char
*
dir
,
const
char
*
pre
,
static
char
*
try_lib_path
(
const
char
*
dir
,
const
char
*
arch_dir
,
const
char
*
pre
,
const
char
*
library
,
const
char
*
ext
,
file_type
expected_type
)
{
...
...
@@ -101,7 +101,7 @@ static char* try_lib_path(const char* dir, const char* pre,
file_type
type
;
/* first try a subdir named from the library we are looking for */
fullname
=
strmake
(
"%s/%s
/%s%s%s"
,
dir
,
library
,
pre
,
library
,
ext
);
fullname
=
strmake
(
"%s/%s
%s/%s%s%s"
,
dir
,
library
,
arch_dir
,
pre
,
library
,
ext
);
if
(
verbose
>
1
)
fprintf
(
stderr
,
"Try %s..."
,
fullname
);
type
=
get_file_type
(
fullname
);
if
(
verbose
>
1
)
fprintf
(
stderr
,
type
==
expected_type
?
"FOUND!
\n
"
:
"no
\n
"
);
...
...
@@ -120,25 +120,28 @@ static char* try_lib_path(const char* dir, const char* pre,
static
file_type
guess_lib_type
(
struct
target
target
,
const
char
*
dir
,
const
char
*
library
,
const
char
*
prefix
,
const
char
*
suffix
,
char
**
file
)
{
const
char
*
arch_dir
=
""
;
if
(
target
.
platform
!=
PLATFORM_WINDOWS
&&
target
.
platform
!=
PLATFORM_MINGW
&&
target
.
platform
!=
PLATFORM_CYGWIN
)
{
/* Unix shared object */
if
((
*
file
=
try_lib_path
(
dir
,
prefix
,
library
,
".so"
,
file_so
)))
if
((
*
file
=
try_lib_path
(
dir
,
""
,
prefix
,
library
,
".so"
,
file_so
)))
return
file_so
;
/* Mach-O (Darwin/Mac OS X) Dynamic Library behaves mostly like .so */
if
((
*
file
=
try_lib_path
(
dir
,
prefix
,
library
,
".dylib"
,
file_so
)))
if
((
*
file
=
try_lib_path
(
dir
,
""
,
prefix
,
library
,
".dylib"
,
file_so
)))
return
file_so
;
/* Windows DLL */
if
((
*
file
=
try_lib_path
(
dir
,
prefix
,
library
,
".def"
,
file_def
)))
if
((
*
file
=
try_lib_path
(
dir
,
""
,
prefix
,
library
,
".def"
,
file_def
)))
return
file_dll
;
}
else
arch_dir
=
get_arch_dir
(
target
);
/* static archives */
if
((
*
file
=
try_lib_path
(
dir
,
prefix
,
library
,
suffix
,
file_arh
)))
if
((
*
file
=
try_lib_path
(
dir
,
arch_dir
,
prefix
,
library
,
suffix
,
file_arh
)))
return
file_arh
;
return
file_na
;
...
...
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