mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 19:49:22 +02:00
* Scripts to generate Makefiles which call fpmake
git-svn-id: trunk@24487 -
This commit is contained in:
parent
27fc72b4b3
commit
534e8e2a0c
5
.gitattributes
vendored
5
.gitattributes
vendored
@ -14273,6 +14273,11 @@ utils/dxegen/dxegen.pp svneol=native#text/plain
|
|||||||
utils/dxegen/fpmake.pp svneol=native#text/plain
|
utils/dxegen/fpmake.pp svneol=native#text/plain
|
||||||
utils/fpcm/Makefile svneol=native#text/plain
|
utils/fpcm/Makefile svneol=native#text/plain
|
||||||
utils/fpcm/Makefile.fpc svneol=native#text/plain
|
utils/fpcm/Makefile.fpc svneol=native#text/plain
|
||||||
|
utils/fpcm/Makefile.fpmake.bs.template svneol=native#text/plain
|
||||||
|
utils/fpcm/Makefile.fpmake.template svneol=native#text/plain
|
||||||
|
utils/fpcm/convert_all_fpmake.sh svneol=native#text/plain
|
||||||
|
utils/fpcm/convert_fpmake.sh svneol=native#text/plain
|
||||||
|
utils/fpcm/convert_fpmake.txt svneol=native#text/plain
|
||||||
utils/fpcm/fpcmake.inc svneol=native#text/plain
|
utils/fpcm/fpcmake.inc svneol=native#text/plain
|
||||||
utils/fpcm/fpcmake.ini svneol=native#text/plain
|
utils/fpcm/fpcmake.ini svneol=native#text/plain
|
||||||
utils/fpcm/fpcmake.pp svneol=native#text/plain
|
utils/fpcm/fpcmake.pp svneol=native#text/plain
|
||||||
|
119
utils/fpcm/Makefile.fpmake.bs.template
Normal file
119
utils/fpcm/Makefile.fpmake.bs.template
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#
|
||||||
|
# Makefile.fpc for running fpmake
|
||||||
|
#
|
||||||
|
|
||||||
|
[package]
|
||||||
|
name=insert-name-here
|
||||||
|
version=2.7.1
|
||||||
|
|
||||||
|
[require]
|
||||||
|
packages=rtl
|
||||||
|
|
||||||
|
[install]
|
||||||
|
fpcpackage=y
|
||||||
|
|
||||||
|
[default]
|
||||||
|
fpcdir=../..
|
||||||
|
|
||||||
|
[prerules]
|
||||||
|
FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
|
||||||
|
ifdef OS_TARGET
|
||||||
|
FPC_TARGETOPT+=--os=$(OS_TARGET)
|
||||||
|
endif
|
||||||
|
ifdef CPU_TARGET
|
||||||
|
FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
|
||||||
|
endif
|
||||||
|
LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
|
||||||
|
# Adding a dependency on fpmkunit is not possbile due to an infinite loop. So
|
||||||
|
# the fpmkunit-searchpath is added here:
|
||||||
|
PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))
|
||||||
|
ifneq ($(PACKAGEDIR_FPMKUNIT),)
|
||||||
|
ifneq ($(wildcard $(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)),)
|
||||||
|
UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)
|
||||||
|
else
|
||||||
|
UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)
|
||||||
|
endif
|
||||||
|
ifdef CHECKDEPEND
|
||||||
|
$(PACKAGEDIR_FPMKUNIT)/$(FPCMADE):
|
||||||
|
$(MAKE) -C $(PACKAGEDIR_FPMKUNIT) $(FPCMADE)
|
||||||
|
override ALLDEPENDENCIES+=$(PACKAGEDIR_FPMKUNIT)/$(FPCMADE)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
PACKAGEDIR_FPMKUNIT=
|
||||||
|
UNITDIR_FPMKUNIT:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Package.fpc,$(UNITSDIR)))))
|
||||||
|
ifneq ($(UNITDIR_FPMKUNIT),)
|
||||||
|
UNITDIR_FPMKUNIT:=$(firstword $(UNITDIR_FPMKUNIT))
|
||||||
|
else
|
||||||
|
UNITDIR_FPMKUNIT=
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifdef UNITDIR_FPMAKE_FPMKUNIT
|
||||||
|
override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_FPMKUNIT)
|
||||||
|
endif
|
||||||
|
|
||||||
|
[rules]
|
||||||
|
# Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
|
||||||
|
override FPCOPT:=$(filter-out -FU%,$(FPCOPT))
|
||||||
|
override FPCOPT:=$(filter-out -FE%,$(FPCOPT))
|
||||||
|
# Compose general fpmake-parameters
|
||||||
|
ifdef FPMAKEOPT
|
||||||
|
FPMAKE_OPT+=$(FPMAKEOPT)
|
||||||
|
endif
|
||||||
|
FPMAKE_OPT+=--localunitdir=../..
|
||||||
|
FPMAKE_OPT+=--globalunitdir=insert-packageunits-here
|
||||||
|
FPMAKE_OPT+=$(FPC_TARGETOPT)
|
||||||
|
FPMAKE_OPT+=$(addprefix -o ,$(FPCOPT))
|
||||||
|
FPMAKE_OPT+=--compiler=$(FPC)
|
||||||
|
FPMAKE_OPT+=-bu
|
||||||
|
.NOTPARALLEL:
|
||||||
|
|
||||||
|
fpmake: fpmake.pp
|
||||||
|
$(FPCFPMAKE) fpmake.pp $(FPMAKE_SKIP_CONFIG) $(addprefix -Fu,$(COMPILER_FPMAKE_UNITDIR)) $(FPCMAKEOPT) $(OPT)
|
||||||
|
all: fpmake
|
||||||
|
$(LOCALFPMAKE) compile $(FPMAKE_OPT)
|
||||||
|
smart: fpmake
|
||||||
|
$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -XX -o -CX
|
||||||
|
release: fpmake
|
||||||
|
$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -dRELEASE
|
||||||
|
debug: fpmake
|
||||||
|
$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -dDEBUG
|
||||||
|
# If no fpmake exists and (dist)clean is called, do not try to build fpmake, it will
|
||||||
|
# most often fail because the dependencies are cleared.
|
||||||
|
# In case of a clean, simply do nothing
|
||||||
|
ifeq ($(FPMAKE_BIN_CLEAN),)
|
||||||
|
clean:
|
||||||
|
else
|
||||||
|
clean:
|
||||||
|
$(FPMAKE_BIN_CLEAN) clean $(FPMAKE_OPT)
|
||||||
|
endif
|
||||||
|
# In case of a distclean, perform an 'old'-style distclean. This to avoid problems
|
||||||
|
# when the package is compiled using fpcmake prior to running this clean using fpmake
|
||||||
|
ifeq ($(FPMAKE_BIN_CLEAN),)
|
||||||
|
distclean: $(addsuffix _distclean,$(TARGET_DIRS)) fpc_cleanall
|
||||||
|
else
|
||||||
|
distclean:
|
||||||
|
ifdef inUnix
|
||||||
|
{ $(FPMAKE_BIN_CLEAN) distclean $(FPMAKE_OPT); if [ $$? != "0" ]; then { echo Something wrong with fpmake exectable. Remove the executable and call make recursively to recover.; $(DEL) $(FPMAKE_BIN_CLEAN); $(MAKE) fpc_cleanall; }; fi; }
|
||||||
|
else
|
||||||
|
$(FPMAKE_BIN_CLEAN) distclean $(FPMAKE_OPT)
|
||||||
|
endif
|
||||||
|
-$(DEL) $(LOCALFPMAKE)
|
||||||
|
endif
|
||||||
|
cleanall: distclean
|
||||||
|
install: fpmake
|
||||||
|
ifdef UNIXHier
|
||||||
|
$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR)
|
||||||
|
else
|
||||||
|
$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR)
|
||||||
|
endif
|
||||||
|
# distinstall also installs the example-sources
|
||||||
|
distinstall: fpmake
|
||||||
|
ifdef UNIXHier
|
||||||
|
$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR) -ie
|
||||||
|
else
|
||||||
|
$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR) -ie
|
||||||
|
endif
|
||||||
|
zipinstall: fpmake
|
||||||
|
$(LOCALFPMAKE) zipinstall $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX)
|
||||||
|
zipdistinstall: fpmake
|
||||||
|
$(LOCALFPMAKE) zipinstall $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX) -ie
|
93
utils/fpcm/Makefile.fpmake.template
Normal file
93
utils/fpcm/Makefile.fpmake.template
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#
|
||||||
|
# Makefile.fpc for running fpmake
|
||||||
|
#
|
||||||
|
|
||||||
|
[package]
|
||||||
|
name=insert-name-here
|
||||||
|
version=2.7.1
|
||||||
|
|
||||||
|
[require]
|
||||||
|
packages=rtl fpmkunit
|
||||||
|
|
||||||
|
[install]
|
||||||
|
fpcpackage=y
|
||||||
|
|
||||||
|
[default]
|
||||||
|
fpcdir=../..
|
||||||
|
|
||||||
|
[prerules]
|
||||||
|
FPMAKE_BIN_CLEAN=$(wildcard .$(PATHSEP)fpmake$(SRCEXEEXT))
|
||||||
|
ifdef OS_TARGET
|
||||||
|
FPC_TARGETOPT+=--os=$(OS_TARGET)
|
||||||
|
endif
|
||||||
|
ifdef CPU_TARGET
|
||||||
|
FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
|
||||||
|
endif
|
||||||
|
LOCALFPMAKE=.$(PATHSEP)fpmake$(SRCEXEEXT)
|
||||||
|
|
||||||
|
[rules]
|
||||||
|
# Do not pass the Makefile's unit and binary target locations. fpmake uses it's own.
|
||||||
|
override FPCOPT:=$(filter-out -FU%,$(FPCOPT))
|
||||||
|
override FPCOPT:=$(filter-out -FE%,$(FPCOPT))
|
||||||
|
# Compose general fpmake-parameters
|
||||||
|
ifdef FPMAKEOPT
|
||||||
|
FPMAKE_OPT+=$(FPMAKEOPT)
|
||||||
|
endif
|
||||||
|
FPMAKE_OPT+=--localunitdir=../..
|
||||||
|
FPMAKE_OPT+=--globalunitdir=insert-packageunits-here
|
||||||
|
FPMAKE_OPT+=$(FPC_TARGETOPT)
|
||||||
|
FPMAKE_OPT+=$(addprefix -o ,$(FPCOPT))
|
||||||
|
FPMAKE_OPT+=--compiler=$(FPC)
|
||||||
|
FPMAKE_OPT+=-bu
|
||||||
|
.NOTPARALLEL:
|
||||||
|
|
||||||
|
fpmake: fpmake.pp
|
||||||
|
$(FPCFPMAKE) fpmake.pp $(FPMAKE_SKIP_CONFIG) $(addprefix -Fu,$(COMPILER_FPMAKE_UNITDIR)) $(FPCMAKEOPT) $(OPT)
|
||||||
|
all: fpmake
|
||||||
|
$(LOCALFPMAKE) compile $(FPMAKE_OPT)
|
||||||
|
smart: fpmake
|
||||||
|
$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -XX -o -CX
|
||||||
|
release: fpmake
|
||||||
|
$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -dRELEASE
|
||||||
|
debug: fpmake
|
||||||
|
$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -dDEBUG
|
||||||
|
# If no fpmake exists and (dist)clean is called, do not try to build fpmake, it will
|
||||||
|
# most often fail because the dependencies are cleared.
|
||||||
|
# In case of a clean, simply do nothing
|
||||||
|
ifeq ($(FPMAKE_BIN_CLEAN),)
|
||||||
|
clean:
|
||||||
|
else
|
||||||
|
clean:
|
||||||
|
$(FPMAKE_BIN_CLEAN) clean $(FPMAKE_OPT)
|
||||||
|
endif
|
||||||
|
# In case of a distclean, perform an 'old'-style distclean. This to avoid problems
|
||||||
|
# when the package is compiled using fpcmake prior to running this clean using fpmake
|
||||||
|
ifeq ($(FPMAKE_BIN_CLEAN),)
|
||||||
|
distclean: $(addsuffix _distclean,$(TARGET_DIRS)) fpc_cleanall
|
||||||
|
else
|
||||||
|
distclean:
|
||||||
|
ifdef inUnix
|
||||||
|
{ $(FPMAKE_BIN_CLEAN) distclean $(FPMAKE_OPT); if [ $$? != "0" ]; then { echo Something wrong with fpmake exectable. Remove the executable and call make recursively to recover.; $(DEL) $(FPMAKE_BIN_CLEAN); $(MAKE) fpc_cleanall; }; fi; }
|
||||||
|
else
|
||||||
|
$(FPMAKE_BIN_CLEAN) distclean $(FPMAKE_OPT)
|
||||||
|
endif
|
||||||
|
-$(DEL) $(LOCALFPMAKE)
|
||||||
|
endif
|
||||||
|
cleanall: distclean
|
||||||
|
install: fpmake
|
||||||
|
ifdef UNIXHier
|
||||||
|
$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR)
|
||||||
|
else
|
||||||
|
$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR)
|
||||||
|
endif
|
||||||
|
# distinstall also installs the example-sources
|
||||||
|
distinstall: fpmake
|
||||||
|
ifdef UNIXHier
|
||||||
|
$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR) -ie
|
||||||
|
else
|
||||||
|
$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR) -ie
|
||||||
|
endif
|
||||||
|
zipinstall: fpmake
|
||||||
|
$(LOCALFPMAKE) zipinstall $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX)
|
||||||
|
zipdistinstall: fpmake
|
||||||
|
$(LOCALFPMAKE) zipinstall $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX) -ie
|
36
utils/fpcm/convert_all_fpmake.sh
Executable file
36
utils/fpcm/convert_all_fpmake.sh
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
PACKAGESDIR=..
|
||||||
|
TEMPLATEDIR=./
|
||||||
|
initial_conversion=false
|
||||||
|
|
||||||
|
while getopts ":d:p:i" opt; do
|
||||||
|
case $opt in
|
||||||
|
i)
|
||||||
|
initial_conversion=true
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
PACKAGESDIR=$OPTARG
|
||||||
|
;;
|
||||||
|
p)
|
||||||
|
TEMPLATEDIR=$OPTARG/
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "Invalid option: -$OPTARG"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
:)
|
||||||
|
echo "Option -$OPTARG requires an argument."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if $initial_conversion
|
||||||
|
then
|
||||||
|
FPMAKEOPT="-i -d $PACKAGESDIR"
|
||||||
|
else
|
||||||
|
FPMAKEOPT="-d $PACKAGESDIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
eval $(find */Makefile.fpc -printf 'if [ %h = "paszlib" -o %h = "fcl-process" -o %h = "libtar" -o %h = "hash" ] ; then "$TEMPLATEDIR"convert_fpmake.sh -T "$TEMPLATEDIR"Makefile.fpmake.bs.template $FPMAKEOPT %h ; elif [ ! %h = "fpmkunit" ] ; then "$TEMPLATEDIR"convert_fpmake.sh -T "$TEMPLATEDIR"Makefile.fpmake.template $FPMAKEOPT %h ; fi ;' )
|
||||||
|
|
70
utils/fpcm/convert_fpmake.sh
Executable file
70
utils/fpcm/convert_fpmake.sh
Executable file
@ -0,0 +1,70 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
TEMPLATEFILE=Makefile.fpmake.template
|
||||||
|
PACKAGESDIR=..
|
||||||
|
initial_conversion=false
|
||||||
|
|
||||||
|
while getopts ":T:d:i" opt; do
|
||||||
|
case $opt in
|
||||||
|
T)
|
||||||
|
TEMPLATEFILE=$OPTARG
|
||||||
|
;;
|
||||||
|
i)
|
||||||
|
initial_conversion=true
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
PACKAGESDIR=$OPTARG
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "Invalid option: -$OPTARG"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
:)
|
||||||
|
echo "Option -$OPTARG requires an argument."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
|
if [ ! "$#" -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "Usage: convert_fpmake.sh [-T templatename] [-d packagesdir] [packagename]"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
if [ ! -d $1 ]
|
||||||
|
then
|
||||||
|
echo "Package $1 not found"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
if [ ! -e $TEMPLATEFILE ]
|
||||||
|
then
|
||||||
|
echo "Package template $TEMPLATEFILE not found"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Processing package $1"
|
||||||
|
if $initial_conversion
|
||||||
|
then
|
||||||
|
if [ -f $1/Makefile.fpc.fpcmake ]
|
||||||
|
then
|
||||||
|
echo "Package is al geconverteerd"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f $1/Makefile.fpc.fpcmake
|
||||||
|
svn rename $1/Makefile.fpc $1/Makefile.fpc.fpcmake
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp -v $TEMPLATEFILE $1/Makefile.fpc
|
||||||
|
sed -i s/name=insert-name-here/name=$1/ $1/Makefile.fpc
|
||||||
|
sed -i s,insert-packageunits-here,$PACKAGESDIR, $1/Makefile.fpc
|
||||||
|
|
||||||
|
if $initial_conversion
|
||||||
|
then
|
||||||
|
svn add Makefile.fpc
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $1
|
||||||
|
fpcmake -TAll
|
||||||
|
cd ..
|
18
utils/fpcm/convert_fpmake.txt
Normal file
18
utils/fpcm/convert_fpmake.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
The convert_all_fpmake.sh script generates the Makefile.fpc's for calling
|
||||||
|
fpmake.
|
||||||
|
It does that for all packages in sub-directories of the current directory. The
|
||||||
|
Makefile.fpc's are based on the Makefile.fpmake.template and the
|
||||||
|
Makefile.fpmake.bs.template, the latter for packages that are needed to bootstrap the fpmkunit. Note that the fpmkunint-package is skipped by this
|
||||||
|
script, since it's Makefile.fpc is very different from the others.
|
||||||
|
|
||||||
|
For generating the utils-makefiles do:
|
||||||
|
|
||||||
|
cd utils
|
||||||
|
fpcm/convert_all_fpmake.sh -d ../../packages -p fpcm
|
||||||
|
|
||||||
|
|
||||||
|
For generating the packages-makefiles:
|
||||||
|
|
||||||
|
cd packages
|
||||||
|
../utils/fpcm/convert_all_fpmake.sh -p ../utils/fpcm
|
||||||
|
|
Loading…
Reference in New Issue
Block a user