This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Console GUI fixed? Url Correction


Eric Britten wrote:
> 
> Recently I posted a request about testing some software I wrote on
> Windows NT 4.0 called Console GUI.  I just want to know if it runs
> because I think I fixed the problem with the invalid images.

Sorry, it doesn't run here on NT4 + SP3 + Sergey's 16Jul cygwin.dll. Gui
claims gnugui.dll is not a valid NT image.

Attached is an adapted Makefile template from Fergus Henderson that
works fine for me building gcc dll's. Alas, equivalent g77 dll's lose
the ability to access the environment (eg getenv / putenv). Anyone else
come across this?
  
-- 
Dr David Coe			     \=\
58 Fairlawn Drive, East Grinstead     \=\   Tel +44 1342 326860
West Sussex, RH19 1NT, United Kingdom  \=\  Fax +44 1342 316019
#-----------------------------------------------------------------------------#

# Makefile.DLLs (Fergus Henderson - modified by DJC)

# This Makefile contains rules are creating DLLs on Windows using gnu-win32.

#-----------------------------------------------------------------------------#

OBJS = dll_init.o dll_main.o dll_fixup.o 
LIBS=-L/usr/H-i386-cygwin32/i386-cygwin32/lib -lcygwin -luser32 -lkernel32

# This rule creates a `.def' file, which lists the symbols that are exported
# from the DLL.  We use `nm' to get a list of all the exported text (`T')
# symbols.  Note that exporting data symbols -- including uninitialized
# data (`B'), initialized data (`D'), read-only data (`R'), and common
# blocks (`C') -- does not work, so we only grep for symbols whose type
# is `T'.

%.def: $(STATIC)%.a $(OBJS)
	echo EXPORTS > $@
	nm $^ | egrep "^........ [T] _" | sed "s/[^_]*_//" >> $@

# This rule creates the export object file which contains the jump
# table array; this export object file becomes part of the DLL.
# Two passes are needed to create a relocatable DLL. 

%.exp: %.def
	ld $(LDFLAGS-$*) $(LDFLAGS) -o $*.junk			\
		--base-file $*.base				\
		--dll -e _dll_entry@12				\
		$(STATIC)$*.a $(OBJS)				\
		$(LDLIBS-$*) $(LDLIBS) $(LIBS)
	dlltool --as=as $(DLLTOOLFLAGS-$*) $(DLLTOOLFLAGS)	\
		--dllname $*.junk				\
		--def $<					\
		--base-file $*.base				\
		--output-exp $*.exp
ifeq "$(strip $(RELOCATABLE))" "yes"
	ld $(LDFLAGS-$*) $(LDFLAGS) -o $*.junk			\
		--dll -e _dll_entry@12				\
		--base-file $*.base				\
		$*.exp $(STATIC)$*.a $(OBJS)			\
		$(LDLIBS-$*) $(LDLIBS) $(LIBS)
	dlltool --as=as $(DLLTOOLFLAGS-$*) $(DLLTOOLFLAGS)	\
		--dllname $*.junk				\
		--def $<					\
		--base-file $*.base				\
		--output-exp $*.exp
endif
	rm $*.base $*.junk

# This rule creates the desired (relocatable) dynamic link library.

%.dll: %.exp
	ld $(LDFLAGS-$*) $(LDFLAGS) -o $*.dll			\
		--dll -e _dll_entry@12				\
		$*.exp $(STATIC)$*.a $(OBJS)			\
		$(LDLIBS-$*) $(LDLIBS) $(LIBS)

# This rule creates the import library which contains small stubs for all 
# the functions exported by the DLL which jump to them via the jump table.  
# Executables that will use the DLL must be linked against this stub library.

%.a: %.def %.dll
	dlltool --as=as	$(DLLTOOLFLAGS-$*) $(DLLTOOLFLAGS)	\
		--dllname $*.dll				\
		--def $<					\
		--output-lib $@

# This black magic piece of assembler needs to be linked in in order to
# properly terminate the list of imported DLLs.

dll_fixup.s:
	echo '.section .idata$$3' 	 > dll_fixup.s
	echo '.long 0,0,0,0, 0,0,0,0'	>> dll_fixup.s

# This obscure cludge avoids fatal diagnostics for a missing WinMain.

dll_main.c:
	echo 'int main() { return 0; }'	 > dll_main.c

# This defines the Win32 entry point for loading and unloading the DLL.

dll_init.c:
	echo '#include <windows.h> '	 		 > dll_init.c
	echo 'extern int WINAPI dll_entry (HANDLE h,DWORD reason,void *ptr); '	>> dll_init.c
	echo 'int WINAPI dll_entry (HANDLE h,DWORD reason,void *ptr) { '	>> dll_init.c
	echo '  switch (reason) { '			>> dll_init.c
	echo '    case DLL_PROCESS_ATTACH: break; '	>> dll_init.c
	echo '    case DLL_PROCESS_DETACH: break; '	>> dll_init.c
	echo '    case DLL_THREAD_ATTACH:  break; '	>> dll_init.c
	echo '    case DLL_THREAD_DETACH:  break; '	>> dll_init.c
	echo '  } return 1; } '				>> dll_init.c

PLIB=-L/usr/lib -lXmPgplot -lcpgplot -lpgplot
XLIB=-L/usr/X11/lib -lXt -lSM -lICE -lX11

XINC=-I/usr/X11/include

STATIC=/usr/X11/lib/lib

LDLIBS=$(XLIB)

all: pgmdemo

RELOCATABLE = yes

include Makefile.DLLs

# Test Motif demo from PGPLOT

pgmdemo: pgmdemo.c Xm.a Xm.dll
	g77 -O2 $(XINC) -o $@ pgmdemo.c Xm.a $(PLIB) $(XLIB)

clean:
	rm -f *.a *.dll *.exe


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]