author | wimpie <wimpie> | 2005-01-06 03:51:04 (UTC) |
---|---|---|
committer | wimpie <wimpie> | 2005-01-06 03:51:04 (UTC) |
commit | 807241b7466840034a5284b0202705b096d41458 (patch) (side-by-side diff) | |
tree | e4007fbafd33d1529c4c1d1cf307a85bfe89ecb0 | |
parent | 88d721b0636cee01399fe1179622feb2781b57b0 (diff) | |
download | opie-807241b7466840034a5284b0202705b096d41458.zip opie-807241b7466840034a5284b0202705b096d41458.tar.gz opie-807241b7466840034a5284b0202705b096d41458.tar.bz2 |
This script collects all control files
locates Files and Package entrie
and generates using that information a makefile (on stdout)
SOME DOCUMENTATION (sent to all developers)
That makefile generates a new packages for a particular control file
ONLY IF
1. the control file changed
2. one of the files in the control file changed (including
support for wildcards).
The script is called automatically when needed by the main makefile
when either
make packages-mt
make packages
make package-SomeControlBaseName
is called.
if a goal that does not begin with package... is called (like calling
make clean or just make) then the generation is NOT performed (even if
the special makefile to be generated does not exist) NOR will that
special makefile be included (if it exists).
This guarantees the performance of the build to remain the same
packages built are generated to the Packages subdirectory in $(TOPDIR)
The makefile does not try to package applications that are not compiled
mkipk might fail if files are missing. However the makefile is written
such that the packaging continues
Old packages of the same control are removed
EXTRAVERSION is updated automatically (and updated ONLY for packages
that need to be rebuilt).
IMPORTANT :
Because of the dangling link to /opt/QtPalmtop/bin/quicklauncher
in bin for all quicklauncher apps. the makefile exists with
an error message if /opt... does not exist. to make the makefile
work issue
mkdir /opt
ln -sf $(OPIEDIR) /opt/QtPalmtop
-rwxr-xr-x | scripts/GeneratePackageMake | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/scripts/GeneratePackageMake b/scripts/GeneratePackageMake new file mode 100755 index 0000000..d5ccee5 --- a/dev/null +++ b/scripts/GeneratePackageMake @@ -0,0 +1,228 @@ +# generate file containg control name / package name / files +find . -name *.control | grep -v -- "-mt.control" | while read i +do + i=${i/.\//} + CDIR=${i%/*} + BNAME=${i##*/} + BNAME=${BNAME/.control/} + echo "cdir: ${CDIR}" + echo "bname: ${BNAME}" + grep -e "Package:" -e "Files:" ./${i} +done > /tmp/ALL + +# +# makefile header +# + +cat << MAKEFILEHEADER + +# +# generate -mt.control file from regular control +# arg 1 : path to control file to convert +# + +define GenerateMTControl +@echo "Generating -mt control file for \$(basename \$<)" +@\$(OPIEDIR)/scripts/tothreaded \$< \$(OPIEDIR)/AllThreadedPackages +endef + +# +# package one control file +# arg 1 : directory from OPIEROOT where control file resides +# arg 2 : control file basename without -mt (no .control) +# arg 3 : control file basename with -mt if needed +# arg 4 : package name (value specified by Package: ...) +# + +define DoPackage +@echo \"Building ipk of \$(4)\" +@( \$(ForSubst) ) > \$(TOPDIR)/scripts/subst +@( \$(ForFileSubst) ) > \$(TOPDIR)/scripts/Filesubst +@( cd \$(OPIEDIR); \\ + \$(OPIEDIR)/scripts/mkipkg \\ + --subst=\$(OPIEDIR)/scripts/subst \\ + --filesubst=\$(OPIEDIR)/scripts/filesubst \\ + --control=\$(OPIEDIR)/\$(1)/\$(3).control \\ + --prerm=\$(OPIEDIR)/\$(1)/\$(2).prerm \\ + --preinst=\$(OPIEDIR)/\$(1)/\$(2).preinst \\ + --postrm=\$(OPIEDIR)/\$(1)/\$(2).postrm \\ + --postinst=\$(OPIEDIR)/\$(1)/\$(2).postinst \\ + --strip=\$(STRIP) \$(OPIEDIR); \\ + rm -f \$(OPIEDIR)/Packages/\$(4)_*.ipk; \\ + mv *.ipk \$(OPIEDIR)/Packages; \\ + touch \$(OPIEDIR)/Packages/\$(4) \\ +) || true +endef + +# +# prepared for generating the substfile for every build +# + +define ForSubst +echo 's,\\\$\$QPE_VERSION,\$(QPE_VERSION),g'; \\ +echo 's,\\\$\$OPIE_VERSION,\$(OPIE_VERSION),g'; \\ +echo 's,\\\$\$QTE_VERSION,\$(QTE_VERSION),g'; \\ +echo 's,\\\$\$QTE_REVISION,\$(QTE_REVISION),g'; \\ +echo 's,\\\$\$SUB_VERSION,\$(SUB_VERSION),g'; \\ +echo 's,\\\$\$EXTRAVERSION,\$(EXTRAVERSION),g'; \\ +echo 's,\\\$\$QTE_BASEVERSION,\$(QTE_BASEVERSION),g' +endef + +define ForFileSubst +echo 's,\\\$\$OPIEDIR/root/,/,g'; \\ +echo 's,\$(OPIEDIR)/root/,/,g'; \\ +echo 's,\\\$\$OPIEDIR,\$(prefix),g'; \\ +echo 's,\$(OPIEDIR),\$(prefix),g'; \\ +echo 's,\\\$\$QTDIR,\$(prefix),g'; \\ +echo 's,\$(QTDIR),\$(prefix),g'; \\ +echo 's,^\(\./\)*root/,/,g'; \\ +echo 's,^\(\./\)*etc/,\$(prefix)/etc/,g'; \\ +echo 's,^\(\./\)*lib/,\$(prefix)/lib/,g'; \\ +echo 's,^\(\./\)*bin/,\$(prefix)/bin/,g'; \\ +echo 's,^\(\./\)*pics/,\$(prefix)/pics/,g'; \\ +echo 's,^\(\./\)*sounds/,\$(prefix)/sounds/,g'; \\ +echo 's,^\(\./\)*i18n/,\$(prefix)/i18n/,g'; \\ +echo 's,^\(\./\)*plugins/,\$(prefix)/plugins/,g'; \\ +echo 's,^\(\./\)*apps/,\$(prefix)/apps/,g'; \\ +echo 's,^\(\./\)*share/,\$(prefix)/share/,g'; \\ +echo 's,^\(\./\)*i18n/,\$(prefix)/i18n/,g'; \\ +echo 's,^\(\./\)*help/,\$(prefix)/help/,g' +endef + +# +# Will contain a list of all non-mt control files +ALLCONTROLFILES= + +# +# Will contain a list of all packaging targets +ALLPACKAGES= + +# s contains now single space +s=\$(x) \$(x) + +# +# for convenience : generate AllTh +ATP=\$(OPIEDIR)/AllThreadedPackages + +MAKEFILEHEADER + +while read k +do + CDIR="${k#* }" + read k + BNAME="${k#* }" + read k + case $k in + *"ackage:"*) + Pkg="${k#* }" + Pkg="${Pkg// }" + ;; + *"iles:"*) + Files="${k/Files:/}" + ;; + esac + read k + case $k in + *"ackage:"*) + Pkg="${k#* }" + Pkg="${Pkg// }" + ;; + *"iles:"*) + Files="${k/Files:/}" + ;; + esac + + cat << HERE +# +# package $Pkg in ${BNAME} +# + +package-${Pkg} : \$(OPIEDIR)/Packages/$Pkg +package-${Pkg}-mt : \$(OPIEDIR)/Packages/$Pkg-mt + +# collect control files and package targets + +ALLCONTROLFILES += ${CDIR}/${BNAME}.control +ALLPACKAGES += $Pkg + +# to generate -mt control file +\$(OPIEDIR)/${CDIR}/${BNAME}-mt.control : \$(OPIEDIR)/${CDIR}/${BNAME}.control + \$(GenerateMTControl) + +HERE + + if [ ! -z "${Files}" ] + then + + cat << HERE +# optimize speed +.phony : \$(wildcard \$(addprefix \$(OPIEDIR)/,${Files})) + +# capture missing files (because not built) +\$(OPIEDIR)/Packages/$Pkg \$(OPIEDIR)/Packages/$Pkg-mt \$(SUBSTFILES): \$(wildcard \$(addprefix \$(OPIEDIR)/,${Files})) +HERE + +# echo "\$(wildcard \$(addprefix \$(OPIEDIR)/,${Files})) : " + + fi + + cat << HERE +\$(OPIEDIR)/Packages/$Pkg : \$(OPIEDIR)/${CDIR}/${BNAME}.control + @\$(call DoPackage,${CDIR},${BNAME},${BNAME},${Pkg}) +\$(OPIEDIR)/Packages/$Pkg-mt : \$(OPIEDIR)/${CDIR}/${BNAME}-mt.control + @\$(call DoPackage,${CDIR},${BNAME},${BNAME}-mt,${Pkg}-mt) + +HERE + +done < /tmp/ALL + +cat << HERE +# +# regenerate package file if control files are modified +# + +Package.make : \$(addprefix \$(OPIEDIR)/,\$(ALLCONTROLFILES)) + +# +# make targets to build packages +# needs quicklauncher link in location (because dangling +# links are not considered as true files by the wildcard command) +# +# if you want to build one package only then use +# make package-<basenameof control> +# or make package-<basenameof control>-mt +# + +packages : /opt/QtPalmtop/bin/quicklauncher \\ + \$(OPIEDIR)/Packages \\ + \$(add prefix \$(OPIEDIR)/Packages/,\$(ALLPACKAGES)) +packages-mt : /opt/QtPalmtop/bin/quicklauncher \\ + \$(ATP) \\ + \$(OPIEDIR)/Packages \\ + \$(addprefix \$(OPIEDIR)/Packages/,\$(addsuffix -mt,\$(ALLPACKAGES))) + +# +# capture missing quichlauncher link +# + +/opt/QtPalmtop/bin/quicklauncher : + @echo "create a link from /opt/QtPalmtop to \$(OPIEDIR) for this target to work" + exit 2 + +# +# Create Packages directory +# + +\$(OPIEDIR)/Packages : + @mkdir \$(OPIEDIR)/Packages + +# +# update file containing all packages +# + +\$(ATP) : \$(addprefix \$(OPIEDIR)/,\$(ALLCONTROLFILES)) + @echo "Generating \$(notdir \$(ATP))" + @echo -e "\$(subst \$(s),,\$(foreach i,\$(ALLPACKAGES),\$(i)\n))" > \$@ +HERE + +rm /tmp/ALL |