summaryrefslogtreecommitdiff
path: root/scripts/GeneratePackageMake
authorwimpie <wimpie>2005-01-06 03:51:04 (UTC)
committer wimpie <wimpie>2005-01-06 03:51:04 (UTC)
commit807241b7466840034a5284b0202705b096d41458 (patch) (side-by-side diff)
treee4007fbafd33d1529c4c1d1cf307a85bfe89ecb0 /scripts/GeneratePackageMake
parent88d721b0636cee01399fe1179622feb2781b57b0 (diff)
downloadopie-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
Diffstat (limited to 'scripts/GeneratePackageMake') (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/GeneratePackageMake228
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