uncommitted - knopflerfish-osgi

Ready changes

Summary

Import uploads missing from VCS:

Diff

diff --git a/.pc/.quilt_patches b/.pc/.quilt_patches
new file mode 100644
index 0000000..6857a8d
--- /dev/null
+++ b/.pc/.quilt_patches
@@ -0,0 +1 @@
+debian/patches
diff --git a/.pc/.quilt_series b/.pc/.quilt_series
new file mode 100644
index 0000000..c206706
--- /dev/null
+++ b/.pc/.quilt_series
@@ -0,0 +1 @@
+series
diff --git a/.pc/.version b/.pc/.version
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/.pc/.version
@@ -0,0 +1 @@
+2
diff --git a/.pc/10_javac_encoding_source_target_level.patch/osgi/framework/build.xml b/.pc/10_javac_encoding_source_target_level.patch/osgi/framework/build.xml
new file mode 100644
index 0000000..5165c3a
--- /dev/null
+++ b/.pc/10_javac_encoding_source_target_level.patch/osgi/framework/build.xml
@@ -0,0 +1,408 @@
+<?xml version="1.0"?>
+
+<project name="framework" default="all">
+
+  <!-- build properties -->
+  <property name="topdir"       location=".."/>
+  <property name="osgi.dir"     location="${topdir}"/>
+  <property name="ant.dir"      location="${topdir}/../ant"/>
+
+  <property name="root.out.dir" location="${topdir}/out"/>
+  <property name="jars.dir"     location="${topdir}/jars"/>
+  <property name="outdir"       location="${root.out.dir}/${ant.project.name}"/>
+  <property name="classout"     location="${outdir}/classes"/>
+  <property name="classout_compact" location="${outdir}/classes_compact"/>
+  <property name="javadoc.out.dir"  location="${outdir}/javadoc"/>
+  <property name="docs.dir"     location="${root.out.dir}/doc"/>
+  <property name="outdocdir"    location="${docs.dir}/${ant.project.name}"/>
+  <!-- Location of templates used by the framework_doc-target. -->
+  <property name="frameworkdoc_template"
+            location="${ant.dir}/html_template/frameworkdoc.html"/>
+
+  <property name="fw.base.version"   value="8.0.5"/>
+  <property name="version.suffix"    value=""/>
+  <condition property="fw.impl.version"
+             value="${fw.base.version}"
+             else="${fw.base.version}.${version.suffix}">
+    <equals arg1="${version.suffix}" arg2=""/>
+  </condition>
+
+  <property name="jarfile"
+            location="${topdir}/${ant.project.name}.jar"/>
+  <property name="jarfile_compact"
+            location="${topdir}/${ant.project.name}_compact.jar"/>
+  <property name="source.jarfile"
+            location="${topdir}/${ant.project.name}-source.jar"/>
+  <property name="javadoc.jarfile"
+            location="${topdir}/${ant.project.name}-javadoc.jar"/>
+  <property name="jarfile_version"
+            location="${jars.dir}/${ant.project.name}-${fw.impl.version}.jar"/>
+
+  <import file="${ant.dir}/android.xml"/>
+
+  <property name="proguard.libraryjar" value="${java.home}/lib/rt.jar"/>
+
+  <!-- OSGi annotations -->
+  <property name="osgi.annotation.jar" location="${topdir}/annotations/osgi.annotation-6.0.1.jar"/>
+
+  <property name="src.dir" location="src"/>
+
+  <property name="printClasses" location="true"/>
+
+  <path id="compile.path">
+    <pathelement location="${topdir}/framework/resources"/>
+    <pathelement location="${osgi.annotation.jar}"/>
+    <pathelement location="libs/asm-3.2.jar"/>
+  </path>
+
+  <path id="android.system.path">
+    <pathelement location="${osgi.dir}/ee/android.jar"/>
+  </path>
+
+  <path id="empty.path">
+  </path>
+
+  <property name="androidSrcs"
+            value="org/knopflerfish/framework/bundlestorage/dex/*.java"/>
+  <property name="android.class.path.name" value="android.system.path"/>
+
+  <!-- targets -->
+  <target name="all"
+          depends="jar, source.jar, save_javadoc_data, javadoc.jar">
+  </target>
+
+  <target name="compile">
+    <antcall target="compile_full"/>
+    <antcall target="compile_compact"/>
+  </target>
+
+  <target name        = "compile_full"
+          unless      = "compact"
+          description = "compiles all java sources">
+    <mkdir dir="${classout}"/>
+
+    <javac destdir           = "${classout}"
+           srcdir            = "${src.dir}"
+           debug             = "on"
+           includeantruntime = "false"
+           includes          = "**/*.java"
+           excludes          = "${androidSrcs},**/package-info.java"
+           classpathref      = "compile.path"
+           >
+      <compilerarg value="-Xlint:-options"/>
+    </javac>
+    <!-- Android parts (uses dalvik.*) -->
+    <javac destdir           = "${classout}"
+           srcdir            = "${src.dir}"
+           debug             = "on"
+           includeantruntime = "false"
+           includejavaruntime = "true"
+           includes          = "${androidSrcs}"
+           excludes          = "**/package-info.java"
+           source            = "1.6"
+           target            = "1.6"
+           bootclasspathref  = "${android.class.path.name}"
+           classpathref      = "compile.path"
+           >
+      <compilerarg value="-Xlint:-options"/>
+    </javac>
+  </target>
+
+  <target name="compile_compact"
+          if="compact"
+          description="compiles with file storage only">
+    <mkdir dir="${classout_compact}"/>
+
+    <javac destdir           = "${classout_compact}"
+           srcdir            = "${src.dir}"
+           debug             = "on"
+           includeantruntime = "false"
+           includes          = "**/*.java"
+           excludes          = "org/knopflerfish/framework/validator/*.java,org/knopflerfish/framework/bundlestorage/dex/*.java,org/knopflerfish/framework/bundlestorage/memory/*.java,**/package-info.java,org/knopflerfish/framework/SecurePermissionOps.java,org/knopflerfish/framework/permissions/*.java"
+           classpathref      = "compile.path"
+           >
+    </javac>
+  </target>
+
+  <target name="jar" depends="compile,genexports" description="build jar">
+    <tstamp>
+      <format property="framework.tstamp"
+              pattern="'Build' EE MMMM d yyyy, HH:mm:ss"
+              locale="en"/>
+    </tstamp>
+
+    <!-- delete in case the file is read-only -->
+    <delete file="resources/version"/>
+    <echo message="${fw.impl.version}"  file="resources/version"/>
+    <delete file="resources/tstamp"/>
+    <echo message="${framework.tstamp}" file="resources/tstamp"/>
+
+    <condition property="version.isset">
+      <isset property="version"/>
+    </condition>
+
+    <antcall target="writerelease"/>
+
+    <delete file="${classout}/classes.dex"/>
+
+    <loadfile srcfile="${src.dir}/org/osgi/framework/packageinfo"
+              property="fw.spec.version">
+      <filterchain>
+        <striplinebreaks/>
+        <replacestring from="version " to=""/>
+      </filterchain>
+    </loadfile>
+
+    <antcall target="jar_file_full"/>
+    <antcall target="jar_file_compact"/>
+  </target>
+
+  <target name   = "jar_file_full"
+          unless = "compact">
+    <jar basedir="${classout}"
+         filesonly="true"
+         jarfile="${jarfile}">
+      <fileset dir="resources"/>
+      <manifest>
+        <attribute name="Main-class"             value="org.knopflerfish.framework.Main"/>
+        <attribute name="Specification-Title"    value="OSGi Framework API"/>
+        <attribute name="Specification-Version"  value="${fw.spec.version}"/>
+        <attribute name="Specification-Vendor"   value="Open Service Gateway initiative"/>
+        <attribute name="Implementation-Title"   value="Knopflerfish OSGi Framework"/>
+        <attribute name="Implementation-Version" value="${fw.impl.version}" />
+        <attribute name="Implementation-Vendor"  value="Knopflerfish"/>
+        <attribute name="Bundle-Vendor"          value="Knopflerfish"/>
+        <attribute name="Bundle-Version"         value="${fw.impl.version}"/>
+        <attribute name="Bundle-SymbolicName"    value="org.knopflerfish.framework"/>
+        <attribute name="Bundle-Name"            value="frameworkbundle"/>
+        <attribute name="Bundle-Description"     value="Knopflerfish OSGi framework system bundle"/>
+        <attribute name="Bundle-License"
+                   value="&quot;http://www.knopflerfish.org/license.html&quot;;description=BSD;link=&quot;http://www.knopflerfish.org/license.html&quot;"/>
+        <attribute name="Export-Package"         value="${fw.export-package}"/>
+        <attribute name="Bundle-DocURL"          value="http://www.knopflerfish.org/releases/current/docs/bundledoc/index.html?docpage=framework/index.html"/>
+        <attribute name="Bundle-GitURL"          value="https://github.com/knopflerfish/knopflerfish.org/tree/master/osgi/framework/"/>
+        <attribute name="Build-Date"             value="${framework.tstamp}"/>
+        <attribute name="SplashScreen-Image"     value="kfsplash.gif"/>
+      </manifest>
+    </jar>
+    <mkdir dir="${jars.dir}"/>
+    <copy file="${jarfile}"
+          tofile="${jarfile_version}"
+          overwrite="true"/>
+    <antcall target="cond_dex_jars"/>
+  </target>
+
+  <target name = "jar_file_compact"
+          if   = "compact">
+    <jar basedir="${classout_compact}"
+         filesonly="true"
+         jarfile="${jarfile_compact}">
+      <fileset dir="resources">
+        <exclude name="kfsplash.gif"/>
+      </fileset>
+      <manifest>
+        <attribute name="Main-class"             value="org.knopflerfish.framework.Main"/>
+        <attribute name="Specification-Title"    value="OSGi Framework API"/>
+        <attribute name="Specification-Version"  value="${fw.spec.version}"/>
+        <attribute name="Specification-Vendor"   value="Open Service Gateway initiative"/>
+        <attribute name="Implementation-Title"   value="Knopflerfish OSGi Framework"/>
+        <attribute name="Implementation-Version" value="${fw.impl.version}" />
+        <attribute name="Implementation-Vendor"  value="Knopflerfish"/>
+        <attribute name="Bundle-Vendor"          value="Knopflerfish"/>
+        <attribute name="Bundle-Version"         value="${fw.impl.version}"/>
+        <attribute name="Bundle-SymbolicName"    value="org.knopflerfish.framework"/>
+        <attribute name="Bundle-Name"            value="frameworkbundle"/>
+        <attribute name="Bundle-Description"     value="Knopflerfish OSGi framework system bundle"/>
+        <attribute name="Bundle-License"
+                   value="&quot;http://www.knopflerfish.org/license.html&quot;;description=BSD;link=&quot;http://www.knopflerfish.org/license.html&quot;"/>
+        <attribute name="Export-Package"         value="${fw.export-package}"/>
+        <attribute name="Bundle-DocURL"          value="http://www.knopflerfish.org/releases/current/docs/bundledoc/index.html?docpage=framework/index.html"/>
+        <attribute name="Bundle-GitURL"          value="https://github.com/knopflerfish/knopflerfish.org/tree/master/osgi/framework/"/>
+        <attribute name="Build-Date"             value="${framework.tstamp}"/>
+      </manifest>
+    </jar>
+    <antcall target="proguard_compact"/>
+  </target>
+
+  <target name = "proguard_compact"
+          depends="install_proguard">
+    <move file="${jarfile_compact}" tofile="${jarfile_compact}.tmp.jar"/>
+    <proguard note="false">
+      <!-- Specify the input jars, output jars, and library jars. -->
+      <injar  file="${jarfile_compact}.tmp.jar" />
+      <outjar file="${jarfile_compact}" />
+      <libraryjar file="${proguard.libraryjar}" />
+      <libraryjar file="${osgi.annotation.jar}" />
+
+      <!-- Preserve Main. -->
+      <keepclasseswithmembers access="public">
+        <method access    ="public static"
+                type      ="void"
+                name      ="main"
+                parameters="java.lang.String[]" />
+      </keepclasseswithmembers>
+
+      <!-- Keep KF dynamic  -->
+      <keep name="org.knopflerfish.framework.FrameworkFactoryImpl"/>
+      <keep name="org.knopflerfish.framework.bundlestorage.file.BundleStorageImpl">
+        <constructor/>
+      </keep>
+
+      <!-- Keep OSGi interface -->
+      <keep name="org.osgi.**" access="public">
+        <field access="public,protected"/>
+        <method access="public,protected"/>
+        <constructor access="public,protected"/>
+      </keep>
+
+      <!-- Explicitly preserve all serialization members. The Serializable
+           interface is only a marker interface, so it wouldn't save them.
+           You can comment this out if your library doesn't use serialization.
+           If your code contains serializable classes that have to be backward
+           compatible, please refer to the manual. -->
+
+      <keepclassmembers implements="java.io.Serializable">
+        <field  access    ="static final"
+                type      ="long"
+                name      ="serialVersionUID" />
+        <field  access    ="static final"
+                type      ="java.io.ObjectStreamField[]"
+                name      ="serialPersistentFields" />
+        <method access    ="private"
+                type      ="void"
+                name      ="writeObject"
+                parameters="java.io.ObjectOutputStream" />
+        <method access    ="private"
+                type      ="void"
+                name      ="readObject"
+                parameters="java.io.ObjectInputStream" />
+        <method type      ="java.lang.Object"
+                name      ="writeReplace"
+                parameters="" />
+        <method type      ="java.lang.Object"
+                name      ="readResolve"
+                parameters="" />
+      </keepclassmembers>
+
+    </proguard>
+    <delete file="${jarfile_compact}.tmp.jar"/>
+  </target>
+
+  <target name="source.jar" if="bundle.build.source.jar">
+    <jar basedir="${src.dir}"
+         jarfile="${source.jarfile}"
+         includes="**/*.java"
+         excludes="**/package-info.java"
+         manifestencoding="UTF-8">
+    </jar>
+  </target>
+
+  <target name="save_javadoc_data" depends="genexports"
+          if="generate.javadoc.data">
+    <echo message="save_javadoc: to:${sources.file} src:${src.dir} "/>
+    <echo file="${sources.file}" append="true"
+          message="${src.dir}${line.separator}"/>
+    <echo file="${exported.file}" append="true"
+          message="${fw.export-package}${line.separator}"/>
+  </target>
+
+  <target name="javadoc.jar" if="bundle.build.javadoc.jar">
+    <mkdir dir="${javadoc.out.dir}"/>
+
+    <property name="javadoc.header"
+              value="Knopflerfish OSGi Framework ${fw.impl.version}"/>
+
+    <property name="javadoc.footer"
+              value="Knopflerfish OSGi ${version}"/>
+
+    <property name="javadoc.windowtitle"
+              value="${javadoc.header} javadoc"/>
+
+    <property name="javadoc.doctitle"
+              value="${javadoc.header} API documentation"/>
+
+    <javadoc header="${javadoc.header}"
+             footer="${javadoc.footer}"
+             windowtitle="${javadoc.windowtitle}"
+             doctitle="${javadoc.doctitle}"
+             destdir="${javadoc.out.dir}"
+             classpathref="compile.path">
+      <!-- Custome tags used by OSGi -->
+      <tag name="ThreadSafe"    scope="all" description="ThreadSafe"/>
+      <tag name="NotThreadSafe" scope="all" description="NotThreadSafe"/>
+      <tag name="Immutable"     scope="all" description="Immutable"/>
+      <tag name="security"      scope="all" description="Required Permissions"/>
+      <tag name="noimplement"   scope="all"
+           description="Consumers of this API must not implement this interface"/>
+      <packageset dir="${src.dir}">
+        <include name="org/osgi/**"/>
+        <exclude name="org/knopflerfish/**"/>
+      </packageset>
+
+    </javadoc>
+
+    <jar basedir="${javadoc.out.dir}"
+         jarfile="${javadoc.jarfile}"
+         includes="**"
+         manifestencoding="UTF-8">
+    </jar>
+  </target>
+
+  <target name="dex_jars"
+          description="Dexifies framework.">
+    <fail unless="android.exists" message="You must set the ANDROID_HOME property"/>
+    <antcall target="cond_dex_jars" inheritRefs="true"/>
+  </target>
+
+  <!-- Helper taget that adds Android dex data to framework.jar. -->
+  <target name="cond_dex_jars" if="android.exists">
+    <dexify_bundle bundle="${jarfile}"/>
+  </target>
+
+  <target name="framework_doc"
+          depends="bundle_tasks,genexports">
+    <property name="bmfa.Bundle-Version" value="${fw.impl.version}"/>
+    <property name="bmfa.Export-Package" value="${fw.export-package}"/>
+    <makehtml template="${frameworkdoc_template}"
+              outdir="${outdocdir}"
+              manstyle="true">
+      <fileset dir="doc">
+        <include name="**/*.html"/>
+      </fileset>
+    </makehtml>
+
+    <copy todir="${outdocdir}">
+      <fileset dir="doc">
+        <exclude name="**/*.html"/>
+      </fileset>
+    </copy>
+  </target>
+
+  <target name="run">
+    <java fork="true"
+          jar="${outdir}/${ant.project.name}.jar"
+          />
+  </target>
+
+  <target name="writerelease" if="version.isset">
+    <delete file="resources/release"/>
+    <echo message="${version}" file="resources/release"/>
+  </target>
+
+  <target name="genexports" depends="bundle_tasks">
+    <delete file="resources/exports"/>
+    <bundleinfo  exports  = "fw.export-package"
+                 addPackageinfoPackages = "true" >
+     <exports dir="src" includes="org/osgi/**"/>
+    </bundleinfo>
+    <echo message="${fw.export-package}" file="resources/exports"/>
+  </target>
+
+  <target name="clean" description="removes all generated files">
+    <delete dir="${outdir}"/>
+    <delete file="${jarfile}"/>
+  </target>
+
+  <import file="${topdir}/../ant/bundletasks.xml"/>
+
+</project>
diff --git a/.pc/40_ignore_android.patch/osgi/framework/build.xml b/.pc/40_ignore_android.patch/osgi/framework/build.xml
new file mode 100644
index 0000000..52643f1
--- /dev/null
+++ b/.pc/40_ignore_android.patch/osgi/framework/build.xml
@@ -0,0 +1,411 @@
+<?xml version="1.0"?>
+
+<project name="framework" default="all">
+
+  <!-- build properties -->
+  <property name="topdir"       location=".."/>
+  <property name="osgi.dir"     location="${topdir}"/>
+  <property name="ant.dir"      location="${topdir}/../ant"/>
+
+  <property name="root.out.dir" location="${topdir}/out"/>
+  <property name="jars.dir"     location="${topdir}/jars"/>
+  <property name="outdir"       location="${root.out.dir}/${ant.project.name}"/>
+  <property name="classout"     location="${outdir}/classes"/>
+  <property name="classout_compact" location="${outdir}/classes_compact"/>
+  <property name="javadoc.out.dir"  location="${outdir}/javadoc"/>
+  <property name="docs.dir"     location="${root.out.dir}/doc"/>
+  <property name="outdocdir"    location="${docs.dir}/${ant.project.name}"/>
+  <!-- Location of templates used by the framework_doc-target. -->
+  <property name="frameworkdoc_template"
+            location="${ant.dir}/html_template/frameworkdoc.html"/>
+
+  <property name="fw.base.version"   value="8.0.5"/>
+  <property name="version.suffix"    value=""/>
+  <condition property="fw.impl.version"
+             value="${fw.base.version}"
+             else="${fw.base.version}.${version.suffix}">
+    <equals arg1="${version.suffix}" arg2=""/>
+  </condition>
+
+  <property name="jarfile"
+            location="${topdir}/${ant.project.name}.jar"/>
+  <property name="jarfile_compact"
+            location="${topdir}/${ant.project.name}_compact.jar"/>
+  <property name="source.jarfile"
+            location="${topdir}/${ant.project.name}-source.jar"/>
+  <property name="javadoc.jarfile"
+            location="${topdir}/${ant.project.name}-javadoc.jar"/>
+  <property name="jarfile_version"
+            location="${jars.dir}/${ant.project.name}-${fw.impl.version}.jar"/>
+
+  <import file="${ant.dir}/android.xml"/>
+
+  <property name="proguard.libraryjar" value="${java.home}/lib/rt.jar"/>
+
+  <!-- OSGi annotations -->
+  <property name="osgi.annotation.jar" location="${topdir}/annotations/osgi.annotation-6.0.1.jar"/>
+
+  <property name="src.dir" location="src"/>
+
+  <property name="printClasses" location="true"/>
+
+  <path id="compile.path">
+    <pathelement location="${topdir}/framework/resources"/>
+    <pathelement location="${osgi.annotation.jar}"/>
+    <pathelement location="libs/asm-3.2.jar"/>
+  </path>
+
+  <path id="android.system.path">
+    <pathelement location="${osgi.dir}/ee/android.jar"/>
+  </path>
+
+  <path id="empty.path">
+  </path>
+
+  <property name="androidSrcs"
+            value="org/knopflerfish/framework/bundlestorage/dex/*.java"/>
+  <property name="android.class.path.name" value="android.system.path"/>
+
+  <!-- targets -->
+  <target name="all"
+          depends="jar, source.jar, save_javadoc_data, javadoc.jar">
+  </target>
+
+  <target name="compile">
+    <antcall target="compile_full"/>
+    <antcall target="compile_compact"/>
+  </target>
+
+  <target name        = "compile_full"
+          unless      = "compact"
+          description = "compiles all java sources">
+    <mkdir dir="${classout}"/>
+
+    <javac destdir           = "${classout}"
+           srcdir            = "${src.dir}"
+           debug             = "on"
+           includeantruntime = "false"
+           includes          = "**/*.java"
+           excludes          = "${androidSrcs},**/package-info.java"
+           classpathref      = "compile.path"
+	   encoding          = "UTF-8"
+	   source            = "1.7"
+           target            = "1.7"
+           >
+      <compilerarg value="-Xlint:-options"/>
+    </javac>
+    <!-- Android parts (uses dalvik.*) -->
+    <javac destdir           = "${classout}"
+           srcdir            = "${src.dir}"
+           debug             = "on"
+           includeantruntime = "false"
+           includejavaruntime = "true"
+           includes          = "${androidSrcs}"
+           excludes          = "**/package-info.java"
+           source            = "1.6"
+           target            = "1.6"
+           bootclasspathref  = "${android.class.path.name}"
+           classpathref      = "compile.path"
+           >
+      <compilerarg value="-Xlint:-options"/>
+    </javac>
+  </target>
+
+  <target name="compile_compact"
+          if="compact"
+          description="compiles with file storage only">
+    <mkdir dir="${classout_compact}"/>
+
+    <javac destdir           = "${classout_compact}"
+           srcdir            = "${src.dir}"
+           debug             = "on"
+           includeantruntime = "false"
+           includes          = "**/*.java"
+           excludes          = "org/knopflerfish/framework/validator/*.java,org/knopflerfish/framework/bundlestorage/dex/*.java,org/knopflerfish/framework/bundlestorage/memory/*.java,**/package-info.java,org/knopflerfish/framework/SecurePermissionOps.java,org/knopflerfish/framework/permissions/*.java"
+           classpathref      = "compile.path"
+           >
+    </javac>
+  </target>
+
+  <target name="jar" depends="compile,genexports" description="build jar">
+    <tstamp>
+      <format property="framework.tstamp"
+              pattern="'Build' EE MMMM d yyyy, HH:mm:ss"
+              locale="en"/>
+    </tstamp>
+
+    <!-- delete in case the file is read-only -->
+    <delete file="resources/version"/>
+    <echo message="${fw.impl.version}"  file="resources/version"/>
+    <delete file="resources/tstamp"/>
+    <echo message="${framework.tstamp}" file="resources/tstamp"/>
+
+    <condition property="version.isset">
+      <isset property="version"/>
+    </condition>
+
+    <antcall target="writerelease"/>
+
+    <delete file="${classout}/classes.dex"/>
+
+    <loadfile srcfile="${src.dir}/org/osgi/framework/packageinfo"
+              property="fw.spec.version">
+      <filterchain>
+        <striplinebreaks/>
+        <replacestring from="version " to=""/>
+      </filterchain>
+    </loadfile>
+
+    <antcall target="jar_file_full"/>
+    <antcall target="jar_file_compact"/>
+  </target>
+
+  <target name   = "jar_file_full"
+          unless = "compact">
+    <jar basedir="${classout}"
+         filesonly="true"
+         jarfile="${jarfile}">
+      <fileset dir="resources"/>
+      <manifest>
+        <attribute name="Main-class"             value="org.knopflerfish.framework.Main"/>
+        <attribute name="Specification-Title"    value="OSGi Framework API"/>
+        <attribute name="Specification-Version"  value="${fw.spec.version}"/>
+        <attribute name="Specification-Vendor"   value="Open Service Gateway initiative"/>
+        <attribute name="Implementation-Title"   value="Knopflerfish OSGi Framework"/>
+        <attribute name="Implementation-Version" value="${fw.impl.version}" />
+        <attribute name="Implementation-Vendor"  value="Knopflerfish"/>
+        <attribute name="Bundle-Vendor"          value="Knopflerfish"/>
+        <attribute name="Bundle-Version"         value="${fw.impl.version}"/>
+        <attribute name="Bundle-SymbolicName"    value="org.knopflerfish.framework"/>
+        <attribute name="Bundle-Name"            value="frameworkbundle"/>
+        <attribute name="Bundle-Description"     value="Knopflerfish OSGi framework system bundle"/>
+        <attribute name="Bundle-License"
+                   value="&quot;http://www.knopflerfish.org/license.html&quot;;description=BSD;link=&quot;http://www.knopflerfish.org/license.html&quot;"/>
+        <attribute name="Export-Package"         value="${fw.export-package}"/>
+        <attribute name="Bundle-DocURL"          value="http://www.knopflerfish.org/releases/current/docs/bundledoc/index.html?docpage=framework/index.html"/>
+        <attribute name="Bundle-GitURL"          value="https://github.com/knopflerfish/knopflerfish.org/tree/master/osgi/framework/"/>
+        <attribute name="Build-Date"             value="${framework.tstamp}"/>
+        <attribute name="SplashScreen-Image"     value="kfsplash.gif"/>
+      </manifest>
+    </jar>
+    <mkdir dir="${jars.dir}"/>
+    <copy file="${jarfile}"
+          tofile="${jarfile_version}"
+          overwrite="true"/>
+    <antcall target="cond_dex_jars"/>
+  </target>
+
+  <target name = "jar_file_compact"
+          if   = "compact">
+    <jar basedir="${classout_compact}"
+         filesonly="true"
+         jarfile="${jarfile_compact}">
+      <fileset dir="resources">
+        <exclude name="kfsplash.gif"/>
+      </fileset>
+      <manifest>
+        <attribute name="Main-class"             value="org.knopflerfish.framework.Main"/>
+        <attribute name="Specification-Title"    value="OSGi Framework API"/>
+        <attribute name="Specification-Version"  value="${fw.spec.version}"/>
+        <attribute name="Specification-Vendor"   value="Open Service Gateway initiative"/>
+        <attribute name="Implementation-Title"   value="Knopflerfish OSGi Framework"/>
+        <attribute name="Implementation-Version" value="${fw.impl.version}" />
+        <attribute name="Implementation-Vendor"  value="Knopflerfish"/>
+        <attribute name="Bundle-Vendor"          value="Knopflerfish"/>
+        <attribute name="Bundle-Version"         value="${fw.impl.version}"/>
+        <attribute name="Bundle-SymbolicName"    value="org.knopflerfish.framework"/>
+        <attribute name="Bundle-Name"            value="frameworkbundle"/>
+        <attribute name="Bundle-Description"     value="Knopflerfish OSGi framework system bundle"/>
+        <attribute name="Bundle-License"
+                   value="&quot;http://www.knopflerfish.org/license.html&quot;;description=BSD;link=&quot;http://www.knopflerfish.org/license.html&quot;"/>
+        <attribute name="Export-Package"         value="${fw.export-package}"/>
+        <attribute name="Bundle-DocURL"          value="http://www.knopflerfish.org/releases/current/docs/bundledoc/index.html?docpage=framework/index.html"/>
+        <attribute name="Bundle-GitURL"          value="https://github.com/knopflerfish/knopflerfish.org/tree/master/osgi/framework/"/>
+        <attribute name="Build-Date"             value="${framework.tstamp}"/>
+      </manifest>
+    </jar>
+    <antcall target="proguard_compact"/>
+  </target>
+
+  <target name = "proguard_compact"
+          depends="install_proguard">
+    <move file="${jarfile_compact}" tofile="${jarfile_compact}.tmp.jar"/>
+    <proguard note="false">
+      <!-- Specify the input jars, output jars, and library jars. -->
+      <injar  file="${jarfile_compact}.tmp.jar" />
+      <outjar file="${jarfile_compact}" />
+      <libraryjar file="${proguard.libraryjar}" />
+      <libraryjar file="${osgi.annotation.jar}" />
+
+      <!-- Preserve Main. -->
+      <keepclasseswithmembers access="public">
+        <method access    ="public static"
+                type      ="void"
+                name      ="main"
+                parameters="java.lang.String[]" />
+      </keepclasseswithmembers>
+
+      <!-- Keep KF dynamic  -->
+      <keep name="org.knopflerfish.framework.FrameworkFactoryImpl"/>
+      <keep name="org.knopflerfish.framework.bundlestorage.file.BundleStorageImpl">
+        <constructor/>
+      </keep>
+
+      <!-- Keep OSGi interface -->
+      <keep name="org.osgi.**" access="public">
+        <field access="public,protected"/>
+        <method access="public,protected"/>
+        <constructor access="public,protected"/>
+      </keep>
+
+      <!-- Explicitly preserve all serialization members. The Serializable
+           interface is only a marker interface, so it wouldn't save them.
+           You can comment this out if your library doesn't use serialization.
+           If your code contains serializable classes that have to be backward
+           compatible, please refer to the manual. -->
+
+      <keepclassmembers implements="java.io.Serializable">
+        <field  access    ="static final"
+                type      ="long"
+                name      ="serialVersionUID" />
+        <field  access    ="static final"
+                type      ="java.io.ObjectStreamField[]"
+                name      ="serialPersistentFields" />
+        <method access    ="private"
+                type      ="void"
+                name      ="writeObject"
+                parameters="java.io.ObjectOutputStream" />
+        <method access    ="private"
+                type      ="void"
+                name      ="readObject"
+                parameters="java.io.ObjectInputStream" />
+        <method type      ="java.lang.Object"
+                name      ="writeReplace"
+                parameters="" />
+        <method type      ="java.lang.Object"
+                name      ="readResolve"
+                parameters="" />
+      </keepclassmembers>
+
+    </proguard>
+    <delete file="${jarfile_compact}.tmp.jar"/>
+  </target>
+
+  <target name="source.jar" if="bundle.build.source.jar">
+    <jar basedir="${src.dir}"
+         jarfile="${source.jarfile}"
+         includes="**/*.java"
+         excludes="**/package-info.java"
+         manifestencoding="UTF-8">
+    </jar>
+  </target>
+
+  <target name="save_javadoc_data" depends="genexports"
+          if="generate.javadoc.data">
+    <echo message="save_javadoc: to:${sources.file} src:${src.dir} "/>
+    <echo file="${sources.file}" append="true"
+          message="${src.dir}${line.separator}"/>
+    <echo file="${exported.file}" append="true"
+          message="${fw.export-package}${line.separator}"/>
+  </target>
+
+  <target name="javadoc.jar" if="bundle.build.javadoc.jar">
+    <mkdir dir="${javadoc.out.dir}"/>
+
+    <property name="javadoc.header"
+              value="Knopflerfish OSGi Framework ${fw.impl.version}"/>
+
+    <property name="javadoc.footer"
+              value="Knopflerfish OSGi ${version}"/>
+
+    <property name="javadoc.windowtitle"
+              value="${javadoc.header} javadoc"/>
+
+    <property name="javadoc.doctitle"
+              value="${javadoc.header} API documentation"/>
+
+    <javadoc header="${javadoc.header}"
+             footer="${javadoc.footer}"
+             windowtitle="${javadoc.windowtitle}"
+             doctitle="${javadoc.doctitle}"
+             destdir="${javadoc.out.dir}"
+             classpathref="compile.path">
+      <!-- Custome tags used by OSGi -->
+      <tag name="ThreadSafe"    scope="all" description="ThreadSafe"/>
+      <tag name="NotThreadSafe" scope="all" description="NotThreadSafe"/>
+      <tag name="Immutable"     scope="all" description="Immutable"/>
+      <tag name="security"      scope="all" description="Required Permissions"/>
+      <tag name="noimplement"   scope="all"
+           description="Consumers of this API must not implement this interface"/>
+      <packageset dir="${src.dir}">
+        <include name="org/osgi/**"/>
+        <exclude name="org/knopflerfish/**"/>
+      </packageset>
+
+    </javadoc>
+
+    <jar basedir="${javadoc.out.dir}"
+         jarfile="${javadoc.jarfile}"
+         includes="**"
+         manifestencoding="UTF-8">
+    </jar>
+  </target>
+
+  <target name="dex_jars"
+          description="Dexifies framework.">
+    <fail unless="android.exists" message="You must set the ANDROID_HOME property"/>
+    <antcall target="cond_dex_jars" inheritRefs="true"/>
+  </target>
+
+  <!-- Helper taget that adds Android dex data to framework.jar. -->
+  <target name="cond_dex_jars" if="android.exists">
+    <dexify_bundle bundle="${jarfile}"/>
+  </target>
+
+  <target name="framework_doc"
+          depends="bundle_tasks,genexports">
+    <property name="bmfa.Bundle-Version" value="${fw.impl.version}"/>
+    <property name="bmfa.Export-Package" value="${fw.export-package}"/>
+    <makehtml template="${frameworkdoc_template}"
+              outdir="${outdocdir}"
+              manstyle="true">
+      <fileset dir="doc">
+        <include name="**/*.html"/>
+      </fileset>
+    </makehtml>
+
+    <copy todir="${outdocdir}">
+      <fileset dir="doc">
+        <exclude name="**/*.html"/>
+      </fileset>
+    </copy>
+  </target>
+
+  <target name="run">
+    <java fork="true"
+          jar="${outdir}/${ant.project.name}.jar"
+          />
+  </target>
+
+  <target name="writerelease" if="version.isset">
+    <delete file="resources/release"/>
+    <echo message="${version}" file="resources/release"/>
+  </target>
+
+  <target name="genexports" depends="bundle_tasks">
+    <delete file="resources/exports"/>
+    <bundleinfo  exports  = "fw.export-package"
+                 addPackageinfoPackages = "true" >
+     <exports dir="src" includes="org/osgi/**"/>
+    </bundleinfo>
+    <echo message="${fw.export-package}" file="resources/exports"/>
+  </target>
+
+  <target name="clean" description="removes all generated files">
+    <delete dir="${outdir}"/>
+    <delete file="${jarfile}"/>
+  </target>
+
+  <import file="${topdir}/../ant/bundletasks.xml"/>
+
+</project>
diff --git a/.pc/50_asm_compatibility.patch/ant/src/org/knopflerfish/ant/taskdefs/bundle/ClassAnalyserASM.java b/.pc/50_asm_compatibility.patch/ant/src/org/knopflerfish/ant/taskdefs/bundle/ClassAnalyserASM.java
new file mode 100644
index 0000000..40e8e38
--- /dev/null
+++ b/.pc/50_asm_compatibility.patch/ant/src/org/knopflerfish/ant/taskdefs/bundle/ClassAnalyserASM.java
@@ -0,0 +1,330 @@
+/*
+ * Copyright (c) 2003-2010, KNOPFLERFISH project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the KNOPFLERFISH project nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.knopflerfish.ant.taskdefs.bundle;
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.Type;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.Attribute;
+
+
+/**
+ * Visitor implementation that populates a BundlePackagesInfo object
+ * with data about the given class.
+ */
+public class ClassAnalyserASM
+  implements ClassVisitor
+{
+
+  /**
+   * The name of the bundle activator interface on internal form.
+   */
+  final static private String BUNDLE_ACTIVATOR
+    = "org/osgi/framework/BundleActivator";
+
+  // The BundlePackagesInfo object to populate with data.
+  final BundlePackagesInfo bpInfo;
+
+  // The task using this object to provide logging functionality.
+  final Task task;
+
+  // The package of the current class.
+  String currentPackage = null;
+
+  // The File of the current class.
+  File currentClassFile = null;
+
+
+  public ClassAnalyserASM(final BundlePackagesInfo bpInfo,
+                          final Task task)
+  {
+    this.bpInfo = bpInfo;
+    this.task   = task;
+  }
+
+  public synchronized void analyseClass(File clsFile)
+  {
+    FileInputStream fis = null;
+    try {
+      fis = new FileInputStream(clsFile);
+      analyseClass(fis, clsFile.toString());
+    } catch (Exception e) {
+      e.printStackTrace();
+    } finally {
+      if (null!=fis) {
+        try { fis.close(); } catch (Exception _ec) {}
+      }
+    }
+  }
+
+  public synchronized void analyseClass(InputStream clsIn, String fileName)
+  {
+    try {
+      ClassReader cr = new ClassReader(clsIn);
+      currentClassFile = new File(fileName);
+      cr.accept(this, 0);
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+
+  protected void addReferencedType(final Type type)
+  {
+    switch (type.getSort()) {
+    case Type.OBJECT:
+      bpInfo.addReferencedClass(currentPackage, type.getInternalName());
+      break;
+    case Type.ARRAY:
+      addReferencedType(type.getElementType());
+      break;
+    default:
+    }
+  }
+
+  /*
+   * Visits the header of the class.
+   *
+   * @param version the class version.
+   * @param access the class's access flags (see {@link Opcodes}). This
+   *        parameter also indicates if the class is deprecated.
+   * @param name the internal name of the class (see
+   *        {@link Type#getInternalName() getInternalName}).
+   * @param signature the signature of this class. May be <tt>null</tt> if
+   *        the class is not a generic one, and does not extend or implement
+   *        generic classes or interfaces.
+   * @param superName the internal of name of the super class (see
+   *        {@link Type#getInternalName() getInternalName}). For interfaces,
+   *        the super class is {@link Object}. May be <tt>null</tt>, but
+   *        only for the {@link Object} class.
+   * @param interfaces the internal names of the class's interfaces (see
+   *        {@link Type#getInternalName() getInternalName}). May be
+   *        <tt>null</tt>.
+   */
+  public void visit(int version,
+                    int access,
+                    String name,
+                    String signature,
+                    String superName,
+                    String[] interfaces)
+  {
+    task.log("Analysing class '" +name +"'.", Project.MSG_VERBOSE);
+
+    currentPackage = bpInfo.addProvidedClass(name);
+    if (null!=superName) {
+      addReferencedType(Type.getObjectType(superName));
+    }
+    for(int i = 0; i < interfaces.length; i++) {
+      addReferencedType(Type.getObjectType(interfaces[i]));
+      if (BUNDLE_ACTIVATOR.equals(interfaces[i])) {
+        bpInfo.addProvidedActivatorClass(name);
+      }
+    }
+  }
+
+
+  /*
+   * Visits the source of the class.
+   *
+   * @param source the name of the source file from which the class was
+   *        compiled. May be <tt>null</tt>.
+   * @param debug additional debug information to compute the correspondence
+   *        between source and compiled elements of the class. May be
+   *        <tt>null</tt>.
+   */
+  public void visitSource(String source, String debug)
+  {
+  }
+
+
+  /*
+   * Visits the enclosing class of the class. This method must be called only
+   * if the class has an enclosing class.
+   *
+   * @param owner internal name of the enclosing class of the class.
+   * @param name the name of the method that contains the class, or
+   *        <tt>null</tt> if the class is not enclosed in a method of its
+   *        enclosing class.
+   * @param desc the descriptor of the method that contains the class, or
+   *        <tt>null</tt> if the class is not enclosed in a method of its
+   *        enclosing class.
+   */
+  public void visitOuterClass(String owner, String name, String desc)
+  {
+  }
+
+
+  /*
+   * Visits an annotation of the class.
+   *
+   * @param desc the class descriptor of the annotation class.
+   * @param visible <tt>true</tt> if the annotation is visible at runtime.
+   * @return a visitor to visit the annotation values, or <tt>null</tt> if
+   *         this visitor is not interested in visiting this annotation.
+   */
+  public AnnotationVisitor visitAnnotation(String desc, boolean visible)
+  {
+    return null;
+  }
+
+
+  /*
+   * Visits a non standard attribute of the class.
+   *
+   * @param attr an attribute.
+   */
+  public void visitAttribute(Attribute attr)
+  {
+  }
+
+
+  /*
+   * Visits information about an inner class. This inner class is not
+   * necessarily a member of the class being visited.
+   *
+   * @param name the internal name of an inner class (see
+   *        {@link Type#getInternalName() getInternalName}).
+   * @param outerName the internal name of the class to which the inner class
+   *        belongs (see {@link Type#getInternalName() getInternalName}). May
+   *        be <tt>null</tt> for not member classes.
+   * @param innerName the (simple) name of the inner class inside its
+   *        enclosing class. May be <tt>null</tt> for anonymous inner
+   *        classes.
+   * @param access the access flags of the inner class as originally declared
+   *        in the enclosing class.
+   */
+  public void visitInnerClass(String name,
+                              String outerName,
+                              String innerName,
+                              int access)
+  {
+  }
+
+
+  /*
+   * Visits a field of the class.
+   *
+   * @param access the field's access flags (see {@link Opcodes}). This
+   *        parameter also indicates if the field is synthetic and/or
+   *        deprecated.
+   * @param name the field's name.
+   * @param desc the field's descriptor (see {@link Type Type}).
+   * @param signature the field's signature. May be <tt>null</tt> if the
+   *        field's type does not use generic types.
+   * @param value the field's initial value. This parameter, which may be
+   *        <tt>null</tt> if the field does not have an initial value, must
+   *        be an {@link Integer}, a {@link Float}, a {@link Long}, a
+   *        {@link Double} or a {@link String} (for <tt>int</tt>,
+   *        <tt>float</tt>, <tt>long</tt> or <tt>String</tt> fields
+   *        respectively). <i>This parameter is only used for static fields</i>.
+   *        Its value is ignored for non static fields, which must be
+   *        initialized through bytecode instructions in constructors or
+   *        methods.
+   * @return a visitor to visit field annotations and attributes, or
+   *         <tt>null</tt> if this class visitor is not interested in
+   *         visiting these annotations and attributes.
+   */
+  public FieldVisitor visitField(int access,
+                                 String name,
+                                 String desc,
+                                 String signature,
+                                 Object value)
+  {
+    addReferencedType(Type.getType(desc));
+
+    return null;
+  }
+
+
+  /*
+   * Visits a method of the class. This method <i>must</i> return a new
+   * {@link MethodVisitor} instance (or <tt>null</tt>) each time it is
+   * called, i.e., it should not return a previously returned visitor.
+   *
+   * @param access the method's access flags (see {@link Opcodes}). This
+   *        parameter also indicates if the method is synthetic and/or
+   *        deprecated.
+   * @param name the method's name.
+   * @param desc the method's descriptor (see {@link Type Type}).
+   * @param signature the method's signature. May be <tt>null</tt> if the
+   *        method parameters, return type and exceptions do not use generic
+   *        types.
+   * @param exceptions the internal names of the method's exception classes
+   *        (see {@link Type#getInternalName() getInternalName}). May be
+   *        <tt>null</tt>.
+   * @return an object to visit the byte code of the method, or <tt>null</tt>
+   *         if this class visitor is not interested in visiting the code of
+   *         this method.
+   */
+  public MethodVisitor visitMethod(int access,
+                                   String name,
+                                   String desc,
+                                   String signature,
+                                   String[] exceptions)
+  {
+    Type[] argTypes = Type.getArgumentTypes(desc);
+    for (int i=0; argTypes!=null && i<argTypes.length; i++) {
+      addReferencedType(argTypes[i]);
+    }
+    addReferencedType(Type.getReturnType(desc));
+
+
+    for (int i=0; exceptions!=null && i<exceptions.length; i++) {
+      bpInfo.addReferencedClass(currentPackage, exceptions[i]);
+    }
+
+    return new MethodAnalyserASM(this, name);
+  }
+
+
+  /*
+   * Visits the end of the class. This method, which is the last one to be
+   * called, is used to inform the visitor that all the fields and methods of
+   * the class have been visited.
+   */
+  public void visitEnd()
+  {
+  }
+
+}
diff --git a/.pc/50_asm_compatibility.patch/ant/src/org/knopflerfish/ant/taskdefs/bundle/MethodAnalyserASM.java b/.pc/50_asm_compatibility.patch/ant/src/org/knopflerfish/ant/taskdefs/bundle/MethodAnalyserASM.java
new file mode 100644
index 0000000..7f803ba
--- /dev/null
+++ b/.pc/50_asm_compatibility.patch/ant/src/org/knopflerfish/ant/taskdefs/bundle/MethodAnalyserASM.java
@@ -0,0 +1,479 @@
+/*
+ * Copyright (c) 2003-2009, KNOPFLERFISH project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the KNOPFLERFISH project nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.knopflerfish.ant.taskdefs.bundle;
+
+import org.apache.tools.ant.Project;
+import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.Attribute;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Type;
+
+
+/**
+ * Visitor implementation that populates a BundlePackagesInfo object
+ * with data about the method it visits.
+ */
+public class MethodAnalyserASM
+  implements MethodVisitor
+{
+
+  // The ClassAnalyserASM instance that this method analyzer is
+  // belonging to.
+  private final ClassAnalyserASM ca;
+
+  private final String methodName;
+
+  public MethodAnalyserASM(final ClassAnalyserASM ca, final String name)
+  {
+    this.ca     = ca;
+    this.methodName = name;
+  }
+
+  /*
+   * Visits the default value of this annotation interface method.
+   *
+   * @return a visitor to the visit the actual default value of this
+   *         annotation interface method, or <tt>null</tt> if this visitor
+   *         is not interested in visiting this default value. The 'name'
+   *         parameters passed to the methods of this annotation visitor are
+   *         ignored. Moreover, exactly one visit method must be called on this
+   *         annotation visitor, followed by visitEnd.
+   */
+  public AnnotationVisitor visitAnnotationDefault()
+  {
+    return null;
+  }
+
+  /*
+   * Visits an annotation of this method.
+   *
+   * @param desc the class descriptor of the annotation class.
+   * @param visible <tt>true</tt> if the annotation is visible at runtime.
+   * @return a visitor to visit the annotation values, or <tt>null</tt> if
+   *         this visitor is not interested in visiting this annotation.
+   */
+  public AnnotationVisitor visitAnnotation(String desc, boolean visible)
+  {
+    return null;
+  }
+
+  /*
+   * Visits an annotation of a parameter this method.
+   *
+   * @param parameter the parameter index.
+   * @param desc the class descriptor of the annotation class.
+   * @param visible <tt>true</tt> if the annotation is visible at runtime.
+   * @return a visitor to visit the annotation values, or <tt>null</tt> if
+   *         this visitor is not interested in visiting this annotation.
+   */
+  public AnnotationVisitor visitParameterAnnotation(
+                                             int parameter,
+                                             String desc,
+                                             boolean visible)
+  {
+    return null;
+  }
+
+  /*
+   * Visits a non standard attribute of this method.
+   *
+   * @param attr an attribute.
+   */
+  public void visitAttribute(Attribute attr)
+  {
+  }
+
+  /*
+   * Starts the visit of the method's code, if any (i.e. non abstract method).
+   */
+  public void visitCode()
+  {
+    ca.task.log("  method '" +methodName +"'.", Project.MSG_DEBUG);
+  }
+
+  /*
+   * Visits the current state of the local variables and operand stack
+   * elements. This method must(*) be called <i>just before</i> any
+   * instruction <b>i</b> that follows an unconditional branch instruction
+   * such as GOTO or THROW, that is the target of a jump instruction, or that
+   * starts an exception handler block. The visited types must describe the
+   * values of the local variables and of the operand stack elements <i>just
+   * before</i> <b>i</b> is executed. <br> <br> (*) this is mandatory only
+   * for classes whose version is greater than or equal to
+   * {@link Opcodes#V1_6 V1_6}. <br> <br> Packed frames are basically
+   * "deltas" from the state of the previous frame (very first frame is
+   * implicitly defined by the method's parameters and access flags): <ul>
+   * <li>{@link Opcodes#F_SAME} representing frame with exactly the same
+   * locals as the previous frame and with the empty stack.</li> <li>{@link Opcodes#F_SAME1}
+   * representing frame with exactly the same locals as the previous frame and
+   * with single value on the stack (<code>nStack</code> is 1 and
+   * <code>stack[0]</code> contains value for the type of the stack item).</li>
+   * <li>{@link Opcodes#F_APPEND} representing frame with current locals are
+   * the same as the locals in the previous frame, except that additional
+   * locals are defined (<code>nLocal</code> is 1, 2 or 3 and
+   * <code>local</code> elements contains values representing added types).</li>
+   * <li>{@link Opcodes#F_CHOP} representing frame with current locals are
+   * the same as the locals in the previous frame, except that the last 1-3
+   * locals are absent and with the empty stack (<code>nLocals</code> is 1,
+   * 2 or 3). </li> <li>{@link Opcodes#F_FULL} representing complete frame
+   * data.</li> </li> </ul>
+   *
+   * @param type the type of this stack map frame. Must be
+   *        {@link Opcodes#F_NEW} for expanded frames, or
+   *        {@link Opcodes#F_FULL}, {@link Opcodes#F_APPEND},
+   *        {@link Opcodes#F_CHOP}, {@link Opcodes#F_SAME} or
+   *        {@link Opcodes#F_APPEND}, {@link Opcodes#F_SAME1} for compressed
+   *        frames.
+   * @param nLocal the number of local variables in the visited frame.
+   * @param local the local variable types in this frame. This array must not
+   *        be modified. Primitive types are represented by
+   *        {@link Opcodes#TOP}, {@link Opcodes#INTEGER},
+   *        {@link Opcodes#FLOAT}, {@link Opcodes#LONG},
+   *        {@link Opcodes#DOUBLE},{@link Opcodes#NULL} or
+   *        {@link Opcodes#UNINITIALIZED_THIS} (long and double are
+   *        represented by a single element). Reference types are represented
+   *        by String objects (representing internal names), and uninitialized
+   *        types by Label objects (this label designates the NEW instruction
+   *        that created this uninitialized value).
+   * @param nStack the number of operand stack elements in the visited frame.
+   * @param stack the operand stack types in this frame. This array must not
+   *        be modified. Its content has the same format as the "local" array.
+   */
+  public void visitFrame(
+                  int type,
+                  int nLocal,
+                  Object[] local,
+                  int nStack,
+                  Object[] stack)
+  {
+  }
+
+  // -------------------------------------------------------------------------
+  // Normal instructions
+  // -------------------------------------------------------------------------
+
+  /*
+   * Visits a zero operand instruction.
+   *
+   * @param opcode the opcode of the instruction to be visited. This opcode is
+   *        either NOP, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2,
+   *        ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1, FCONST_0,
+   *        FCONST_1, FCONST_2, DCONST_0, DCONST_1, IALOAD, LALOAD, FALOAD,
+   *        DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IASTORE, LASTORE, FASTORE,
+   *        DASTORE, AASTORE, BASTORE, CASTORE, SASTORE, POP, POP2, DUP,
+   *        DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP, IADD, LADD, FADD,
+   *        DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV,
+   *        FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG, FNEG, DNEG, ISHL,
+   *        LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR,
+   *        I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B,
+   *        I2C, I2S, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IRETURN, LRETURN,
+   *        FRETURN, DRETURN, ARETURN, RETURN, ARRAYLENGTH, ATHROW,
+   *        MONITORENTER, or MONITOREXIT.
+   */
+  public void visitInsn(int opcode)
+  {
+  }
+
+  /*
+   * Visits an instruction with a single int operand.
+   *
+   * @param opcode the opcode of the instruction to be visited. This opcode is
+   *        either BIPUSH, SIPUSH or NEWARRAY.
+   * @param operand the operand of the instruction to be visited.<br> When
+   *        opcode is BIPUSH, operand value should be between Byte.MIN_VALUE
+   *        and Byte.MAX_VALUE.<br> When opcode is SIPUSH, operand value
+   *        should be between Short.MIN_VALUE and Short.MAX_VALUE.<br> When
+   *        opcode is NEWARRAY, operand value should be one of
+   *        {@link Opcodes#T_BOOLEAN}, {@link Opcodes#T_CHAR},
+   *        {@link Opcodes#T_FLOAT}, {@link Opcodes#T_DOUBLE},
+   *        {@link Opcodes#T_BYTE}, {@link Opcodes#T_SHORT},
+   *        {@link Opcodes#T_INT} or {@link Opcodes#T_LONG}.
+   */
+  public void visitIntInsn(int opcode, int operand)
+  {
+  }
+
+  /*
+   * Visits a local variable instruction. A local variable instruction is an
+   * instruction that loads or stores the value of a local variable.
+   *
+   * @param opcode the opcode of the local variable instruction to be visited.
+   *        This opcode is either ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE,
+   *        LSTORE, FSTORE, DSTORE, ASTORE or RET.
+   * @param var the operand of the instruction to be visited. This operand is
+   *        the index of a local variable.
+   */
+  public void visitVarInsn(int opcode, int var)
+  {
+  }
+
+  /*
+   * Visits a type instruction. A type instruction is an instruction that
+   * takes the internal name of a class as parameter.
+   *
+   * @param opcode the opcode of the type instruction to be visited. This
+   *        opcode is either NEW, ANEWARRAY, CHECKCAST or INSTANCEOF.
+   * @param type the operand of the instruction to be visited. This operand
+   *        must be the internal name of an object or array class (see {@link
+   *        Type#getInternalName() getInternalName}).
+   */
+  public void visitTypeInsn(int opcode, String type)
+  {
+    ca.addReferencedType(Type.getObjectType(type));
+  }
+
+  /*
+   * Visits a field instruction. A field instruction is an instruction that
+   * loads or stores the value of a field of an object.
+   *
+   * @param opcode the opcode of the type instruction to be visited. This
+   *        opcode is either GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD.
+   * @param owner the internal name of the field's owner class (see {@link
+   *        Type#getInternalName() getInternalName}).
+   * @param name the field's name.
+   * @param desc the field's descriptor (see {@link Type Type}).
+   */
+  public void visitFieldInsn(int opcode, String owner, String name, String desc)
+  {
+    ca.addReferencedType(Type.getObjectType(owner));
+    ca.addReferencedType(Type.getType(desc));
+  }
+
+  /*
+   * Visits a method instruction. A method instruction is an instruction that
+   * invokes a method.
+   *
+   * @param opcode the opcode of the type instruction to be visited. This
+   *        opcode is either INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC,
+   *        INVOKEINTERFACE or INVOKEDYNAMIC.
+   * @param owner the internal name of the method's owner class (see {@link
+   *        Type#getInternalName() getInternalName})
+   *        or {@link org.objectweb.asm.Opcodes#INVOKEDYNAMIC_OWNER}.
+   * @param name the method's name.
+   * @param desc the method's descriptor (see {@link Type Type}).
+   */
+  public void visitMethodInsn(int opcode,
+                              String owner,
+                              String name,
+                              String desc)
+  {
+    ca.addReferencedType(Type.getObjectType(owner));
+
+    Type[] argTypes = Type.getArgumentTypes(desc);
+    for (int i=0; argTypes!=null && i<argTypes.length; i++) {
+      ca.addReferencedType(argTypes[i]);
+    }
+    ca.addReferencedType(Type.getReturnType(desc));
+  }
+
+  /*
+   * Visits a jump instruction. A jump instruction is an instruction that may
+   * jump to another instruction.
+   *
+   * @param opcode the opcode of the type instruction to be visited. This
+   *        opcode is either IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ,
+   *        IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ,
+   *        IF_ACMPNE, GOTO, JSR, IFNULL or IFNONNULL.
+   * @param label the operand of the instruction to be visited. This operand
+   *        is a label that designates the instruction to which the jump
+   *        instruction may jump.
+   */
+  public void visitJumpInsn(int opcode, Label label)
+  {
+  }
+
+  /*
+   * Visits a label. A label designates the instruction that will be visited
+   * just after it.
+   *
+   * @param label a {@link Label Label} object.
+   */
+  public void visitLabel(Label label)
+  {
+  }
+
+  // -------------------------------------------------------------------------
+  // Special instructions
+  // -------------------------------------------------------------------------
+
+  /*
+   * Visits a LDC instruction.
+   *
+   * @param cst the constant to be loaded on the stack. This parameter must be
+   *        a non null {@link Integer}, a {@link Float}, a {@link Long}, a
+   *        {@link Double} a {@link String} (or a {@link Type} for
+   *        <tt>.class</tt> constants, for classes whose version is 49.0 or
+   *        more).
+   */
+  public void visitLdcInsn(Object cst)
+  {
+  }
+
+  /*
+   * Visits an IINC instruction.
+   *
+   * @param var index of the local variable to be incremented.
+   * @param increment amount to increment the local variable by.
+   */
+  public void visitIincInsn(int var, int increment)
+  {
+  }
+
+  /*
+   * Visits a TABLESWITCH instruction.
+   *
+   * @param min the minimum key value.
+   * @param max the maximum key value.
+   * @param dflt beginning of the default handler block.
+   * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is
+   *        the beginning of the handler block for the <tt>min + i</tt> key.
+   */
+  public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels)
+  {
+  }
+
+  /*
+   * Visits a LOOKUPSWITCH instruction.
+   *
+   * @param dflt beginning of the default handler block.
+   * @param keys the values of the keys.
+   * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is
+   *        the beginning of the handler block for the <tt>keys[i]</tt> key.
+   */
+  public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
+  {
+  }
+
+  /*
+   * Visits a MULTIANEWARRAY instruction.
+   *
+   * @param desc an array type descriptor (see {@link Type Type}).
+   * @param dims number of dimensions of the array to allocate.
+   */
+  public void visitMultiANewArrayInsn(String desc, int dims)
+  {
+    ca.addReferencedType(Type.getType(desc));
+  }
+
+  // -------------------------------------------------------------------------
+  // Exceptions table entries, debug information, max stack and max locals
+  // -------------------------------------------------------------------------
+
+  /*
+   * Visits a try catch block.
+   *
+   * @param start beginning of the exception handler's scope (inclusive).
+   * @param end end of the exception handler's scope (exclusive).
+   * @param handler beginning of the exception handler's code.
+   * @param type internal name of the type of exceptions handled by the
+   *        handler, or <tt>null</tt> to catch any exceptions (for "finally"
+   *        blocks).
+   * @throws IllegalArgumentException if one of the labels has already been
+   *         visited by this visitor (by the {@link #visitLabel visitLabel}
+   *         method).
+   */
+  public void visitTryCatchBlock(Label start,
+                                 Label end,
+                                 Label handler,
+                                 String type)
+  {
+    if (null!=type) {
+      ca.addReferencedType(Type.getObjectType(type));
+    }
+  }
+
+  /*
+   * Visits a local variable declaration.
+   *
+   * @param name the name of a local variable.
+   * @param desc the type descriptor of this local variable.
+   * @param signature the type signature of this local variable. May be
+   *        <tt>null</tt> if the local variable type does not use generic
+   *        types.
+   * @param start the first instruction corresponding to the scope of this
+   *        local variable (inclusive).
+   * @param end the last instruction corresponding to the scope of this local
+   *        variable (exclusive).
+   * @param index the local variable's index.
+   * @throws IllegalArgumentException if one of the labels has not already
+   *         been visited by this visitor (by the
+   *         {@link #visitLabel visitLabel} method).
+   */
+  public void visitLocalVariable(
+                          String name,
+                          String desc,
+                          String signature,
+                          Label start,
+                          Label end,
+                          int index)
+  {
+    ca.addReferencedType(Type.getType(desc));
+  }
+
+  /*
+   * Visits a line number declaration.
+   *
+   * @param line a line number. This number refers to the source file from
+   *        which the class was compiled.
+   * @param start the first instruction corresponding to this line number.
+   * @throws IllegalArgumentException if <tt>start</tt> has not already been
+   *         visited by this visitor (by the {@link #visitLabel visitLabel}
+   *         method).
+   */
+  public void visitLineNumber(int line, Label start)
+  {
+  }
+
+  /*
+   * Visits the maximum stack size and the maximum number of local variables
+   * of the method.
+   *
+   * @param maxStack maximum stack size of the method.
+   * @param maxLocals maximum number of local variables for the method.
+   */
+  public void visitMaxs(int maxStack, int maxLocals)
+  {
+  }
+
+  /*
+   * Visits the end of the method. This method, which is the last one to be
+   * called, is used to inform the visitor that all the annotations and
+   * attributes of the method have been visited.
+   */
+  public void visitEnd()
+  {
+  }
+
+
+}
diff --git a/.pc/applied-patches b/.pc/applied-patches
new file mode 100644
index 0000000..2678ad2
--- /dev/null
+++ b/.pc/applied-patches
@@ -0,0 +1,3 @@
+10_javac_encoding_source_target_level.patch
+40_ignore_android.patch
+50_asm_compatibility.patch
diff --git a/ant/src/org/knopflerfish/ant/taskdefs/bundle/ClassAnalyserASM.java b/ant/src/org/knopflerfish/ant/taskdefs/bundle/ClassAnalyserASM.java
index 40e8e38..000c7a7 100644
--- a/ant/src/org/knopflerfish/ant/taskdefs/bundle/ClassAnalyserASM.java
+++ b/ant/src/org/knopflerfish/ant/taskdefs/bundle/ClassAnalyserASM.java
@@ -54,7 +54,7 @@ import org.objectweb.asm.Attribute;
  * with data about the given class.
  */
 public class ClassAnalyserASM
-  implements ClassVisitor
+  extends ClassVisitor
 {
 
   /**
@@ -79,6 +79,7 @@ public class ClassAnalyserASM
   public ClassAnalyserASM(final BundlePackagesInfo bpInfo,
                           final Task task)
   {
+    super(org.objectweb.asm.Opcodes.ASM4);
     this.bpInfo = bpInfo;
     this.task   = task;
   }
diff --git a/ant/src/org/knopflerfish/ant/taskdefs/bundle/MethodAnalyserASM.java b/ant/src/org/knopflerfish/ant/taskdefs/bundle/MethodAnalyserASM.java
index 7f803ba..04edff4 100644
--- a/ant/src/org/knopflerfish/ant/taskdefs/bundle/MethodAnalyserASM.java
+++ b/ant/src/org/knopflerfish/ant/taskdefs/bundle/MethodAnalyserASM.java
@@ -45,7 +45,7 @@ import org.objectweb.asm.Type;
  * with data about the method it visits.
  */
 public class MethodAnalyserASM
-  implements MethodVisitor
+  extends MethodVisitor
 {
 
   // The ClassAnalyserASM instance that this method analyzer is
@@ -56,6 +56,7 @@ public class MethodAnalyserASM
 
   public MethodAnalyserASM(final ClassAnalyserASM ca, final String name)
   {
+    super(org.objectweb.asm.Opcodes.ASM4);
     this.ca     = ca;
     this.methodName = name;
   }
diff --git a/debian/changelog b/debian/changelog
index ec30de9..866b7c4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+knopflerfish-osgi (6.1.1-3.1) unstable; urgency=medium
+
+  * Non maintainer upload by the Reproducible Builds team.
+  * No source change upload to rebuild on buildd with .buildinfo files.
+
+ -- Holger Levsen <holger@debian.org>  Mon, 28 Dec 2020 11:53:15 +0100
+
 knopflerfish-osgi (6.1.1-3) unstable; urgency=medium
 
   * Build with source=1.7 and target=1.7 (Closes: #895885)
diff --git a/osgi/framework/build.xml b/osgi/framework/build.xml
index 5165c3a..8f8aa7d 100644
--- a/osgi/framework/build.xml
+++ b/osgi/framework/build.xml
@@ -38,7 +38,7 @@
   <property name="jarfile_version"
             location="${jars.dir}/${ant.project.name}-${fw.impl.version}.jar"/>
 
-  <import file="${ant.dir}/android.xml"/>
+  <!--<import file="${ant.dir}/android.xml"/>-->
 
   <property name="proguard.libraryjar" value="${java.home}/lib/rt.jar"/>
 
@@ -88,10 +88,14 @@
            includes          = "**/*.java"
            excludes          = "${androidSrcs},**/package-info.java"
            classpathref      = "compile.path"
+	   encoding          = "UTF-8"
+	   source            = "1.7"
+           target            = "1.7"
            >
       <compilerarg value="-Xlint:-options"/>
     </javac>
     <!-- Android parts (uses dalvik.*) -->
+    <!--
     <javac destdir           = "${classout}"
            srcdir            = "${src.dir}"
            debug             = "on"
@@ -106,6 +110,7 @@
            >
       <compilerarg value="-Xlint:-options"/>
     </javac>
+    -->
   </target>
 
   <target name="compile_compact"

Debdiff

File lists identical (after any substitutions)

No differences were encountered in the control files

Run locally

More details

Full run details