Skip to content
Snippets Groups Projects
Commit e1e75371 authored by Alexandre Julliard's avatar Alexandre Julliard
Browse files

Implemented on-demand loading of builtin dlls using dlopen().

parent 59b0d7b2
No related branches found
No related tags found
No related merge requests found
Showing with 295 additions and 251 deletions
......@@ -5,4 +5,3 @@ config.log
config.status
libwine.so.1.0
wine
wine.sym
......@@ -30,7 +30,6 @@ X_CFLAGS = @X_CFLAGS@
X_LIBS = @X_LIBS@
XLIB = @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@
DLL_LINK = @DLL_LINK@
WINELIB = $(DLL_LINK)
LIBS = @LIBS@
YACC = @YACC@
LEX = @LEX@
......
......@@ -131,7 +131,7 @@ EXTRA_OBJS = $(LIBOBJS)
EMU_TARGET = @EMU_TARGET@
all: Make.rules $(PROGRAMS) $(LIBPROGRAMS) $(EMU_TARGET)
all: Make.rules $(PROGRAMS) $(LIBPROGRAMS) lib$(MODULE).$(LIBEXT) $(DLLDIR) $(EMU_TARGET)
@echo "Wine build complete."
LIBLINTS = $(LIBOBJS:.o=.ln)
......@@ -144,15 +144,12 @@ WINAPI_CHECK_EXTRA_FLAGS = --global
@MAKE_RULES@
all: lib$(MODULE).$(LIBEXT) $(DLLOBJS)
Make.rules: Make.rules.in configure
@echo $? is newer than 'Make.rules', please rerun ./configure!
@exit 1
wine wine.sym: lib$(MODULE).$(LIBEXT) $(DLLOBJS) $(EMUOBJS)
$(CC) -o wine $(EMUOBJS) $(DLL_LINK) $(LDOPTIONS) $(X_LIBS) $(XLIB) $(LIBS)
nm -n wine | grep -v _compiled >wine.sym
wine: lib$(MODULE).$(LIBEXT) $(DLLDIR) $(EMUOBJS)
$(CC) -o wine $(EMUOBJS) $(DLL_LINK) $(LIBS)
llib-lwine.ln : $(LIBLINTS)
$(LINT) $(ALLLINTFLAGS) -owine $(LIBLINTS)
......@@ -168,8 +165,6 @@ install_a: lib$(MODULE).a
install_wine: wine
[ -d $(bindir) ] || $(MKDIR) $(bindir)
[ -d $(libdir) ] || $(MKDIR) $(libdir)
[ -f wine.sym ] && $(INSTALL_DATA) wine.sym $(libdir)/wine.sym
$(INSTALL_PROGRAM) wine $(bindir)/wine
install:: $(PROGRAMS) $(LIBPROGRAMS) $(EMU_TARGET:%=install_%) $(LIBEXT:%=install_%)
......@@ -179,7 +174,7 @@ install:: $(PROGRAMS) $(LIBPROGRAMS) $(EMU_TARGET:%=install_%) $(LIBEXT:%=instal
$(INSTALL_PROGRAM) debugger/winedbg $(bindir)/winedbg
uninstall::
cd $(libdir) && $(RM) libwine.a libwine.so libwine.so.$(SOVERSION) wine.sym
cd $(libdir) && $(RM) libwine.a libwine.so libwine.so.$(SOVERSION)
cd $(bindir) && $(RM) wine wineserver dosmod winedbg
lib$(MODULE).so.$(SOVERSION): $(OBJS) Makefile.in Make.rules.in
......@@ -194,12 +189,14 @@ lib$(MODULE).a: $(OBJS) Makefile.in Make.rules.in
$(RANLIB) $@
checklink::
$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -lwine $(LDOPTIONS) $(X_LIBS) $(XLIB) $(LIBS) && $(RM) checklink
$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -lwine $(LIBS) && $(RM) checklink
$(EMUOBJS) $(LIBOBJS) $(DLLOBJS) $(PROGRAMS) $(LIBPROGRAMS): $(TOOLSUBDIRS) dummy
@cd `dirname $@` && $(MAKE) `basename $@`
$(LIBPROGRAMS): lib$(MODULE).$(LIBEXT) $(DLLOBJS)
$(DLLDIR): $(TOOLSUBDIRS) dummy
$(LIBPROGRAMS): lib$(MODULE).$(LIBEXT) $(DLLDIR)
$(LIBLINTS) $(EMULINTS): dummy
@cd `dirname $@` && $(MAKE) lint
......@@ -232,7 +229,7 @@ htmlpages:
for i in $(LIBSUBDIRS); do (cd $$i && $(MAKE) html); done
clean::
$(RM) wine wine.sym libwine.so.1.0 TAGS
$(RM) wine libwine.so.1.0 TAGS
distclean: clean
$(RM) config.* Make.rules dlls/Makedll.rules include/config.h documentation/wine.man documentation/wine.conf.man
......
This diff is collapsed.
......@@ -110,9 +110,11 @@ AC_CHECK_HEADERS(dlfcn.h,
AC_DEFINE(HAVE_DL_API),
AC_CHECK_LIB(dl,dlopen,
AC_DEFINE(HAVE_DL_API)
LIBS="$LIBS -ldl"
LIBS="$LIBS -ldl",
LIBEXT="a"
)
)
),
LIBEXT="a"
)
AC_SUBST(XLIB)
AC_SUBST(X_SRCS)
......@@ -467,12 +469,13 @@ fi
DLLFLAGS=""
BUILDFLAGS=""
DLL_LINK="-L\$(DLLDIR) \$(DLLS:%=-l%) -L\$(TOPOBJDIR) -lwine"
if test "$LIBEXT" = "so"; then
BUILDFLAGS="-pic"
DLLFLAGS="-fPIC"
DLL_LINK="-L\$(DLLDIR) \$(IMPORTS:%=-l%) -L\$(TOPOBJDIR) -lwine"
else
DLL_LINK="-L\$(DLLDIR) \$(DLLS:%=-l%) -L\$(TOPOBJDIR) -lwine \$(X_LIBS) \$(XLIB)"
AC_CACHE_CHECK([whether the linker supports --[[no]]-whole-archive (Linux)],
ac_cv_c_whole_archive,
[saved_cflags=$CFLAGS
......
......@@ -5,7 +5,6 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
PROGRAMS = winedbg
ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS)
WRCEXTRA = -A -p $*
C_SRCS = \
......@@ -45,6 +44,6 @@ lex.yy.c: debug.l
$(LEX) -8 -I $(SRCDIR)/debug.l
winedbg: $(OBJS)
$(CC) -o $@ $(OBJS) $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o $@ $(OBJS) $(DLL_LINK) $(LIBS)
### Dependencies:
......@@ -5,6 +5,7 @@
# SOVERSION : version of the .so file
# ALTNAMES : alternate names for this dll (optional)
# IMPORTS : dlls to import (optional)
# EXTRALIBS : extra libraries to link in (optional)
#
# plus all variables required by the global Make.rules.in
#
......@@ -23,7 +24,7 @@ all: lib$(MODULE).$(LIBEXT) $(ALTNAMES:%=lib%.$(LIBEXT))
# Rules for .so files
lib$(MODULE).so.$(SOVERSION): $(OBJS) Makefile.in $(TOPSRCDIR)/Make.rules.in
$(LDSHARED) $(OBJS) -o $@
$(LDSHARED) $(OBJS) -o $@ -L$(DLLDIR) $(IMPORTS:%=-l%) $(EXTRALIBS)
$(ALLNAMES): lib$(MODULE).so.$(SOVERSION)
$(RM) $@ && $(LN_S) lib$(MODULE).so.$(SOVERSION) $@
......@@ -43,7 +44,7 @@ $(ALTNAMES:%=lib%.a): lib$(MODULE).a
IMPORTLIBS = $(IMPORTS:%=$(DLLDIR)/lib%.$(LIBEXT))
checklink:: lib$(MODULE).$(LIBEXT) $(IMPORTLIBS)
$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -l$(MODULE) -L$(DLLDIR) $(IMPORTS:%=-l%) -L$(TOPOBJDIR) -lwine $(LDOPTIONS) $(X_LIBS) $(XLIB) $(LIBS) && $(RM) checklink
$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -l$(MODULE) -L$(TOPOBJDIR) -lwine $(EXTRALIBS) $(LIBS) && $(RM) checklink
$(IMPORTLIBS): dummy
@cd $(DLLDIR) && $(MAKE) `basename $@`
......
......@@ -305,6 +305,30 @@ libwsock32.@LIBEXT@ libwinsock.@LIBEXT@: winsock/libwsock32.@LIBEXT@
libx11drv.@LIBEXT@: x11drv/libx11drv.@LIBEXT@
$(RM) $@ && $(LN_S) x11drv/libx11drv.@LIBEXT@ $@
# Inter-dll dependencies (only necessary for .so)
avifil32/libavifil32.so: libmsvfw32.so libwinmm.so
commdlg/libcomdlg32.so: libwinspool.so
ddraw/libddraw.so: libx11drv.so
dplayx/libdplayx.so: libole32.so
msvideo/libmsvfw32.so: libwinmm.so
oleaut32/liboleaut32.so: libole32.so libcomctl32.so
olecli/libolecli32.so: libolesvr32.so libole32.so
olepro32/libolepro32.so: liboleaut32.so libole32.so
shell32/libshell32.so: libole32.so
urlmon/liburlmon.so: libole32.so
version/libversion.so: liblz32.so
winmm/joystick/libjoystick.drv.so: libwinmm.so
winmm/mcianim/libmcianim.drv.so: libwinmm.so
winmm/mciavi/libmciavi.drv.so: libwinmm.so
winmm/mcicda/libmcicda.drv.so: libwinmm.so
winmm/mciseq/libmciseq.drv.so: libwinmm.so
winmm/mciwave/libmciwave.drv.so: libwinmm.so
winmm/midimap/libmidimap.drv.so: libwinmm.so
winmm/wavemap/libmsacm.drv.so: libwinmm.so
winmm/wineoss/libwineoss.drv.so: libwinmm.so
$(DLLFILES): dummy
@cd `dirname $@` && $(MAKE)
......
......@@ -5,7 +5,7 @@ rsrc comdlg32
import shell32.dll
import comctl32.dll
import winspool.dll
import winspool.drv
0 stub ArrowBtnWndProc
1 stdcall ChooseColorA(ptr) ChooseColorA
......
......@@ -461,7 +461,8 @@ LPVOID WINAPI SHAlloc(DWORD len)
DWORD WINAPI SHRegisterDragDrop(HWND hWnd,IDropTarget * pDropTarget)
{
FIXME("(0x%08x,%p):stub.\n", hWnd, pDropTarget);
return RegisterDragDrop(hWnd, pDropTarget);
if (GetShellOle()) return pRegisterDragDrop(hWnd, pDropTarget);
return 0;
}
/*************************************************************************
......
......@@ -4,6 +4,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = x11drv
SOVERSION = 1.0
EXTRALIBS = $(X_LIBS) $(XLIB)
SPEC_SRCS = x11drv.spec
......
......@@ -183,6 +183,7 @@ BOOL BUILTIN_Init(void)
HMODULE16 BUILTIN_LoadModule( LPCSTR name )
{
char dllname[16], *p;
void *handle;
int i;
/* Fix the name in case we have a full path and extension */
......@@ -198,9 +199,24 @@ HMODULE16 BUILTIN_LoadModule( LPCSTR name )
const BUILTIN16_DESCRIPTOR *descr = builtin_dlls[i];
NE_MODULE *pModule = (NE_MODULE *)descr->module_start;
OFSTRUCT *pOfs = (OFSTRUCT *)((LPBYTE)pModule + pModule->fileinfo);
if (!lstrcmpiA( pOfs->szPathName, dllname ))
if (!strcasecmp( pOfs->szPathName, dllname ))
return BUILTIN_DoLoadModule16( descr );
}
if ((handle = BUILTIN32_dlopen( dllname )))
{
for (i = 0; i < nb_dlls; i++)
{
const BUILTIN16_DESCRIPTOR *descr = builtin_dlls[i];
NE_MODULE *pModule = (NE_MODULE *)descr->module_start;
OFSTRUCT *pOfs = (OFSTRUCT *)((LPBYTE)pModule + pModule->fileinfo);
if (!strcasecmp( pOfs->szPathName, dllname ))
return BUILTIN_DoLoadModule16( descr );
}
ERR( "loaded .so but dll %s still not found\n", dllname );
BUILTIN32_dlclose( handle );
}
return (HMODULE16)2;
}
......
......@@ -236,5 +236,7 @@ HGLOBAL16 NE_LoadPEResource( NE_MODULE *pModule, WORD type, LPVOID bits, DWORD s
extern WINE_MODREF *BUILTIN32_LoadLibraryExA(LPCSTR name, DWORD flags);
extern HMODULE BUILTIN32_LoadExeModule( LPCSTR *filename );
extern void BUILTIN32_UnloadLibrary(WINE_MODREF *wm);
extern void *BUILTIN32_dlopen( const char *name );
extern int BUILTIN32_dlclose( void *handle );
#endif /* __WINE_MODULE_H */
......@@ -4,7 +4,6 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
PROGRAMS = expand hello hello2 hello3 hello4 hello5 new rolex vartest volinfo
ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS)
WRCEXTRA = -s -p $*
SPEC_SRCS = \
......@@ -27,33 +26,33 @@ all: check_wrc $(PROGRAMS)
@MAKE_RULES@
expand: expand.o expand.spec.o
$(CC) -o expand $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o expand $+ -L$(DLLDIR) -llz32 $(DLL_LINK) $(LIBS)
hello: hello.o hello.spec.o
$(CC) -o hello $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o hello $+ $(DLL_LINK) $(LIBS)
hello2: hello2.o hello2.spec.o
$(CC) -o hello2 $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o hello2 $+ $(DLL_LINK) $(LIBS)
hello3: hello3.o hello3.spec.o hello3res.o
$(CC) -o hello3 $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o hello3 $+ -L$(DLLDIR) -lcomdlg32 -lwinspool $(DLL_LINK) $(LIBS)
hello4: hello4.o hello4.spec.o
$(CC) -o hello4 $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o hello4 $+ $(DLL_LINK) $(LIBS)
hello5: hello5.o hello5.spec.o
$(CC) -o hello5 $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o hello5 $+ $(DLL_LINK) $(LIBS)
new: new.o new.spec.o
$(CC) -o new $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o new $+ $(DLL_LINK) $(LIBS)
rolex: rolex.o rolex.spec.o
$(CC) -o rolex $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o rolex $+ $(DLL_LINK) $(LIBS)
vartest: vartest.o vartest.spec.o
$(CC) -o vartest $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o vartest $+ -L$(DLLDIR) -loleaut32 -lole32 $(DLL_LINK) $(LIBS)
volinfo: volinfo.o volinfo.spec.o
$(CC) -o volinfo $+ $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o volinfo $+ $(DLL_LINK) $(LIBS)
### Dependencies:
......@@ -9,7 +9,7 @@ MAIN MENU
}
}
BITDEMO BITMAP "../rc/winelogo.bmp"
/*BITDEMO BITMAP "../rc/winelogo.bmp"*/
DIADEMO DIALOG 20, 20, 179, 118
STYLE DS_MODALFRAME | WS_CAPTION | WS_POPUP | WS_VISIBLE | WS_SYSMENU
......
......@@ -5,7 +5,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
PROGRAMS = icinfo aviinfo aviplay
ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS)
IMPORTS = msvfw32 winmm ddraw x11drv
WRCEXTRA = -s -p $*
SPEC_SRCS = \
......@@ -18,13 +18,13 @@ all: check_wrc $(PROGRAMS)
@MAKE_RULES@
icinfo: icinfo.o icinfo.spec.o
$(CC) -o icinfo icinfo.o icinfo.spec.o $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o icinfo icinfo.o icinfo.spec.o $(DLL_LINK) $(LIBS)
aviinfo: aviinfo.o aviinfo.spec.o
$(CC) -o aviinfo aviinfo.o aviinfo.spec.o $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o aviinfo aviinfo.o aviinfo.spec.o $(DLL_LINK) $(LIBS)
aviplay: aviplay.o aviplay.spec.o
$(CC) -o aviplay aviplay.o aviplay.spec.o $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o aviplay aviplay.o aviplay.spec.o $(DLL_LINK) $(LIBS)
install::
$(INSTALL_PROGRAM) icinfo $(bindir)/icinfo
......
......@@ -5,7 +5,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
PROGRAMS = clock
ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS)
IMPORTS = shell32 comdlg32 ole32 winspool
WRCEXTRA = -s -p clock
LICENSELANG = En
......@@ -31,7 +31,7 @@ all: check_wrc $(PROGRAMS)
clock: $(OBJS)
$(CC) -o clock $(OBJS) $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o clock $(OBJS) $(DLL_LINK) $(LIBS)
install::
$(INSTALL_PROGRAM) clock $(bindir)/clock
......
......@@ -5,7 +5,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
PROGRAMS = cmdlgtst
ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS)
IMPORTS = comdlg32 winspool
WRCEXTRA = -s -p cmdlgtst
C_SRCS = \
......@@ -22,7 +22,7 @@ all: check_wrc $(PROGRAMS)
@MAKE_RULES@
cmdlgtst: $(OBJS)
$(CC) -o cmdlgtst $(OBJS) $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o cmdlgtst $(OBJS) $(DLL_LINK) $(LIBS)
install::
$(INSTALL_PROGRAM) cmdlgtst $(bindir)/cmdlgtst
......
......@@ -5,7 +5,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
PROGRAMS = control
ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS)
IMPORTS = shell32 ole32
C_SRCS = control.c
......@@ -16,7 +16,7 @@ all: $(PROGRAMS)
@MAKE_RULES@
control: $(OBJS)
$(CC) -o control $(OBJS) $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o control $(OBJS) $(DLL_LINK) $(LIBS)
install::
$(INSTALL_PROGRAM) control $(bindir)/control
......
......@@ -5,7 +5,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
PROGRAMS = notepad
ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS)
IMPORTS = shell32 ole32 comdlg32 winspool
WRCEXTRA = -s -p notepad
LICENSELANG = En
......@@ -31,7 +31,7 @@ all: check_wrc $(PROGRAMS)
$(CPP) $(DEFS) $(OPTIONS) $(DIVINCL) -DRC_INVOKED -P -x c $< | $(WRC) $(WRCFLAGS) $(WRCEXTRA) -o $*.s
notepad: $(OBJS)
$(CC) -o notepad $(OBJS) $(LDOPTIONS) $(ALL_LIBS)
$(CC) -o notepad $(OBJS) $(DLL_LINK) $(LIBS)
install::
$(INSTALL_PROGRAM) notepad $(bindir)/notepad
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment