123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- #
- # $Id: Makefile,v 1.2 2002/09/07 16:01:29 peter Exp $
- # This file is part of the Free Pascal run time library.
- # Copyright (c) 1999-2000 by Michael van Canneyt
- #
- # Makefile for the Free Pascal windows.pp include files
- #
- # See the file COPYING.FPC, included in this distribution,
- # for details about the copyright.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- #
- # Warning: this file contains TAB (#9) characters that are required for
- # make. Make sure you use an editor that does not replace TABs with
- # spaces, or the makefile won't work anymore after you save.
- #####################################################################
- # Defaults
- #####################################################################
- ECHO=echo
- # Files used by windows.pp
- include makefile.inc
- #####################################################################
- # windows.pp
- #####################################################################
- # default target
- all: ascdef.inc unidef.inc
- # Getting DLL names
- # not present in headers !!
- # first get the list of all exported function names
- # uses pedump
- # for system dll 's
- # gdi32.exp will contain all exported functions names of gdi32.dll
- WINDOWS_DIR:=c\:/windows
- %.exp : $(WINDOWS_DIR)/system/%.dll
- pedump $< > $*.tmp
- sed -n -e "s/Addr:\(.*\)Ord:\(.*\)Name: \(.*\)/@\3@/p" $*.tmp > $*.exp
- # -rm $*.tmp
- %.exd : $(WINDOWS_DIR)/system/%.drv
- pedump $< > $*.tmp
- sed -n -e "s/Addr:\(.*\)Ord:\(.*\)Name: \(.*\)/@\3@/p" $*.tmp > $*.exd
- # -rm $*.tmp
- # list of useful dll's for windows.pp
- dllexps : gdi32.exp kernel32.exp advapi32.exp user32.exp mapi32.exp \
- comdlg32.exp shell32.exp mpr.exp comctl32.exp version.exp \
- opengl32.exp spoolss.exp winspool.exd
- # get a complete listing of all system dll's
- allexps : $(notdir $(patsubst %.dll,%.exp,$(wildcard $(WINDOWS_DIR)/system/*.dll)) \
- $(patsubst %.drv,%.exd,$(wildcard $(WINDOWS_DIR)/system/*.drv)))
- # extract the dllnames for which the real dll file is not
- # known yet
- # func.lst will contain all functions for which we still do
- # not know the origin DLL
- %.lst : %.inc
- @$(ECHO) listing DLL function names of $*.inc
- sed -n -e "s/\(.*\)External_library name '\([^']*\)'\(.*\)/\2/p" $*.inc > $*.lst
- # get the DLL name from the listing in .exp files
- # of the current target
- define grepname
- $(filter %.dll %.drv ,$(subst .exd:,.drv ,$(subst .exp:,.dll ,$(shell grep @$*@ *.ex*))))
- endef
- # creating of a sed script that
- # will substitute all External_library
- # by the real name of the DLL if found in exports files
- # two stages
- # because you cannot set a variable inside the commands
- # Level 1 : set filename variable
- # Level 2 :
- %.sub : %.lst
- @$(ECHO) getting DLL file name for $*
- -rm $*.sub
- @$(ECHO) # Substitutions for $* >$*.sub
- # call make for all names in lst file
- # define LongList if there is an error
- # because the list is too long
- ifdef LongList
- $(foreach name,$(shell cat $*.lst),$(MAKE) subfile=$*.sub $(name).find ; )
- else
- $(MAKE) subfile=$*.sub $(addsuffix .find,$(shell cat $*.lst))
- endif
- # resubstitute unfound ones !!
- @$(ECHO) s/external \'\' name \'\([^\']*\)\'/external\
- External_library name \'\1\'/ >>$*.sub
- @$(ECHO) # End of substitutions for $* >>$*.sub
- # Change file according to function found in export
- # list remaining unfound functions in $*.mis
- %.npp : %.sub
- sed -f $*.sub $*.inc > $*.npp
- sed -n -e "s/\(.*\)External_library name \'\([^\']*\)\'\(.*\)/\2/p" $*.npp > $*.mis
- %.find :
- @$(ECHO) $* is in $(grepname)
- ifdef subfile
- @$(ECHO) s/external External_library name \'$*\'/external\
- \'$(filter %.dll %.drv ,$(subst .exd:,.drv ,$(subst .exp:,.dll ,$(shell grep @$*@ *.ex*))))\'\
- name \'$*\'/ >>$(subfile)
- else
- @$(ECHO) external \
- \'$(filter %.dll %.drv ,$(subst .exd:,.drv ,$(subst .exp:,.dll ,$(shell grep @$*@ *.ex*))))\'\
- name $*
- endif
- GNUWIN32LIBDIR=./
- %.find2 :
- @$(ECHO) s/In archive \(.*\)/\1/p >find.sed
- @$(ECHO) s/\(.*\)___imp_$*@\(.*\)/found: $*/p >>find.sed
- ifdef subfile
- sed -n -f find.sed alllibs.sym >> $(subfile)
- else
- sed -n -f find.sed alllibs.sym > $*.res
- endif
- missing : $(GNUWIN32LIBDIR)alllibs.sym $(addsuffix .lst,$(WINDOWS_FILES))
- -rm missing
- $(MAKE) subfile=missing $(addsuffix .find2,$(shell cat *.lst))
- substmissing : missing
- dtou missing
- @$(ECHO) N > test.sed
- @$(ECHO) s/lib\(.*\)\.a:\nfound: \(.*\)/\1.dll : \2/p >> test.sed
- @$(ECHO) D >> test.sed
- sed -n -f test.sed missing > missing.tmp
- sed -e "s#\(.*\) : \(.*\)#s/external External_library name \'\2\'/external \'\1\' name \'\2\'/#" missing.tmp > missing.sub
- dllnames:
- $(MAKE) $(addsuffix .lst,$(WINDOWS_FILES))
- test:
- @$(ECHO) namelist of $(filename) is "$(namelist)"
- # automatic conversion from ascfun.inc to ascdef.inc
- # and unifun.inc to unidef.inc
- ascdef.inc : ascfun.inc ascdef.sed
- sed -f ascdef.sed ascfun.inc > ascdef.inc
- unidef.inc : unifun.inc unidef.sed
- sed -f unidef.sed unifun.inc > unidef.inc
|