This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[patch] Create sdk style directory on install
- From: Joshua Sumali <jsumali at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Cc: Thomas Fitzsimmons <fitzsim at redhat dot com>
- Date: Thu, 12 Jun 2008 16:56:14 -0400
- Subject: [patch] Create sdk style directory on install
Hi,
Attached is a patch to create a sdk style directory when
--enable-java-home is passed to configure. The patch is basically a
merge of java-gcj-compat into libgcj.
To have this work, at the minimum, pass the following to ./configure:
--enable-java-home --with-arch-directory=(your arch).
--with-arch-directory specifies what to use for the
java-1.5.0-gcj-1.5.0.0/jre/lib/<arch> directory (e.g. I use i386).
I've only included the diff to configure.ac and Makefile.am since
including the configure and Makefile.in makes the patch quite big, so be
sure to autoconf && automake before trying this patch. I can upload the
renerated files somewhere if it's absolutely needed, though.
Josh
Index: ChangeLog
===================================================================
--- ChangeLog (revision 136724)
+++ ChangeLog (working copy)
@@ -1,3 +1,19 @@
+2008-06-12 Joshua Sumali <jsumali@redhat.com>
+
+ * configure.ac (java-home): new AC_ARG_ENABLE.
+ (CREATE_JAVA_HOME): new AM_CONDITIONAL.
+ (gcc-suffix): new AC_ARG_WITH.
+ (arch-directory): Likewise.
+ (os-directory): Likewise.
+ (origin-name): Likewise.
+ (arch-suffix): Likewise.
+ (jvm-root-dir): Likewise.
+ (jvm-jar-dir): Likewise.
+ * Makefile.am (install-data-local): Install an sdk style directory if
+ --enable-java-home is passed to configure.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
2008-06-07 Joseph Myers <joseph@codesourcery.com>
* configure.host (strongarm*-elf, xscale*-elf): Remove.
Index: Makefile.am
===================================================================
--- Makefile.am (revision 136724)
+++ Makefile.am (working copy)
@@ -85,7 +85,7 @@
## It is convenient to actually build and install the default database
## when gcj-dbtool is available.
dbexec_DATA = $(db_name)
-endif
+endif
bin_SCRIPTS = addr2name.awk
@@ -528,8 +528,134 @@
$(INSTALL_DATA) $(srcdir)/'gnu/java/nio/PipeImpl$$SinkChannelImpl.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/nio/
$(INSTALL_DATA) $(srcdir)/'gnu/java/nio/PipeImpl$$SourceChannelImpl.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/nio/
## Don't install java/nio/DirectByteBufferImpl$$ReadWrite.h here. It's for internal use only.
+if CREATE_JAVA_HOME
+## Create sdk style directories
+ $(mkinstalldirs) $(DESTDIR)$(JRE_BIN_DIR)
+ $(mkinstalldirs) $(DESTDIR)$(SDK_BIN_DIR)
+ $(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)
+ $(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)
+ $(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)
+ $(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)/$(OS)
+ relative() { \
+ $(PERL) -e 'use File::Spec; \
+ print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2; \
+ }; \
+ RELATIVE=$$(relative $(DESTDIR)$(bindir) $(DESTDIR)$(SDK_BIN_DIR)); \
+ ln -sf $$RELATIVE/gij$(gcc_suffix) $(DESTDIR)$(SDK_BIN_DIR)/java; \
+ ln -sf $$RELATIVE/gjar$(gcc_suffix) $(DESTDIR)$(SDK_BIN_DIR)/jar; \
+ ln -sf $$RELATIVE/gjdoc$(gcc_suffix) $(DESTDIR)$(SDK_BIN_DIR)/javadoc; \
+ ln -sf $$RELATIVE/grmic$(gcc_suffix) $(DESTDIR)$(SDK_BIN_DIR)/rmic; \
+ ln -sf $$RELATIVE/gjavah$(gcc_suffix) $(DESTDIR)$(SDK_BIN_DIR)/javah; \
+ ln -sf $$RELATIVE/ecj $(DESTDIR)$(SDK_BIN_DIR)/javac; \
+ ln -sf $$RELATIVE/gappletviewer$(gcc_suffix) \
+ $(DESTDIR)$(SDK_BIN_DIR)/appletviewer; \
+ ln -sf $$RELATIVE/gjarsigner$(gcc_suffix) $(DESTDIR)$(SDK_BIN_DIR)/jarsigner; \
+ ln -sf $$RELATIVE/grmiregistry$(gcc_suffix) \
+ $(DESTDIR)$(SDK_BIN_DIR)/rmiregistry; \
+ ln -sf $$RELATIVE/gkeytool$(gcc_suffix) \
+ $(DESTDIR)$(SDK_BIN_DIR)/keytool; \
+ ln -sf $$RELATIVE/gorbd$(gcc_suffix) $(DESTDIR)$(SDK_BIN_DIR)/orbd; \
+ ln -sf $$RELATIVE/gnative2ascii$(gcc_suffix) \
+ $(DESTDIR)$(SDK_BIN_DIR)/native2ascii; \
+ ln -sf $$RELATIVE/grmid$(gcc_suffix) $(DESTDIR)$(SDK_BIN_DIR)/rmid; \
+ ln -sf $$RELATIVE/gtnameserv$(gcc_suffix) \
+ $(DESTDIR)$(SDK_BIN_DIR)/tnameserv; \
+ ln -sf $$RELATIVE/gserialver$(gcc_suffix) \
+ $(DESTDIR)$(SDK_BIN_DIR)/serialver; \
+ RELATIVE=$$(relative $(DESTDIR)$(bindir) $(DESTDIR)$(JRE_BIN_DIR)); \
+ ln -sf $$RELATIVE/grmiregistry$(gcc_suffix) \
+ $(DESTDIR)$(JRE_BIN_DIR)/rmiregistry; \
+ ln -sf $$RELATIVE/gkeytool$(gcc_suffix) $(DESTDIR)$(JRE_BIN_DIR)/keytool; \
+ ln -sf $$RELATIVE/gij$(gcc_suffix) $(DESTDIR)$(JRE_BIN_DIR)/java; \
+ ln -sf $$RELATIVE/gorbd$(gcc_suffix) $(DESTDIR)$(JRE_BIN_DIR)/orbd; \
+ ln -sf $$RELATIVE/grmid$(gcc_suffix) $(DESTDIR)$(JRE_BIN_DIR)/rmid; \
+ ln -sf $$RELATIVE/gtnameserv$(gcc_suffix) $(DESTDIR)$(JRE_BIN_DIR)/tnameserv; \
+ $(mkinstalldirs) $(DESTDIR)$(JVM_JAR_DIR); \
+ version=$(JAVA_VERSION).$(BUILD_VERSION); \
+ working_dir=`pwd`; \
+ cd $(DESTDIR)$(JVM_JAR_DIR); \
+ for jarname in jaas jce jdbc-stdext jndi jndi-cos jndi-dns \
+ jndi-ldap jndi-rmi jsse sasl; \
+ do \
+ ln -s $$RELATIVE/$$jarname.jar $$jarname-$$version.jar; \
+ done; \
+ for jar in *-$$version.jar; \
+ do \
+ ln -sf $$jar $$(echo $$jar | sed "s|-$$version.jar|-$(JAVA_VERSION).jar|g"); \
+ ln -sf $$jar $$(echo $$jar | sed "s|-$$version.jar|.jar|g"); \
+ done; \
+ cd $$working_dir; \
+ $(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)/security; \
+ RELATIVE=$$(relative $(DESTDIR)$(libdir)/security \
+ $(DESTDIR)$(JRE_LIB_DIR)/security); \
+ cd $(DESTDIR)$(JRE_LIB_DIR)/security; \
+ ln -sf $$RELATIVE/classpath.security java.security; \
+ cd $(DESTDIR)$(JVM_ROOT_DIR); \
+ ln -s $(JRE_DIR) $(JRE_LNK); \
+ ln -s $(SDK_DIR) $(SDK_LNK); \
+ cd $(DESTDIR)$(JVM_JAR_ROOT_DIR); \
+ ln -s $(SDK_DIR) $(JRE_LNK); \
+ ln -s $(SDK_DIR) $(SDK_LNK); \
+ cd $$working_dir; \
+ $(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)/linux; \
+ $(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/client; \
+ $(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/server; \
+ $(mkinstalldirs) $(DESTDIR)$(SDK_LIB_DIR); \
+ cd $(DESTDIR)$(JRE_LIB_DIR); \
+ for jarname in jaas jce jdbc-stdext jndi jndi-cos jndi-dns \
+ jndi-ldap jndi-rmi jsse sasl; \
+ do \
+ ln -s rt.jar $$jarname.jar; \
+ done; \
+ cd $$working_dir; \
+ RELATIVE=$$(relative $(DESTDIR)$(datarootdir)/java \
+ $(DESTDIR)$(JRE_LIB_DIR)); \
+ GIJ_VERSION=$$($(DESTDIR)$(bindir)/gij --version | head -n2 | tail -n1 \
+ | awk '{print $$5}'); \
+ ln -sf $$RELATIVE/libgcj-$$GIJ_VERSION.jar \
+ $(DESTDIR)$(JRE_LIB_DIR)/rt.jar; \
+ RELATIVE=$$(relative $(DESTDIR)$(dbexecdir) \
+ $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)); \
+ if [ -f $$RELATIVE/libjawt.so ]; then \
+ ln -sf $$RELATIVE/libjawt.so \
+ $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/libjawt.so; \
+ fi; \
+ RELATIVE=$$(relative $(DESTDIR)$(dbexecdir) \
+ $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/client); \
+ ln -sf $$RELATIVE/libjvm.so \
+ $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/client/libjvm.so; \
+ RELATIVE=$$(relative $(DESTDIR)$(dbexecdir) \
+ $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/server); \
+ ln -sf $$RELATIVE/libjvm.so \
+ $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/server/libjvm.so; \
+ RELATIVE=$$(relative $(DESTDIR)$(datarootdir)/java \
+ $(DESTDIR)$(SDK_LIB_DIR)); \
+ ln -sf $$RELATIVE/libgcj-tools-$$GIJ_VERSION.jar \
+ $(DESTDIR)$(SDK_LIB_DIR)/tools.jar; \
+ for headername in jawt jni; do \
+ DIRECTORY=$$(dirname $$($(DESTDIR)$(bindir)/gcj \
+ -print-file-name=include/$$headername.h)); \
+ RELATIVE=$$(relative $(DESTDIR)$$DIRECTORY \
+ $(DESTDIR)$(SDK_INCLUDE_DIR)); \
+ ln -sf $$RELATIVE/$$headername.h \
+ $(DESTDIR)$(SDK_INCLUDE_DIR)/$$headername.h; \
+ done; \
+ for headername in jawt_md jni_md; do \
+ DIRECTORY=$$(dirname $$($(DESTDIR)$(bindir)/gcj \
+ -print-file-name=include/$$headername.h)); \
+ RELATIVE=$$(relative $(DESTDIR)$$DIRECTORY \
+ $(DESTDIR)$(SDK_INCLUDE_DIR)/linux); \
+ ln -sf $$RELATIVE/$$headername.h \
+ $(DESTDIR)$(SDK_INCLUDE_DIR)/linux/$$headername.h; \
+ done; \
+ RELATIVE=$$(relative $(DESTDIR)$(datarootdir)/java \
+ $(DESTDIR)$(JVM_ROOT_DIR)/$(SDK_DIR)); \
+ if [ -f $$RELATIVE/src-$$GIJ_VERSION.zip ]; then \
+ ln -sf $$RELATIVE/src-$$GIJ_VERSION.zip \
+ $(DESTDIR)$(JVM_ROOT_DIR)/$(SDK_DIR)/src.zip; \
+ fi;
+endif
-
## ################################################################
##
Index: configure.ac
===================================================================
--- configure.ac (revision 136724)
+++ configure.ac (working copy)
@@ -117,6 +117,7 @@
AC_CHECK_PROGS([JAR], [jar fastjar gjar], no)
AC_PATH_PROG([ZIP], [zip], no)
AC_PATH_PROG([UNZIP], [unzip], unzip)
+AC_PATH_PROG([PERL], [perl], perl)
# We need a jar that supports -@. This is a GNU extension.
if test "$JAR" != no; then
@@ -1625,6 +1626,183 @@
# We get this from the environment.
AC_SUBST(GCJFLAGS)
+AC_ARG_ENABLE([java-home],
+ [AS_HELP_STRING([--enable-java-home],
+ [create a standard JDK-style directory layout in the install tree [default=no]])],
+ [case "${enableval}" in
+ yes) JAVA_HOME_ENABLED=yes ;;
+ no) JAVA_HOME_ENABLED=no ;;
+ *) AC_MSG_ERROR([Unknown argument to enable/disable java-home]) ;;
+ esac],
+ [JAVA_HOME_ENABLED=no]
+)
+AM_CONDITIONAL(CREATE_JAVA_HOME, test "x${JAVA_HOME_ENABLED}" == xyes)
+
+# Only do these checks if java-home above is enabled.
+if test "x${JAVA_HOME_ENABLED}" == xyes
+then
+
+ if test "x${prefix}" = "xNONE"
+ then
+ sdk_prefix=/usr
+ else
+ sdk_prefix=$prefix
+ fi
+
+ AC_ARG_WITH([gcc-suffix],
+ AS_HELP_STRING([--with-gcc-suffix],
+ [the GCC tool suffix (defaults to empty string)]),
+ [gcc_suffix=$withval], [gcc_suffix=""])
+ AC_MSG_RESULT(GCC suffix: ${gcc_suffix})
+ AC_SUBST(gcc_suffix)
+
+ AC_ARG_WITH([arch-directory],
+ AS_HELP_STRING([--with-arch-directory],
+ [the arch directory under jre/lib (defaults to auto-detect)]),
+ [host_cpu=$withval], [host_cpu=""])
+
+ AC_ARG_WITH([os-directory],
+ AS_HELP_STRING([--with-os-directory],
+ [the os directory under include (defaults to auto-detect)]),
+ [host_os=$withval], [host_os=""])
+
+ AC_ARG_WITH([origin-name],
+ AS_HELP_STRING([--with-origin-name],
+ [the JPackage origin name of this package (default is gcj${gcc_suffix}]),
+ [origin_name=$withval], [origin_name=gcj${gcc_suffix}])
+ AC_MSG_RESULT(JPackage origin name: ${origin_name})
+
+ AC_ARG_WITH([arch-suffix],
+ AS_HELP_STRING([--with-arch-suffix],
+ [the arch directory suffix (default is the empty string]),
+ [arch_suffix=$withval], [arch_suffix=""])
+ AC_MSG_RESULT(arch suffix: ${arch_suffix})
+
+ AC_ARG_WITH([jvm-root-dir],
+ AS_HELP_STRING([--with-jvm-root-dir],
+ [where to install SDK (default is ${sdk_prefix}/lib/jvm)]),
+ [jvm_root_dir=$withval], [jvm_root_dir=${sdk_prefix}/lib/jvm])
+ AC_MSG_RESULT(JVM root installation directory: ${jvm_root_dir})
+
+ AC_ARG_WITH([jvm-jar-dir],
+ AS_HELP_STRING([--with-jvm-jar-dir],
+ [where to install jars (default is ${sdk_prefix}/lib/jvm-exports)]),
+ [jvm_jar_dir=$withval], [jvm_jar_dir=${sdk_prefix}/lib/jvm-exports])
+ AC_MSG_RESULT(JAR root installation directory: ${jvm_jar_dir})
+
+ JAVA_VERSION=1.5.0
+ BUILD_VERSION=0
+ AC_SUBST(JAVA_VERSION)
+ AC_SUBST(BUILD_VERSION)
+ AC_MSG_RESULT(Java version: ${JAVA_VERSION})
+
+ jre_dir=java-${JAVA_VERSION}-${origin_name}-${JAVA_VERSION}.${BUILD_VERSION}${arch_suffix}/jre
+ sdk_dir=java-${JAVA_VERSION}-${origin_name}-${JAVA_VERSION}.${BUILD_VERSION}${arch_suffix}
+ jre_lnk=jre-${JAVA_VERSION}-${origin_name}
+ sdk_lnk=java-${JAVA_VERSION}-${origin_name}
+
+ JVM_ROOT_DIR=${jvm_root_dir}
+ AC_SUBST(JVM_ROOT_DIR)
+ AC_MSG_RESULT(JVM ROOT directory: ${JVM_ROOT_DIR})
+
+ JVM_JAR_ROOT_DIR=${jvm_jar_dir}
+ AC_SUBST(JVM_JAR_ROOT_DIR)
+ AC_MSG_RESULT(JVM JAR ROOT directory: ${JVM_JAR_ROOT_DIR})
+
+ JVM_JAR_DIR=${jvm_jar_dir}/${sdk_dir}
+ AC_SUBST(JVM_JAR_DIR)
+ AC_MSG_RESULT(JVM JAR directory: ${JVM_JAR_DIR})
+
+ JRE_DIR=${jre_dir}
+ AC_SUBST(JRE_DIR)
+
+ SDK_DIR=${sdk_dir}
+ AC_SUBST(SDK_DIR)
+
+ JRE_LNK=${jre_lnk}
+ AC_SUBST(JRE_LNK)
+
+ SDK_LNK=${sdk_lnk}
+ AC_SUBST(SDK_LNK)
+
+ JAVA_HOME_DIR=${jvm_root_dir}/${jre_dir}
+ AC_SUBST(JAVA_HOME_DIR)
+ AC_MSG_RESULT(JAVA_HOME directory: ${JAVA_HOME_DIR})
+
+ SDK_BIN_DIR=${jvm_root_dir}/${sdk_dir}/bin
+ AC_SUBST(SDK_BIN_DIR)
+ AC_MSG_RESULT(SDK tools directory: ${SDK_BIN_DIR})
+
+ SDK_LIB_DIR=${jvm_root_dir}/${sdk_dir}/lib
+ AC_SUBST(SDK_LIB_DIR)
+ AC_MSG_RESULT(SDK jar directory: ${SDK_LIB_DIR})
+
+ SDK_INCLUDE_DIR=${jvm_root_dir}/${sdk_dir}/include
+ AC_SUBST(SDK_INCLUDE_DIR)
+ AC_MSG_RESULT(SDK include directory: ${SDK_INCLUDE_DIR})
+
+ JRE_BIN_DIR=${jvm_root_dir}/${jre_dir}/bin
+ AC_SUBST(JRE_BIN_DIR)
+ AC_MSG_RESULT(JRE tools directory: ${JRE_BIN_DIR})
+
+ JRE_LIB_DIR=${jvm_root_dir}/${jre_dir}/lib
+ AC_SUBST(JRE_LIB_DIR)
+ AC_MSG_RESULT(JRE lib directory: ${JRE_LIB_DIR})
+
+ # Find gcj prefix using gcj found in PATH.
+ gcj_prefix=`which gcj${gcc_suffix} | sed "s%/bin/gcj${gcc_suffix}%%"`
+
+ # Where do the gcj binaries live?
+ # For jhbuild based builds, they all live in a sibling of bin called
+ # gcj-bin. Check for gcj-bin first, and use bin otherwise.
+ GCJ_BIN_DIR=`if test -d ${gcj_prefix}/gcj-bin; then echo ${gcj_prefix}/gcj-bin; else echo ${gcj_prefix}/bin; fi`
+ AC_SUBST(GCJ_BIN_DIR)
+ AC_MSG_RESULT(GCJ tools directory: ${GCJ_BIN_DIR})
+
+ echo host is ${host}
+ if test "x${host_cpu}" = "x"
+ then
+ case ${host} in
+ *-mingw* | *-cygwin*)
+ host_cpu=x86;;
+ i486-* | i586-* | i686-*)
+ host_cpu=i386;;
+ *)
+ host_cpu=${host_cpu};;
+ esac
+ fi
+ AC_MSG_RESULT(arch directory: ${host_cpu})
+ CPU=${host_cpu}
+ AC_SUBST(CPU)
+
+ if test "x${host_os}" = "x"
+ then
+ case ${host} in
+ *-mingw* | *-cygwin*)
+ host_os=win32;;
+ *-linux*)
+ host_os=linux;;
+ *)
+ host_os=${host_os};;
+ esac
+ fi
+ echo os directory: ${host_os}
+ OS=${host_os}
+ AC_SUBST(OS)
+
+ # make an expanded $libdir, for substituting into
+ # scripts (and other non-Makefile things).
+ LIBDIR=$libdir
+ if test "x${exec_prefix}" = "xNONE"
+ then
+ lib_exec_prefix=$sdk_prefix
+ else
+ lib_exec_prefix=$exec_prefix
+ fi
+ LIBDIR=`echo $libdir | sed "s:\\\${exec_prefix}:$lib_exec_prefix:g"`
+ AC_SUBST(LIBDIR)
+fi
+
AC_CONFIG_FILES([
Makefile
libgcj.pc