From 807241b7466840034a5284b0202705b096d41458 Mon Sep 17 00:00:00 2001 From: wimpie Date: Thu, 06 Jan 2005 03:51:04 +0000 Subject: 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 --- (limited to 'scripts') 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- +# or make package--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 -- cgit v0.9.0.2