# 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 : \$(ATP) \$(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