[fedora-java] Patch to find-and-nativify
Andrew Haley
aph at redhat.com
Mon Apr 11 09:18:30 UTC 2005
Robin Green writes:
> This proposed patch makes 4 changes to the find-and-nativify in
> java-1.4.2-gcj-compat-1.4.2.0-40jpp_14rh.
>
> - Generates a database as it goes, rather than forcing the spec file
> writer to write a similar script to build the db.
>
> - Qualifies each lib with the package name, to avoid name collisions in
> Provides. (Which suggests the thought that since package names _must_ be
> unique by design in rpm - isn't it then sufficient to generate libs in
> %{_libdir}/%{name} instead of as %{_libdir}/%{name}/full/path/to/jar ?)
>
> - Ignores jars which are symlinks (they might not even be in the package,
> and if they are, you will end up compiling them more than once.)
>
> - You can set the SKIPTAR environment variable to skip the tar building,
> for more efficient rpm builds.
>
> I have a handy utility script to post next which assumes some of these
> changes, so I will wait to see what happens to this patch first.
>
> --
> Robin
>
>
> --- find-and-nativify.old 2005-04-10 22:28:23.000000000 +0100
> +++ find-and-nativify 2005-04-11 00:02:59.000000000 +0100
> @@ -12,20 +12,33 @@
> (ex. eclipse)
> BUILD_OPTIONS - a list of gcj options to pass to nativify
> (outside of -findirect-dispatch, -shared, and -Wl,-Bsymbolic)
> +
> + By default, the generated database will assume libraries will go in /usr/lib.
> + To change this, set LIBDIR to the appropriate directory.
> +
> + Set SKIPTAR=y to skip tar file creation.
> "}
>
> name=$1
> build_options=$2
>
> -for jarfile in $(find -name \*.jar); do
> +# There's this great concept - it's called databases with no fixed size limits!
They don't have fixed size limits.
> +# For now, kludge the fixed size limit at 80000
> +gcj-dbtool -n $name.db 80000
> +
> +# Use type -f to ignore symlinks
> +for jarfile in $(find -type f -name \*.jar); do
> # This is ugly. What we want is to be able to natively-compile all the
> # jars within an RPM build tree as well as from an arbitrary location
> # in the filesystem. Patches welcome :)
> so_dir="./$name/$(dirname $jarfile | \
> sed 's:^\.\+/::')";
> mkdir -p $so_dir;
> - dest_so_name=$so_dir/lib`basename $jarfile`.so
> + dest_so_name=$so_dir/lib$name-`basename $jarfile`.so
> nativify $jarfile $dest_so_name "$build_options"
> + gcj-dbtool -f $name.db $jarfile ${LIBDIR:-/usr/lib}/$dest_so_name
It's a lot quicker to build individual dbs and mrget them at the end.
Andrew.
More information about the fedora-devel-java-list
mailing list