fpc/rtl/win/wininc/Makefile
mazen b127fc154a * Fixed spell error revealed by lintian.
git-svn-id: trunk@16094 -
2010-10-06 20:33:57 +00:00

160 lines
4.9 KiB
Makefile

#
# $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