diff --git a/.cvsignore b/.cvsignore
index e69de29..2194324 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -0,0 +1 @@
+jna-3.0.4.svn729.tar.bz2
diff --git a/import.log b/import.log
new file mode 100644
index 0000000..658db96
--- /dev/null
+++ b/import.log
@@ -0,0 +1 @@
+jna-3_0_4-10_svn729_fc10:EL-5:jna-3.0.4-10.svn729.fc10.src.rpm:1226331400
diff --git a/jna-3.0.2-loadlibrary.patch b/jna-3.0.2-loadlibrary.patch
new file mode 100644
index 0000000..d7db857
--- /dev/null
+++ b/jna-3.0.2-loadlibrary.patch
@@ -0,0 +1,11 @@
+--- jna-3.0.2.default/src/com/sun/jna/Native.java 2008-02-11 16:04:47.000000000 -0500
++++ jna-3.0.2/src/com/sun/jna/Native.java 2008-04-03 23:30:03.000000000 -0400
+@@ -85,7 +85,7 @@
+ public static final int WCHAR_SIZE;
+ static {
+ try {
+- System.loadLibrary("jnidispatch");
++ System.load("@JNIPATH@/" + System.mapLibraryName("jnidispatch"));
+ }
+ catch(UnsatisfiedLinkError e) {
+ loadNativeLibrary();
diff --git a/jna-3.0.4-nativemapped-array.patch b/jna-3.0.4-nativemapped-array.patch
new file mode 100644
index 0000000..53d2e94
--- /dev/null
+++ b/jna-3.0.4-nativemapped-array.patch
@@ -0,0 +1,73 @@
+diff -ur jna-3.0.4-svn729/src/com/sun/jna/Function.java jna-3.0.4-svn729.orig/src/com/sun/jna/Function.java
+--- jna-3.0.4-svn729/src/com/sun/jna/Function.java 2008-09-12 10:05:07.000000000 -0400
++++ jna-3.0.4-svn729.orig/src/com/sun/jna/Function.java 2008-10-01 23:23:38.000000000 -0400
+@@ -12,6 +12,7 @@
+
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
++import java.lang.reflect.Array;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Map;
+@@ -351,16 +352,41 @@
+ }
+ return result;
+ }
++
++ private Class primitiveFromBoxed(Class boxedClass) {
++ if (boxedClass.isPrimitive())
++ return boxedClass;
++ if (boxedClass == Boolean.class)
++ return Boolean.TYPE;
++ if (boxedClass == Byte.class)
++ return Byte.TYPE;
++ if (boxedClass == Character.class)
++ return Character.TYPE;
++ if (boxedClass == Short.class)
++ return Short.TYPE;
++ if (boxedClass == Integer.class)
++ return Integer.TYPE;
++ if (boxedClass == Long.class)
++ return Long.TYPE;
++ if (boxedClass == Float.class)
++ return Float.TYPE;
++ if (boxedClass == Double.class)
++ return Double.TYPE;
++ return boxedClass;
++ }
+
+ private Object convertArgument(Object[] args, int index, Method invokingMethod, TypeMapper mapper) {
+ Object arg = args[index];
+ if (arg != null) {
+ Class type = arg.getClass();
+ ToNativeConverter converter = null;
++ boolean isArray = false;
+ if (NativeMapped.class.isAssignableFrom(type)) {
+ converter = NativeMappedConverter.getInstance(type);
+- }
+- else if (mapper != null) {
++ } else if (NativeMapped[].class.isAssignableFrom(type)) {
++ isArray = true;
++ converter = NativeMappedConverter.getInstance(type.getComponentType());
++ } else if (mapper != null) {
+ converter = mapper.getToNativeConverter(type);
+ }
+ if (converter != null) {
+@@ -371,7 +397,15 @@
+ else {
+ context = new FunctionParameterContext(this, args, index);
+ }
+- arg = converter.toNative(arg, context);
++ if (isArray) {
++ NativeMapped[] nativeArg = (NativeMapped[]) arg;
++ /* Reassign arg here to a new array */
++ arg = Array.newInstance(primitiveFromBoxed(converter.nativeType()), nativeArg.length);
++ for (int i = 0; i < nativeArg.length; i++)
++ Array.set(arg, i, converter.toNative(nativeArg[i], context));
++ } else {
++ arg = converter.toNative(arg, context);
++ }
+ }
+ }
+ if (arg == null || isPrimitiveArray(arg.getClass())) {
+Only in jna-3.0.4-svn729.orig/src/com/sun/jna: Function.java~
diff --git a/jna-stringarray-return.patch b/jna-stringarray-return.patch
new file mode 100644
index 0000000..c806e79
--- /dev/null
+++ b/jna-stringarray-return.patch
@@ -0,0 +1,26 @@
+diff -ur jna-3.0.4-svn729/src/com/sun/jna/Function.java jna-3.0.4-svn729.orig/src/com/sun/jna/Function.java
+--- jna-3.0.4-svn729/src/com/sun/jna/Function.java 2008-10-14 19:47:44.000000000 -0400
++++ jna-3.0.4-svn729.orig/src/com/sun/jna/Function.java 2008-10-14 19:48:00.000000000 -0400
+@@ -314,6 +314,20 @@
+ String s = invokeString(callingConvention, args, true);
+ result = s != null ? new WString(s) : null;
+ }
++ else if (returnType == String[].class) {
++ Pointer tmp = invokePointer(callingConvention, args);
++ if (tmp != null)
++ result = tmp.getStringArray(0);
++ else
++ result = null;
++ }
++ else if (returnType == WString[].class) {
++ Pointer tmp = invokePointer(callingConvention, args);
++ if (tmp != null)
++ result = tmp.getStringArray(0, true);
++ else
++ result = null;
++ }
+ else if (Pointer.class.isAssignableFrom(returnType)) {
+ result = invokePointer(callingConvention, args);
+ }
+Only in jna-3.0.4-svn729.orig/src/com/sun/jna: Function.java~
+Only in jna-3.0.4-svn729/src/com/sun/jna: Function.java.nativemapped-array
diff --git a/jna-tests-headless.patch b/jna-tests-headless.patch
new file mode 100644
index 0000000..994170b
--- /dev/null
+++ b/jna-tests-headless.patch
@@ -0,0 +1,10 @@
+--- jna-3.0.4-svn700/build.xml 2008-10-01 12:57:20.000000000 -0400
++++ jna-3.0.4-svn700.orig/build.xml 2008-10-01 12:57:16.000000000 -0400
+@@ -427,6 +427,7 @@
+
+
+
++
+
+
+
diff --git a/jna.spec b/jna.spec
new file mode 100644
index 0000000..38ed5d8
--- /dev/null
+++ b/jna.spec
@@ -0,0 +1,169 @@
+Name: jna
+Version: 3.0.4
+Release: 10.svn729%{?dist}
+Summary: Pure Java access to native libraries
+
+Group: Development/Libraries
+License: LGPLv2+
+URL: https://jna.dev.java.net/
+# The source for this package was pulled from upstream's vcs. Use the
+# following commands to generate the tarball:
+# svn export https://jna.dev.java.net/svn/jna/tags/%{version}/jnalib/ --username guest jna-%{version}
+# tar -cjf jna-%{version}.tar.bz2 jna-%{version}
+Source0: %{name}-%{version}.svn729.tar.bz2
+# This patch is Fedora-specific for now until we get the huge
+# JNI library location mess sorted upstream
+Patch1: jna-3.0.2-loadlibrary.patch
+# The X11 tests currently segfault; overall I think the X11 JNA stuff is just a
+# Really Bad Idea, for relying on AWT internals, using the X11 API at all,
+# and using a complex API like X11 through JNA just increases the potential
+# for problems.
+Patch2: jna-tests-headless.patch
+# https://jna.dev.java.net/issues/show_bug.cgi?id=90
+Patch3: jna-3.0.4-nativemapped-array.patch
+# https://jna.dev.java.net/issues/show_bug.cgi?id=XXX
+Patch4: jna-stringarray-return.patch
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+BuildRequires: java-devel >= 1.6 ant jpackage-utils ant-nodeps
+BuildRequires: libX11-devel libXt-devel libffi-devel
+# We manually require libffi because find-requires doesn't work
+# inside jars.
+Requires: java >= 1:1.6.0 jpackage-utils
+
+%description
+JNA provides Java programs easy access to native shared libraries
+(DLLs on Windows) without writing anything but Java code. JNA's
+design aims to provide native access in a natural way with a
+minimum of effort. No boilerplate or generated code is required.
+While some attention is paid to performance, correctness and ease
+of use take priority.
+
+
+%package javadoc
+Summary: Javadocs for %{name}
+Group: Documentation
+Requires: %{name} = %{version}-%{release}
+
+
+%description javadoc
+This package contains the javadocs for %{name}.
+
+
+%prep
+%setup -q -n %{name}-%{version}-svn729
+sed -e 's|@JNIPATH@|%{_libdir}/%{name}|' %{PATCH1} | patch -p1
+%patch2 -p1 -b .tests-headless
+%patch3 -p1 -b .nativemapped-array
+%patch4 -p1 -b .stringarray-return
+
+# all java binaries must be removed from the sources
+find . -name '*.jar' -exec rm -f '{}' \;
+find . -name '*.class' -exec rm -f '{}' \;
+
+# remove internal copy of libffi
+rm -rf native/libffi
+
+# remove random unused zips
+rm dist/{src,doc}.zip
+
+# clean LICENSE.txt
+sed -i 's/\r//' LICENSE.txt
+chmod 0644 LICENSE.txt
+
+
+%build
+# We pass -Ddynlink.native which comes from our patch because
+# upstream doesn't want to default to dynamic linking.
+ant jar -Dcflags_extra.native="%{optflags}" -Ddynlink.native=true -Dnomixedjar.native=true
+ant javadoc
+
+
+%install
+rm -rf %{buildroot}
+
+# jars
+install -D -m 644 build*/%{name}.jar %{buildroot}%{_javadir}/%{name}-%{version}.jar
+(cd %{buildroot}%{_javadir}/; for jar in `ls *-%{version}.jar`; do ln -s $jar `echo $jar | sed -e 's/-%{version}//'`; done)
+# NOTE: JNA has highly custom code to look for native jars in this
+# directory. Since this roughly matches the jpackage guidelines,
+# we'll leave it unchanged.
+install -d -m 755 %{buildroot}%{_libdir}/%{name}
+install -m 755 build*/native/libjnidispatch*.so %{buildroot}%{_libdir}/%{name}/
+
+# javadocs
+install -p -d -m 755 %{buildroot}%{_javadocdir}/%{name}-%{version}
+cp -a doc/javadoc/* %{buildroot}%{_javadocdir}/%{name}-%{version}
+
+
+%clean
+rm -rf %{buildroot}
+
+
+%files
+%defattr(-,root,root,-)
+%doc LICENSE.txt
+%{_libdir}/%{name}
+%{_javadir}/*.jar
+
+%files javadoc
+%defattr(-,root,root,-)
+%{_javadocdir}/%{name}-%{version}
+
+
+%changelog
+* Tue Oct 14 2008 Colin Walters - 3.0.4-10.svn729
+- Add patch to support String[] returns
+
+* Wed Oct 01 2008 Colin Walters - 3.0.4-9.svn729
+- Add new patch to support NativeMapped[] which I want
+
+* Wed Oct 01 2008 Colin Walters - 3.0.4-8.svn729
+- Update to svn r729
+- drop upstreamed typemapper patch
+
+* Tue Sep 18 2008 Colin Walters - 3.0.4-7.svn700
+- Add patch to make typemapper always accessible
+- Add patch to skip cracktastic X11 test bits which currently fail
+
+* Tue Sep 09 2008 Colin Walters - 3.0.4-5.svn700
+- Update to upstream SVN r700; drop all now upstreamed patches
+
+* Sat Sep 06 2008 Colin Walters - 3.0.4-3.svn630
+- A few more patches for JGIR
+
+* Thu Sep 04 2008 Colin Walters - 3.0.4-2.svn630
+- Add two (sent upstream) patches that I need for JGIR
+
+* Thu Jul 31 2008 Colin Walters - 3.0.4-1.svn630
+- New upstream version, drop upstreamed patch parts
+- New patch jna-3.0.4-nomixedjar.patch which ensures that we don't
+ include the .so in the .jar
+
+* Fri Apr 04 2008 Colin Walters - 3.0.2-7
+- Add patch to use JPackage-compatible JNI library path
+- Do build debuginfo package
+- Refactor build patch greatly so it's hopefully upstreamable
+- Install .so directly to JNI directory, rather than inside jar
+- Clean up Requires/BuildRequires (thanks Mamoru Tasaka)
+
+* Sun Mar 30 2008 Conrad Meyer - 3.0.2-6
+- -javadocs should be -javadoc.
+- %%files section cleaned a bit.
+
+* Mon Mar 17 2008 Conrad Meyer - 3.0.2-5
+- -javadocs package should be in group "Documentation".
+
+* Mon Mar 17 2008 Conrad Meyer - 3.0.2-4
+- License should be LGPLv2+, not GPLv2+.
+- Several minor fixes.
+- Fix Requires in javadoc package.
+
+* Sun Mar 16 2008 Conrad Meyer - 3.0.2-3
+- Don't use internal libffi.
+
+* Thu Mar 6 2008 Conrad Meyer - 3.0.2-2
+- Don't pull in jars from the web.
+
+* Mon Mar 3 2008 Conrad Meyer - 3.0.2-1
+- Initial package.
diff --git a/sources b/sources
index e69de29..5bf10cd 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+789cf82e63d0cbc11198d3b2015d3490 jna-3.0.4.svn729.tar.bz2