From: <mar...@us...> - 2010-09-01 09:21:41
|
Revision: 7623 http://octave.svn.sourceforge.net/octave/?rev=7623&view=rev Author: martinhepperle Date: 2010-09-01 09:21:30 +0000 (Wed, 01 Sep 2010) Log Message: ----------- new functions for classpath handling, typecasts to quiet compiler Modified Paths: -------------- trunk/octave-forge/extra/java/src/Makeconf.in trunk/octave-forge/extra/java/src/Makefile trunk/octave-forge/extra/java/src/__java__.cc trunk/octave-forge/extra/java/src/__java__.h trunk/octave-forge/extra/java/src/configure.base trunk/octave-forge/extra/java/src/org/octave/.svnignore trunk/octave-forge/extra/java/src/org/octave/ClassHelper.java trunk/octave-forge/extra/java/src/org/octave/OctClassLoader.java trunk/octave-forge/extra/java/src/org/octave/Octave.java Modified: trunk/octave-forge/extra/java/src/Makeconf.in =================================================================== --- trunk/octave-forge/extra/java/src/Makeconf.in 2010-09-01 09:08:22 UTC (rev 7622) +++ trunk/octave-forge/extra/java/src/Makeconf.in 2010-09-01 09:21:30 UTC (rev 7623) @@ -1,69 +1,69 @@ - -## Makeconf is automatically generated from Makeconf.base and Makeconf.add -## in the various subdirectories. To regenerate, use ./autogen.sh to -## create a new ./Makeconf.in, then use ./configure to generate a new -## Makeconf. - -OCTAVE_FORGE = 1 - -SHELL = @SHELL@ - -canonical_host_type = @canonical_host_type@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -mandir = @mandir@ -libdir = @libdir@ -datadir = @datadir@ -infodir = @infodir@ -includedir = @includedir@ -datarootdir = @datarootdir@ - -DESTDIR = - -RANLIB = @RANLIB@ -STRIP = @STRIP@ -LN_S = @LN_S@ - -# Most octave programs will be compiled with $(MKOCTFILE). Those which -# cannot use mkoctfile directly can request the flags that mkoctfile -# would use as follows: -# FLAG = $(shell $(MKOCTFILE) -p FLAG) -# The following flags are for compiling programs that are independent -# of Octave. How confusing. -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -CPICFLAG = @CPICFLAG@ -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CXXPICFLAG = @CXXPICFLAG@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FPICFLAG = @FPICFLAG@ -LFLAGS = @LFLAGS@ - -OCTAVE = @OCTAVE@ -OCTAVE_VERSION = @OCTAVE_VERSION@ -MKOCTFILE = @MKOCTFILE@ -DHAVE_OCTAVE_$(ver) -v -SHLEXT = @SHLEXT@ - -ver = @ver@ -MPATH = @mpath@ -OPATH = @opath@ -XPATH = @xpath@ -ALTMPATH = @altmpath@ -ALTOPATH = @altopath@ - -JAVAC = @JAVAC@ -JAR = @JAR@ -JAVA_ARCH = @JAVA_ARCH@ -JAVA_HOME = @JAVA_HOME@ -JAVA_LIBS = @JAVA_LIBS@ -JAVA_INCS = @JAVA_INCS@ -HAVE_JAVA = @HAVE_JAVA@ - -%.o: %.c ; $(MKOCTFILE) -c $< -%.o: %.f ; $(MKOCTFILE) -c $< -%.o: %.cc ; $(MKOCTFILE) -c $< -%.oct: %.cc ; $(MKOCTFILE) $< + +## Makeconf is automatically generated from Makeconf.base and Makeconf.add +## in the various subdirectories. To regenerate, use ./autogen.sh to +## create a new ./Makeconf.in, then use ./configure to generate a new +## Makeconf. + +OCTAVE_FORGE = 1 + +SHELL = @SHELL@ + +canonical_host_type = @canonical_host_type@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +mandir = @mandir@ +libdir = @libdir@ +datadir = @datadir@ +infodir = @infodir@ +includedir = @includedir@ +datarootdir = @datarootdir@ + +DESTDIR = + +RANLIB = @RANLIB@ +STRIP = @STRIP@ +LN_S = @LN_S@ + +# Most octave programs will be compiled with $(MKOCTFILE). Those which +# cannot use mkoctfile directly can request the flags that mkoctfile +# would use as follows: +# FLAG = $(shell $(MKOCTFILE) -p FLAG) +# The following flags are for compiling programs that are independent +# of Octave. How confusing. +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CPICFLAG = @CPICFLAG@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ +CXXPICFLAG = @CXXPICFLAG@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FPICFLAG = @FPICFLAG@ +LFLAGS = @LFLAGS@ + +OCTAVE = @OCTAVE@ +OCTAVE_VERSION = @OCTAVE_VERSION@ +MKOCTFILE = @MKOCTFILE@ -DHAVE_OCTAVE_$(ver) -v +SHLEXT = @SHLEXT@ + +ver = @ver@ +MPATH = @mpath@ +OPATH = @opath@ +XPATH = @xpath@ +ALTMPATH = @altmpath@ +ALTOPATH = @altopath@ + +JAVAC = @JAVAC@ +JAR = @JAR@ +JAVA_ARCH = @JAVA_ARCH@ +JAVA_HOME = @JAVA_HOME@ +JAVA_LIBS = @JAVA_LIBS@ +JAVA_INCS = @JAVA_INCS@ +HAVE_JAVA = @HAVE_JAVA@ + +%.o: %.c ; $(MKOCTFILE) -c $< +%.o: %.f ; $(MKOCTFILE) -c $< +%.o: %.cc ; $(MKOCTFILE) -c $< +%.oct: %.cc ; $(MKOCTFILE) $< Modified: trunk/octave-forge/extra/java/src/Makefile =================================================================== --- trunk/octave-forge/extra/java/src/Makefile 2010-09-01 09:08:22 UTC (rev 7622) +++ trunk/octave-forge/extra/java/src/Makefile 2010-09-01 09:21:30 UTC (rev 7623) @@ -1,52 +1,56 @@ -sinclude ./Makeconf -export LFLAGS - -IMPORT_LIBS = __java__.lib -PROGS = __java__.oct __java__.h octave.jar - - -JAVASRC = ClassHelper.java OctClassLoader.java Octave.java OctaveReference.java Matrix.java -JAVADIR = org/octave - -JAVA_SOURCES = $(addprefix $(JAVADIR)/, $(JAVASRC)) -JAVA_CLASSES = $(patsubst %.java, %.class, $(JAVA_SOURCES)) - -ifeq ($(HAVE_JAVA),yes) -all: $(PROGS) - @if test -f" FILES"; then \ - rm -f FILES; \ - fi; \ - touch FILES; \ - for _f in $(PROGS); do \ - echo $$_f >> FILES; \ - done; \ - for _f in $(IMPORT_LIBS); do \ - if [ -e $$_f ]; then \ - echo $$_f >> FILES; \ - fi; \ - done -else -all: - @echo "Java support not compiled" -endif - -__java__.oct: __java__.cc __java__.h - if [ "X$(JAVA_ARCH)X" = "XX" ]; then \ - $(MKOCTFILE) -DJAVAPKG_BUILD $(JAVA_INCS) -o $@ __java__.cc $(JAVA_LIBS); \ - else \ - $(MKOCTFILE) -DJAVAPKG_BUILD -DJAVA_ARCH=\\\"$(JAVA_ARCH)\\\" -DJAVA_HOME=\\\"$(JAVA_HOME)\\\" $(JAVA_INCS) -o $@ __java__.cc $(JAVA_LIBS); \ - fi - -octave.jar: $(JAVA_CLASSES) - -rm -f $@ - $(JAR) cf $@ $(JAVA_CLASSES) - -$(JAVA_CLASSES): $(JAVA_SOURCES) - $(JAVAC) -source 1.3 -target 1.3 $(JAVA_SOURCES) - -clean: - -rm *.o core octave-core *.oct *~ - -rm octave.jar $(JAVA_CLASSES) FILES - -distclean realclean : clean - -rm -r configure config.status config.log autom4te.cache Makeconf +sinclude ./Makeconf +export LFLAGS + +IMPORT_LIBS = __java__.lib +PROGS = __java__.oct __java__.h octave.jar + + +JAVASRC = ClassHelper.java OctClassLoader.java Octave.java OctaveReference.java Matrix.java \ + JDialogBox.java DlgListener.java TeXtranslator.java TeXcode.java +JAVADIR = org/octave +RSCDIR = org/octave/images +IMAGES = question.png error.png warning.png information.png octave.png + +JAVA_SOURCES = $(addprefix $(JAVADIR)/, $(JAVASRC)) +JAVA_CLASSES = $(patsubst %.java, %.class, $(JAVA_SOURCES)) +JAVA_RSC = $(addprefix $(RSCDIR)/, $(IMAGES)) + +ifeq ($(HAVE_JAVA),yes) +all: $(PROGS) + @if test -f" FILES"; then \ + rm -f FILES; \ + fi; \ + touch FILES; \ + for _f in $(PROGS); do \ + echo $$_f >> FILES; \ + done; \ + for _f in $(IMPORT_LIBS); do \ + if [ -e $$_f ]; then \ + echo $$_f >> FILES; \ + fi; \ + done +else +all: + @echo "Java support not compiled" +endif + +__java__.oct: __java__.cc __java__.h + if [ "X$(JAVA_ARCH)X" = "XX" ]; then \ + $(MKOCTFILE) -DJAVAPKG_BUILD $(JAVA_INCS) -o $@ __java__.cc $(JAVA_LIBS); \ + else \ + $(MKOCTFILE) -DJAVAPKG_BUILD -DJAVA_ARCH=\\\"$(JAVA_ARCH)\\\" -DJAVA_HOME=\\\"$(JAVA_HOME)\\\" $(JAVA_INCS) -o $@ __java__.cc $(JAVA_LIBS); \ + fi + +octave.jar: $(JAVA_CLASSES) + -rm -f $@ + $(JAR) cf $@ $(JAVA_CLASSES) $(JAVA_RSC) + +$(JAVA_CLASSES): $(JAVA_SOURCES) + $(JAVAC) -source 1.3 -target 1.3 $(JAVA_SOURCES) + +clean: + -rm *.o core octave-core *.oct *~ + -rm octave.jar $(JAVA_CLASSES) FILES + +distclean realclean : clean + -rm -r configure config.status config.log autom4te.cache Makeconf Modified: trunk/octave-forge/extra/java/src/__java__.cc =================================================================== --- trunk/octave-forge/extra/java/src/__java__.cc 2010-09-01 09:08:22 UTC (rev 7622) +++ trunk/octave-forge/extra/java/src/__java__.cc 2010-09-01 09:21:30 UTC (rev 7623) @@ -101,7 +101,8 @@ while (! js.eof () && ! js.fail ()) { std::getline (js, line); - if (line.length () > 2 && (line.find ("-D") == 0 || line.find ("-X") == 0)) + if (line.length () > 2 && + (line.find ("-D") == 0 || line.find ("-X") == 0)) java_opts.push_back (line); else if (line.length () > 0 && Vjava_debug) std::cerr << "invalid JVM option, skipping: " << line << std::endl; @@ -256,23 +257,117 @@ } } +/* + * Read the content of a file filename (usually "classpath.txt") + * + * Returns a string with all lines concatenated and separated + * by the path separator character. + * The return string also starts with a path separator so that + * it can be appended easily to a base classpath. + * + * The file "classpath.txt" must contain single lines, each + * with a classpath. + * Comment lines starting with a '#' or a '%' in column 1 are allowed. + * + * On Windiows the usual path separator is a ';', on Unix a ':'. + * + * Created: 28 Aug 2010 Martin Hepperle + */ +static std::string read_classpath_txt (const std::string& filepath) +{ + std::string classpath; + + std::ifstream fs (filepath.c_str ()); + + if (! fs.bad () && ! fs.fail ()) + { + std::string line; + + while (! fs.eof () && ! fs.fail ()) + { + std::getline (fs, line); + if (line.length () > 1 ) + { + if ( (line.at(0) == '#') || + (line.at(0) == '%') ) + { + // this is a comment line: skip + } + else + { + // prepend separator character + classpath.append(dir_path::path_sep_str()); + // append content of line without trailing blanks + int iLast = line.find_last_not_of(' '); + classpath.append(file_ops::tilde_expand(line.substr(0,iLast+1))); + } + } + } + } + return ( classpath ); +} + + static std::string initial_class_path () { - std::string retval = initial_java_dir (); + std::string retval = initial_java_dir (); - // check for octave.jar file - if (! retval.empty ()) + // find octave.jar file + if (! retval.empty ()) { std::string jar_file = retval + file_ops::dir_sep_str () + "octave.jar"; - file_stat st (jar_file); + file_stat jar_exists (jar_file); - if (st) - retval = jar_file; + if (jar_exists) + { + // initialize static classpath to octave.jar + retval = jar_file; + + /* + * The base classpath has been set. + * Try to find the optional file "classpath.txt" in two places. + * The users classes will take precedence over the settings + * defined in the package directory + */ + std::string str_filename = "classpath.txt"; + std::string cp_file; + file_stat cp_exists; + /* + * Try to read the file "classpath.txt" in the user's home directory + */ + cp_file = file_ops::tilde_expand ( "~" + file_ops::dir_sep_str () + str_filename ); + cp_exists = file_stat(cp_file); + if (cp_exists) + { + /* + * The file "classpath.txt" has been found: add its contents to the static classpath + */ + std::string theClassPath = read_classpath_txt (cp_file); + retval.append(theClassPath); + } + /* + * Try to read a file "classpath.txt" in the package directory + */ + cp_file = initial_java_dir () + file_ops::dir_sep_str () + str_filename; + cp_exists = file_stat(cp_file); + if (cp_exists) + { + /* + * The file "classpath.txt" has been found: add its contents to the static classpath + */ + std::string theClassPath = read_classpath_txt (cp_file); + retval.append(theClassPath); + } + } else + { throw std::string("octave jar does not exist: ") + jar_file; + } } else + { throw std::string("initial java dir is empty"); + } return retval; } @@ -382,7 +477,7 @@ // Attach the current thread JavaVMAttachArgs vm_args; vm_args.version = JNI_VERSION_1_2; - vm_args.name = "octave"; + vm_args.name = (char*)"octave"; vm_args.group = NULL; if (jvm->AttachCurrentThread((void**)¤t_env, &vm_args) < 0) throw std::string("JVM internal error, unable to attach octave to existing JVM"); @@ -609,7 +704,7 @@ if (! error_state) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "arraySubsref", "(Ljava/lang/Object;[[I)Ljava/lang/Object;"); resObj = jni_env->CallStaticObjectMethod (helperClass, mID, jobj, jobject (java_idx)); } @@ -631,7 +726,7 @@ if (! error_state && unbox (jni_env, rhs, rhsObj, rhsCls)) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "arraySubsasgn", "(Ljava/lang/Object;[[ILjava/lang/Object;)Ljava/lang/Object;"); resObj = jni_env->CallStaticObjectMethod (helperClass, mID, @@ -765,8 +860,9 @@ if (jni_env->IsInstanceOf (jobj, cls)) { jmethodID m = jni_env->GetMethodID (cls, "booleanValue", "()Z"); - retval = jni_env->CallBooleanMethod (jobj, m); - } + // MH retval = jni_env->CallBooleanMethod (jobj, m); + retval = (jni_env->CallBooleanMethod (jobj, m) ? true : false); + } } if (retval.is_undefined ()) @@ -780,7 +876,7 @@ if (retval.is_undefined () && Vjava_convert_matrix) { - cls = find_octave_class (jni_env, "org/octave/Matrix"); + cls = find_octave_class (jni_env, (char*)"org/octave/Matrix"); if (jni_env->IsInstanceOf (jobj, cls)) { jmethodID mID = jni_env->GetMethodID (cls, "getDims", "()[I"); @@ -845,7 +941,7 @@ if (retval.is_undefined ()) { - cls = find_octave_class (jni_env, "org/octave/OctaveReference"); + cls = find_octave_class (jni_env, (char*)"org/octave/OctaveReference"); if (jni_env->IsInstanceOf (jobj, cls)) { jmethodID mID = jni_env->GetMethodID (cls, "getID", "()I"); @@ -924,7 +1020,7 @@ if (jni_env->IsInstanceOf (jobj, cls)) { jobjectArray jarr = reinterpret_cast<jobjectArray> (jobj); - int len = jni_env->GetArrayLength (jarr), cols = 0; + int len = jni_env->GetArrayLength (jarr); Cell m(len, 1); for (int i=0; i<len; i++) { @@ -959,6 +1055,15 @@ jobj = jni_env->NewStringUTF (s.c_str ()); jcls = jni_env->GetObjectClass (jobj); } + else if (val.is_bool_scalar ()) + { + bool bval = val.bool_value (); + jclass_ref bcls (jni_env, jni_env->FindClass ("java/lang/Boolean")); + jfieldID fid = jni_env->GetStaticFieldID (bcls, "TYPE", "Ljava/lang/Class;"); + jmethodID mid = jni_env->GetMethodID (bcls, "<init>", "(Z)V"); + jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (bcls, fid)); + jobj = jni_env->NewObject (bcls, mid, bval); + } else if (val.is_real_scalar ()) { double dval = val.double_value (); @@ -985,7 +1090,7 @@ } else if (Vjava_convert_matrix && (val.is_matrix_type () || val.is_range()) && val.is_real_type ()) { - jclass_ref mcls (jni_env, find_octave_class (jni_env, "org/octave/Matrix")); + jclass_ref mcls (jni_env, find_octave_class (jni_env, (char*)"org/octave/Matrix")); dim_vector dims = val.dims (); jintArray_ref iv (jni_env, jni_env->NewIntArray (dims.length ())); jint *iv_data = jni_env->GetIntArrayElements (jintArray (iv), 0); @@ -1049,7 +1154,7 @@ } else { - jclass rcls = find_octave_class (jni_env, "org/octave/OctaveReference"); + jclass rcls = find_octave_class (jni_env, (char*)"org/octave/OctaveReference"); jmethodID mID = jni_env->GetMethodID (rcls, "<init>", "(I)V"); int ID = octave_refcount++; @@ -1114,7 +1219,7 @@ if (current_env) { - jclass_ref cls (current_env, find_octave_class (current_env, "org/octave/Octave")); + jclass_ref cls (current_env, find_octave_class (current_env, (char*)"org/octave/Octave")); jmethodID mID = current_env->GetStaticMethodID (cls, "checkPendingAction", "()V"); current_env->CallStaticVoidMethod (cls, mID); } @@ -1205,6 +1310,49 @@ return retval; } +DEFUN_DLD (javaObject, args, , + "-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {@var{obj} =} javaObject (@var{name}, @var{arg1}, ...)\n\ +Create a Java object of class @var{name}, by calling the class constructor with the\n\ +arguments @var{arg1}, ...\n\ +The first example creates an unitialized object, \ +while the second example supplies an initializer argument.\n\ +\n\ +@example\n\ + x = javaObject (\"java.lang.StringBuffer\")\n\ + x = javaObject (\"java.lang.StringBuffer\", \"Initial string\")\n\ +@end example\n\ +\n\ +@seealso{java_invoke, java_new, java_get, java_set}\n\ +@end deftypefn") +{ + octave_value retval; + + initialize_java (); + if (! error_state) + { + JNIEnv *current_env = octave_java::thread_jni_env (); + + if (args.length () > 0) + { + std::string name = args(0).string_value (); + if (! error_state) + { + octave_value_list tmp; + for (int i=1; i<args.length (); i++) + tmp(i-1) = args(i); + retval = octave_java::do_java_create (current_env, name, tmp); + } + else + error ("javaObject: first argument must be a string"); + } + else + print_usage (); + } + + return retval; +} + DEFUN_DLD (java_invoke, args, , "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{ret} =} java_invoke (@var{obj}, @var{name}, @var{arg1}, ...)\n\ @@ -1263,6 +1411,64 @@ return retval; } +DEFUN_DLD (javaMethod, args, , + "-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {@var{ret} =} javaMethod (@var{obj}, @var{name}, @var{arg1}, ...)\n\ +Invoke the method @var{name} on the Java object @var{obj} with the arguments\n\ +@var{arg1}, ... For static methods, @var{obj} can be a string representing the\n\ +fully qualified name of the corresponding class. The function returns the result\n\ +of the method invocation.\n\ +\n\ +When @var{obj} is a regular Java object, the structure-like indexing can be used\n\ +as a shortcut syntax. For instance, the two following statements are equivalent\n\ +\n\ +@example\n\ + ret = javaMethod (x, \"method1\", 1.0, \"a string\")\n\ + ret = x.method1 (1.0, \"a string\")\n\ +@end example\n\ +\n\ +@seealso{java_get, java_set, java_new}\n\ +@end deftypefn") +{ + octave_value retval; + + initialize_java (); + if (! error_state) + { + JNIEnv *current_env = octave_java::thread_jni_env (); + + if (args.length() > 1) + { + std::string name = args(1).string_value (); + if (! error_state) + { + octave_value_list tmp; + for (int i=2; i<args.length (); i++) + tmp(i-2) = args(i); + + if (args(0).class_name () == "octave_java") + { + octave_java *jobj = TO_JAVA (args(0)); + retval = jobj->do_java_invoke (current_env, name, tmp); + } + else if (args(0).is_string ()) + { + std::string cls = args(0).string_value (); + retval = octave_java::do_java_invoke (current_env, cls, name, tmp); + } + else + error ("javaMethod: first argument must be a Java object or a string"); + } + else + error ("javaMethod: second argument must be a string"); + } + else + print_usage (); + } + + return retval; +} + DEFUN_DLD (java_get, args, , "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{val} =} java_get (@var{obj}, @var{name})\n\ @@ -1693,7 +1899,7 @@ jobjectArray_ref arg_objs (jni_env), arg_types (jni_env); if (unbox (jni_env, args, arg_objs, arg_types)) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "invokeMethod", "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Class;)Ljava/lang/Object;"); jstring_ref methName (jni_env, jni_env->NewStringUTF (name.c_str ())); @@ -1718,7 +1924,7 @@ jobjectArray_ref arg_objs (jni_env), arg_types (jni_env); if (unbox (jni_env, args, arg_objs, arg_types)) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "invokeStaticMethod", "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Class;)Ljava/lang/Object;"); jstring_ref methName (jni_env, jni_env->NewStringUTF (name.c_str ())); @@ -1743,7 +1949,7 @@ jobjectArray_ref arg_objs (jni_env), arg_types (jni_env); if (unbox (jni_env, args, arg_objs, arg_types)) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "invokeConstructor", "(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Class;)Ljava/lang/Object;"); jstring_ref clsName (jni_env, jni_env->NewStringUTF (name.c_str ())); @@ -1764,7 +1970,7 @@ if (jni_env) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "getField", "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"); jstring_ref fName (jni_env, jni_env->NewStringUTF (name.c_str ())); @@ -1784,7 +1990,7 @@ if (jni_env) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "getStaticField", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;"); jstring_ref cName (jni_env, jni_env->NewStringUTF (class_name.c_str ())); @@ -1810,7 +2016,7 @@ if (unbox (jni_env, val, jobj, jcls)) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "setField", "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V"); jstring_ref fName (jni_env, jni_env->NewStringUTF (name.c_str ())); @@ -1832,7 +2038,7 @@ if (unbox (jni_env, val, jobj, jcls)) { - jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); + jclass_ref helperClass (jni_env, find_octave_class (jni_env, (char*)"org/octave/ClassHelper")); jmethodID mID = jni_env->GetStaticMethodID (helperClass, "setStaticField", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"); jstring_ref cName (jni_env, jni_env->NewStringUTF (class_name.c_str ())); Modified: trunk/octave-forge/extra/java/src/__java__.h =================================================================== --- trunk/octave-forge/extra/java/src/__java__.h 2010-09-01 09:08:22 UTC (rev 7622) +++ trunk/octave-forge/extra/java/src/__java__.h 2010-09-01 09:21:30 UTC (rev 7623) @@ -1,272 +1,272 @@ -/* Copyright (C) 2007 Michael Goffioul -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or -** (at your option) any later version. -** -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU General Public License for more details. -** -** You should have received a copy of the GNU General Public License -** along with this program; If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef __JAVA__H__ -#define __JAVA__H__ - -#include <octave/oct.h> -#include <octave/config.h> -#ifndef OCTAVE_EXPORT -#include <octave/oct-dlldefs.h> -#endif // OCTAVE_EXPORT -#include <jni.h> - -#ifdef JAVAPKG_BUILD -# define JAVAPKG_API OCTAVE_EXPORT -#else -# define JAVAPKG_API OCTAVE_IMPORT -#endif - -template <class T> -class java_local_ref -{ -public: - java_local_ref (JNIEnv *_env) - : jobj (0), detached (false), env (_env) - { } - - java_local_ref (JNIEnv *_env, T obj) - : jobj (obj), detached (false), env (_env) - { } - - ~java_local_ref (void) - { - release (); - } - - T& operator= (T obj) - { - release (); - jobj = obj; - detached = false; - return jobj; - } - operator bool () const { return (jobj != 0); } - operator T () { return jobj; } - - void detach () { detached = true; } - -private: - void release (void) - { - if (env && jobj && ! detached) - env->DeleteLocalRef (jobj); - jobj = 0; - } - - java_local_ref (void) - : jobj (0), detached (false), env (0) - { } - - -protected: - T jobj; - bool detached; - JNIEnv *env; -}; - -typedef java_local_ref<jobject> jobject_ref; -typedef java_local_ref<jclass> jclass_ref; -typedef java_local_ref<jstring> jstring_ref; -typedef java_local_ref<jobjectArray> jobjectArray_ref; -typedef java_local_ref<jintArray> jintArray_ref; -typedef java_local_ref<jbyteArray> jbyteArray_ref; -typedef java_local_ref<jdoubleArray> jdoubleArray_ref; -typedef java_local_ref<jthrowable> jthrowable_ref; - -extern JAVAPKG_API std::string jstring_to_string (JNIEnv* jni_env, jstring s); -extern JAVAPKG_API std::string jstring_to_string (JNIEnv* jni_env, jobject obj); -extern JAVAPKG_API octave_value box (JNIEnv* jni_env, jobject jobj, jclass jcls = 0); -extern JAVAPKG_API octave_value box_more (JNIEnv* jni_env, jobject jobj, jclass jcls = 0); -extern JAVAPKG_API int unbox (JNIEnv* jni_env, const octave_value& val, jobject_ref& jobj, jclass_ref& jcls); -extern JAVAPKG_API int unbox (JNIEnv* jni_env, const octave_value_list& args, jobjectArray_ref& jobjs, jobjectArray_ref& jclss); - -extern JAVAPKG_API bool Vjava_convert_matrix; -extern JAVAPKG_API bool Vjava_unsigned_conversion; -extern JAVAPKG_API bool Vjava_debug; - -class JAVAPKG_API octave_java : public octave_base_value -{ -public: - octave_java (void) - : java_object (0), java_class (0) - { } - - octave_java (const octave_java& jobj) - : java_object (0), java_class (0) - { - init (jobj.java_object, jobj.java_class); - } - - octave_java (jobject obj, jclass cls = 0) - : java_object (0) - { - init (obj, cls); - } - - ~octave_java (void) - { - release (); - } - - jobject to_java () const { return java_object; } - jclass to_class () const { return java_class; } - std::string java_class_name () const { return java_type; } - - octave_base_value* clone(void) const { return new octave_java(*this); } - octave_base_value* empty_clone(void) const { return new octave_java(); } - - bool is_defined(void) const { return true; } - - bool is_map (void) const { return true; } - - string_vector map_keys(void) const; - - dim_vector dims(void) const; - - void print(std::ostream& os, bool pr_as_read_syntax = false) const - { - os << "<Java object: " << java_type << ">"; - newline(os); - } - - void print_raw(std::ostream& os, bool pr_as_read_syntax = false) const - { - print(os, pr_as_read_syntax); - } - - octave_value_list subsref (const std::string& type, const std::list<octave_value_list>& idx, int nargout); - - octave_value subsref (const std::string& type, - const std::list<octave_value_list>& idx) - { - octave_value_list retval = subsref (type, idx, 1); - return (retval.length () > 0 ? retval(0) : octave_value ()); - } - - octave_value subsasgn (const std::string& type, const std::list<octave_value_list>& idx, const octave_value& rhs); - - octave_value convert_to_str_internal (bool pad, bool force, char type) const; - - bool is_string (void) const - { - JNIEnv *current_env = thread_jni_env (); - - if (current_env && java_object) - { - jclass_ref cls (current_env, current_env->FindClass ("java/lang/String")); - return current_env->IsInstanceOf (java_object, cls); - } - return false; - } - - static JNIEnv* thread_jni_env (void); - - octave_value do_java_invoke (JNIEnv* jni_env, const std::string& name, - const octave_value_list& args); - - octave_value do_java_invoke (const std::string& name, const octave_value_list& args) - { return do_java_invoke(thread_jni_env (), name, args); } - - static octave_value do_java_invoke (JNIEnv* jni_env, const std::string& class_name, - const std::string& name, const octave_value_list& args); - - static octave_value do_java_invoke (const std::string& class_name, - const std::string& name, const octave_value_list& args) - { return do_java_invoke(thread_jni_env (), class_name, name, args); } - - static octave_value do_java_create (JNIEnv* jni_env, const std::string& name, - const octave_value_list& args); - - static octave_value do_java_create (const std::string& name, const octave_value_list& args) - { return do_java_create (thread_jni_env (), name, args); } - - octave_value do_java_get (JNIEnv* jni_env, const std::string& name); - - octave_value do_java_get (const std::string& name) - { return do_java_get (thread_jni_env (), name); } - - static octave_value do_java_get (JNIEnv* jni_env, const std::string& class_name, - const std::string& name); - - static octave_value do_java_get (const std::string& class_name, const std::string& name) - { return do_java_get (thread_jni_env (), class_name, name); } - - octave_value do_java_set (JNIEnv* jni_env, const std::string& name, const octave_value& val); - - octave_value do_java_set (const std::string& name, const octave_value& val) - { return do_java_set (thread_jni_env (), name, val); } - - static octave_value do_java_set (JNIEnv* jni_env, const std::string& class_name, - const std::string& name, const octave_value& val); - - static octave_value do_java_set (const std::string& class_name, const std::string& name, - const octave_value& val) - { return do_java_set (thread_jni_env (), class_name, name, val); } - -private: - void init (jobject jobj, jclass jcls) - { - JNIEnv *current_env = thread_jni_env (); - - if (current_env) - { - if (jobj) - java_object = current_env->NewGlobalRef (jobj); - if (jcls) - java_class = reinterpret_cast<jclass> (current_env->NewGlobalRef (jcls)); - else if (java_object) - { - jclass_ref ocls (current_env, current_env->GetObjectClass (java_object)); - java_class = reinterpret_cast<jclass> (current_env->NewGlobalRef (jclass (ocls))); - } - - if (java_class) - { - jclass_ref clsCls (current_env, current_env->GetObjectClass (java_class)); - jmethodID mID = current_env->GetMethodID (clsCls, "getCanonicalName", "()Ljava/lang/String;"); - jobject_ref resObj (current_env, current_env->CallObjectMethod (java_class, mID)); - java_type = jstring_to_string (current_env, resObj); - } - } - } - - void release () - { - JNIEnv *current_env = thread_jni_env (); - - if (current_env) - { - if (java_object) - current_env->DeleteGlobalRef (java_object); - if (java_class) - current_env->DeleteGlobalRef (java_class); - java_object = 0; - java_class = 0; - } - } - -private: - DECLARE_OCTAVE_ALLOCATOR - - DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA - - jobject java_object; - jclass java_class; - std::string java_type; -}; - -#endif /* __JAVA__H__ */ +/* Copyright (C) 2007 Michael Goffioul +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __JAVA__H__ +#define __JAVA__H__ + +#include <octave/oct.h> +#include <octave/config.h> +#ifndef OCTAVE_EXPORT +#include <octave/oct-dlldefs.h> +#endif // OCTAVE_EXPORT +#include <jni.h> + +#ifdef JAVAPKG_BUILD +# define JAVAPKG_API OCTAVE_EXPORT +#else +# define JAVAPKG_API OCTAVE_IMPORT +#endif + +template <class T> +class java_local_ref +{ +public: + java_local_ref (JNIEnv *_env) + : jobj (0), detached (false), env (_env) + { } + + java_local_ref (JNIEnv *_env, T obj) + : jobj (obj), detached (false), env (_env) + { } + + ~java_local_ref (void) + { + release (); + } + + T& operator= (T obj) + { + release (); + jobj = obj; + detached = false; + return jobj; + } + operator bool () const { return (jobj != 0); } + operator T () { return jobj; } + + void detach () { detached = true; } + +private: + void release (void) + { + if (env && jobj && ! detached) + env->DeleteLocalRef (jobj); + jobj = 0; + } + + java_local_ref (void) + : jobj (0), detached (false), env (0) + { } + + +protected: + T jobj; + bool detached; + JNIEnv *env; +}; + +typedef java_local_ref<jobject> jobject_ref; +typedef java_local_ref<jclass> jclass_ref; +typedef java_local_ref<jstring> jstring_ref; +typedef java_local_ref<jobjectArray> jobjectArray_ref; +typedef java_local_ref<jintArray> jintArray_ref; +typedef java_local_ref<jbyteArray> jbyteArray_ref; +typedef java_local_ref<jdoubleArray> jdoubleArray_ref; +typedef java_local_ref<jthrowable> jthrowable_ref; + +extern JAVAPKG_API std::string jstring_to_string (JNIEnv* jni_env, jstring s); +extern JAVAPKG_API std::string jstring_to_string (JNIEnv* jni_env, jobject obj); +extern JAVAPKG_API octave_value box (JNIEnv* jni_env, jobject jobj, jclass jcls = 0); +extern JAVAPKG_API octave_value box_more (JNIEnv* jni_env, jobject jobj, jclass jcls = 0); +extern JAVAPKG_API int unbox (JNIEnv* jni_env, const octave_value& val, jobject_ref& jobj, jclass_ref& jcls); +extern JAVAPKG_API int unbox (JNIEnv* jni_env, const octave_value_list& args, jobjectArray_ref& jobjs, jobjectArray_ref& jclss); + +extern JAVAPKG_API bool Vjava_convert_matrix; +extern JAVAPKG_API bool Vjava_unsigned_conversion; +extern JAVAPKG_API bool Vjava_debug; + +class JAVAPKG_API octave_java : public octave_base_value +{ +public: + octave_java (void) + : java_object (0), java_class (0) + { } + + octave_java (const octave_java& jobj) + : java_object (0), java_class (0) + { + init (jobj.java_object, jobj.java_class); + } + + octave_java (jobject obj, jclass cls = 0) + : java_object (0) + { + init (obj, cls); + } + + ~octave_java (void) + { + release (); + } + + jobject to_java () const { return java_object; } + jclass to_class () const { return java_class; } + std::string java_class_name () const { return java_type; } + + octave_base_value* clone(void) const { return new octave_java(*this); } + octave_base_value* empty_clone(void) const { return new octave_java(); } + + bool is_defined(void) const { return true; } + + bool is_map (void) const { return true; } + + string_vector map_keys(void) const; + + dim_vector dims(void) const; + + void print(std::ostream& os, bool pr_as_read_syntax = false) const + { + os << "<Java object: " << java_type << ">"; + newline(os); + } + + void print_raw(std::ostream& os, bool pr_as_read_syntax = false) const + { + print(os, pr_as_read_syntax); + } + + octave_value_list subsref (const std::string& type, const std::list<octave_value_list>& idx, int nargout); + + octave_value subsref (const std::string& type, + const std::list<octave_value_list>& idx) + { + octave_value_list retval = subsref (type, idx, 1); + return (retval.length () > 0 ? retval(0) : octave_value ()); + } + + octave_value subsasgn (const std::string& type, const std::list<octave_value_list>& idx, const octave_value& rhs); + + octave_value convert_to_str_internal (bool pad, bool force, char type) const; + + bool is_string (void) const + { + JNIEnv *current_env = thread_jni_env (); + + if (current_env && java_object) + { + jclass_ref cls (current_env, current_env->FindClass ("java/lang/String")); + return current_env->IsInstanceOf (java_object, cls); + } + return false; + } + + static JNIEnv* thread_jni_env (void); + + octave_value do_java_invoke (JNIEnv* jni_env, const std::string& name, + const octave_value_list& args); + + octave_value do_java_invoke (const std::string& name, const octave_value_list& args) + { return do_java_invoke(thread_jni_env (), name, args); } + + static octave_value do_java_invoke (JNIEnv* jni_env, const std::string& class_name, + const std::string& name, const octave_value_list& args); + + static octave_value do_java_invoke (const std::string& class_name, + const std::string& name, const octave_value_list& args) + { return do_java_invoke(thread_jni_env (), class_name, name, args); } + + static octave_value do_java_create (JNIEnv* jni_env, const std::string& name, + const octave_value_list& args); + + static octave_value do_java_create (const std::string& name, const octave_value_list& args) + { return do_java_create (thread_jni_env (), name, args); } + + octave_value do_java_get (JNIEnv* jni_env, const std::string& name); + + octave_value do_java_get (const std::string& name) + { return do_java_get (thread_jni_env (), name); } + + static octave_value do_java_get (JNIEnv* jni_env, const std::string& class_name, + const std::string& name); + + static octave_value do_java_get (const std::string& class_name, const std::string& name) + { return do_java_get (thread_jni_env (), class_name, name); } + + octave_value do_java_set (JNIEnv* jni_env, const std::string& name, const octave_value& val); + + octave_value do_java_set (const std::string& name, const octave_value& val) + { return do_java_set (thread_jni_env (), name, val); } + + static octave_value do_java_set (JNIEnv* jni_env, const std::string& class_name, + const std::string& name, const octave_value& val); + + static octave_value do_java_set (const std::string& class_name, const std::string& name, + const octave_value& val) + { return do_java_set (thread_jni_env (), class_name, name, val); } + +private: + void init (jobject jobj, jclass jcls) + { + JNIEnv *current_env = thread_jni_env (); + + if (current_env) + { + if (jobj) + java_object = current_env->NewGlobalRef (jobj); + if (jcls) + java_class = reinterpret_cast<jclass> (current_env->NewGlobalRef (jcls)); + else if (java_object) + { + jclass_ref ocls (current_env, current_env->GetObjectClass (java_object)); + java_class = reinterpret_cast<jclass> (current_env->NewGlobalRef (jclass (ocls))); + } + + if (java_class) + { + jclass_ref clsCls (current_env, current_env->GetObjectClass (java_class)); + jmethodID mID = current_env->GetMethodID (clsCls, "getCanonicalName", "()Ljava/lang/String;"); + jobject_ref resObj (current_env, current_env->CallObjectMethod (java_class, mID)); + java_type = jstring_to_string (current_env, resObj); + } + } + } + + void release () + { + JNIEnv *current_env = thread_jni_env (); + + if (current_env) + { + if (java_object) + current_env->DeleteGlobalRef (java_object); + if (java_class) + current_env->DeleteGlobalRef (java_class); + java_object = 0; + java_class = 0; + } + } + +private: + DECLARE_OCTAVE_ALLOCATOR + + DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA + + jobject java_object; + jclass java_class; + std::string java_type; +}; + +#endif /* __JAVA__H__ */ Modified: trunk/octave-forge/extra/java/src/configure.base =================================================================== --- trunk/octave-forge/extra/java/src/configure.base 2010-09-01 09:08:22 UTC (rev 7622) +++ trunk/octave-forge/extra/java/src/configure.base 2010-09-01 09:21:30 UTC (rev 7623) @@ -1,413 +1,413 @@ -dnl The configure script is generated by autogen.sh from configure.base -dnl and the various configure.add files in the source tree. Edit -dnl configure.base and reprocess rather than modifying ./configure. - -dnl autoconf 2.13 certainly doesn't work! What is the minimum requirement? -AC_PREREQ(2.2) - -AC_INIT(configure.base) - -PACKAGE=octave-forge -MAJOR_VERSION=0 -MINOR_VERSION=1 -PATCH_LEVEL=0 - -dnl Kill caching --- this ought to be the default -define([AC_CACHE_LOAD], )dnl -define([AC_CACHE_SAVE], )dnl - -dnl uncomment to put support files in another directory -dnl AC_CONFIG_AUX_DIR(admin) - -VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) - -dnl need to find admin files, so keep track of the top dir. -TOPDIR=`pwd` -AC_SUBST(TOPDIR) - -dnl if mkoctfile doesn't work, then we need the following: -dnl AC_PROG_CXX -dnl AC_PROG_F77 - -dnl Need C compiler regardless so define it in a way that -dnl makes autoconf happy and we can override whatever we -dnl need with mkoctfile -p. -dnl XXX FIXME XXX should use mkoctfile to get CC and CFLAGS -AC_PROG_CC - -dnl XXX FIXME XXX need tests for -p -c -s in mkoctfile. - -dnl ******************************************************************* -dnl Sort out mkoctfile version number and install paths - -dnl XXX FIXME XXX latest octave has octave-config so we don't -dnl need to discover things here. Doesn't have --exe-site-dir -dnl but defines --oct-site-dir and --m-site-dir - -dnl Check for mkoctfile -AC_CHECK_PROG(MKOCTFILE,mkoctfile,mkoctfile) -test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found on path]) - -AC_SUBST(ver) -AC_SUBST(subver) -AC_SUBST(mpath) -AC_SUBST(opath) -AC_SUBST(xpath) -AC_SUBST(altpath) -AC_SUBST(altmpath) -AC_SUBST(altopath) - -AC_ARG_WITH(path, - [ --with-path install path prefix], - [ path=$withval ]) -AC_ARG_WITH(mpath, - [ --with-mpath override path for m-files], - [mpath=$withval]) -AC_ARG_WITH(opath, - [ --with-opath override path for oct-files], - [opath=$withval]) -AC_ARG_WITH(xpath, - [ --with-xpath override path for executables], - [xpath=$withval]) -AC_ARG_WITH(altpath, - [ --with-altpath alternative functions install path prefix], - [ altpath=$withval ]) -AC_ARG_WITH(altmpath, - [ --with-altmpath override path for alternative m-files], - [altmpath=$withval]) -AC_ARG_WITH(altopath, - [ --with-altopath override path for alternative oct-files], - [altopath=$withval]) - -if test -n "$path" ; then - test -z "$mpath" && mpath=$path - test -z "$opath" && opath=$path/oct - test -z "$xpath" && xpath=$path/bin - test -z "$altpath" && altpath=$path-alternatives -fi - -if test -n "$altpath" ; then - test -z "$altmpath" && altmpath=$altpath - test -z "$altopath" && altopath=$altpath/oct -fi - -dnl Don't query if path/ver are given in the configure environment -#if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$altmpath" || test -z "$altopath" || test -z "$ver" ; then -if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$ver" ; then - dnl Construct program to get mkoctfile version and local install paths - cat > conftest.cc <<EOF -#include <octave/config.h> -#include <octave/version.h> -#include <octave/defaults.h> - -#define INFOV "\nINFOV=" OCTAVE_VERSION "\n" - -#define INFOH "\nINFOH=" OCTAVE_CANONICAL_HOST_TYPE "\n" - -#ifdef OCTAVE_LOCALVERFCNFILEDIR -# define INFOM "\nINFOM=" OCTAVE_LOCALVERFCNFILEDIR "\n" -#else -# define INFOM "\nINFOM=" OCTAVE_LOCALFCNFILEPATH "\n" -#endif - -#ifdef OCTAVE_LOCALVEROCTFILEDIR -# define INFOO "\nINFOO=" OCTAVE_LOCALVEROCTFILEDIR "\n" -#else -# define INFOO "\nINFOO=" OCTAVE_LOCALOCTFILEPATH "\n" -#endif - -#ifdef OCTAVE_LOCALVERARCHLIBDIR -# define INFOX "\nINFOX=" OCTAVE_LOCALVERARCHLIBDIR "\n" -#else -# define INFOX "\nINFOX=" OCTAVE_LOCALARCHLIBDIR "\n" -#endif - -const char *infom = INFOM; -const char *infoo = INFOO; -const char *infox = INFOX; -const char *infoh = INFOH; -const char *infov = INFOV; -EOF - - dnl Compile program perhaps with a special version of mkoctfile - $MKOCTFILE conftest.cc || AC_MSG_ERROR(Could not run $MKOCTFILE) - - dnl Strip the config info from the compiled file - eval `strings conftest.o | grep "^INFO.=" | sed -e "s,//.*$,,"` - rm -rf conftest* - - dnl set the appropriate variables if they are not already set - ver=`echo $INFOV | sed -e "s/\.//" -e "s/\..*$//"` - subver=`echo $INFOV | sed -e "[s/^[^.]*[.][^.]*[.]//]"` - alt_mbase=`echo $INFOM | sed -e "[s,\/[^\/]*$,,]"` - alt_obase=`echo $INFOO | sed -e "[s,/site.*$,/site,]"` - test -z "$mpath" && mpath=$INFOM/octave-forge - test -z "$opath" && opath=$INFOO/octave-forge - test -z "$xpath" && xpath=$INFOX - test -z "$altmpath" && altmpath=$alt_mbase/octave-forge-alternatives/m - test -z "$altopath" && altopath=$alt_obase/octave-forge-alternatives/oct/$INFOH -fi - -dnl ******************************************************************* - -dnl XXX FIXME XXX Should we allow the user to override these? -dnl Do we even need them? The individual makefiles can call mkoctfile -p -dnl themselves, so the only reason to keep them is for configure, and -dnl for those things which are not built using mkoctfile (e.g., aurecord) -dnl but it is not clear we should be using octave compile flags for those. - -dnl C compiler and flags -AC_MSG_RESULT([retrieving compile and link flags from $MKOCTFILE]) -CC=`$MKOCTFILE -p CC` -CFLAGS=`$MKOCTFILE -p CFLAGS` -CPPFLAGS=`$MKOCTFILE -p CPPFLAGS` -CPICFLAG=`$MKOCTFILE -p CPICFLAG` -LDFLAGS=`$MKOCTFILE -p LDFLAGS` -LIBS=`$MKOCTFILE -p LIBS` -AC_SUBST(CC) -AC_SUBST(CFLAGS) -AC_SUBST(CPPFLAGS) -AC_SUBST(CPICFLAG) - -dnl Fortran compiler and flags -F77=`$MKOCTFILE -p F77` -FFLAGS=`$MKOCTFILE -p FFLAGS` -FPICFLAG=`$MKOCTFILE -p FPICFLAG` -AC_SUBST(F77) -AC_SUBST(FFLAGS) -AC_SUBST(FPICFLAG) - -dnl C++ compiler and flags -CXX=`$MKOCTFILE -p CXX` -CXXFLAGS=`$MKOCTFILE -p CXXFLAGS` -CXXPICFLAG=`$MKOCTFILE -p CXXPICFLAG` -AC_SUBST(CXX) -AC_SUBST(CXXFLAGS) -AC_SUBST(CXXPICFLAG) - -dnl linker flags -LFLAGS=`$MKOCTFILE -p LFLAGS` -AC_SUBST(LFLAGS) - -dnl ******************************************************************* - -dnl Check for features of your version of mkoctfile. -dnl All checks should be designed so that the default -dnl action if the tests are not performed is to do whatever -dnl is appropriate for the most recent version of Octave. - -dnl Define the following macro: -dnl OF_CHECK_LIB(lib,fn,true,false,helpers) -dnl This is just like AC_CHECK_LIB, but it doesn't update LIBS -AC_DEFUN(OF_CHECK_LIB, -[save_LIBS="$LIBS" -AC_CHECK_LIB($1,$2,$3,$4,$5) -LIBS="$save_LIBS" -]) - -dnl Define the following macro: -dnl TRY_MKOCTFILE(msg,program,action_if_true,action_if_false) -dnl -AC_DEFUN(TRY_MKOCTFILE, -[AC_MSG_CHECKING($1) -cat > conftest.cc << EOF -#include <octave/config.h> -$2 -EOF -ac_try="$MKOCTFILE -c conftest.cc" -if AC_TRY_EVAL(ac_try) ; then - AC_MSG_RESULT(yes) - $3 -else - AC_MSG_RESULT(no) - $4 -fi -]) - -dnl -dnl Check if F77_FUNC works with MKOCTFILE -dnl -TRY_MKOCTFILE([for F77_FUNC], -[int F77_FUNC (hello, HELLO) (const int &n);],, -[MKOCTFILE="$MKOCTFILE -DF77_FUNC=F77_FCN"]) - -dnl ********************************************************** - -dnl Evaluate an expression in octave -dnl -dnl OCTAVE_EVAL(expr,var) -> var=expr -dnl -AC_DEFUN(OCTAVE_EVAL, -[AC_MSG_CHECKING([for $1 in Octave]) -$2=`echo "disp($1)" | $OCTAVE -qf` -AC_MSG_RESULT($$2) -AC_SUBST($2) -]) - -dnl Check status of an octave variable -dnl -dnl OCTAVE_CHECK_EXIST(variable,action_if_true,action_if_false) -dnl -AC_DEFUN(OCTAVE_CHECK_EXIST, -[AC_MSG_CHECKING([for $1 in Octave]) -if test `echo 'disp(exist("$1"))' | $OCTAVE -qf`X != 0X ; then - AC_MSG_RESULT(yes) - $2 -else - AC_MSG_RESULT(no) - $3 -fi -]) - -dnl should check that $(OCTAVE) --version matches $(MKOCTFILE) --version -AC_CHECK_PROG(OCTAVE,octave,octave) -OCTAVE_EVAL(OCTAVE_VERSION,OCTAVE_VERSION) - -dnl grab canonical host type so we can write system specific install stuff -OCTAVE_EVAL(octave_config_info('canonical_host_type'),canonical_host_type) - -dnl grab SHLEXT from octave config -OCTAVE_EVAL(octave_config_info('SHLEXT'),SHLEXT) - -AC_PROG_LN_S - -AC_PROG_RANLIB - -dnl Use $(COPY_FLAGS) to set options for cp when installing .oct files. -COPY_FLAGS="-Rfp" -case "$canonical_host_type" in - *-*-linux*) - COPY_FLAGS="-fdp" - ;; -esac -AC_SUBST(COPY_FLAGS) - -dnl Use $(STRIP) in the makefile to strip executables. If not found, -dnl STRIP expands to ':', which in the makefile does nothing. -dnl Don't need this for .oct files since mkoctfile handles them directly -STRIP=${STRIP-strip} -AC_CHECK_PROG(STRIP,$STRIP,$STRIP,:) - -dnl Strip on windows, don't strip on Mac OS/X or IRIX -dnl For the rest, you can force strip using MKOCTFILE="mkoctfile -s" -dnl or avoid strip using STRIP=: before ./configure -case "$canonical_host_type" in - powerpc-apple-darwin*|*-sgi-*) - STRIP=: - ;; - *-cygwin-*|*-mingw-*) - MKOCTFILE="$MKOCTFILE -s" - ;; -esac - -AC_SUBST(JAVAC) -AC_SUBST(JAR) -AC_SUBST(JAVA_HOME) -AC_SUBST(JAVA_ARCH) -AC_SUBST(JAVA_INCS) -AC_SUBST(JAVA_LIBS) -AC_SUBST(HAVE_JAVA) - -if test -z "$JAVA_HOME"; then - AC_CHECK_PROG(JAVA, java, java) - AC_CHECK_PROG(JAVAC, javac, javac) - AC_CHECK_PROG(JAR, jar, jar) -else - AC_PATH_PROG(JAVA, java, [], [$JAVA_HOME/bin$PATH_SEPARATOR$PATH]) - AC_PATH_PROG(JAVAC, javac, [], [$JAVA_HOME/bin$PATH_SEPARATOR$PATH]) - AC_PATH_PROG(JAR, jar, [], [$JAVA_HOME/bin$PATH_SEPARATOR$PATH]) -fi -HAVE_JAVA="Java Development Kit not found" -if test -n "$JAVAC" -a -n "$JAR"; then - AC_MSG_CHECKING([for Java version]) - java_version=[`$JAVA -version 2>&1 | sed -n -e 's/^java version[^0-9"]*"\([^"]*\)"/\1/p'`] - AC_MSG_RESULT($java_version) - java_major=[`echo -n $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\1/'`] - java_minor=[`echo -n $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\2/'`] - if test $java_major -ge 1 -a $java_minor -ge 5; then - case "$canonical_host_type" in - *-msdosmsvc*) - HAVE_JAVA=yes - JAVA_LIBS=-ladvapi32 - ;; - *) - if test -z "$JAVA_HOME"; then - # This is the location of Java on an OS X box. In this - # directory we can find the various versions of a - # JavaVMs. Check for the newest version set the JAVA_HOME - # variable. - if test -d "/System/Library/Frameworks/JavaVM.framework"; then - # Sneak the -framework flag into mkoctfile via LFLAGS - LFLAGS="$LFLAGS -framework JavaVM" - JAVA_TEMP="/System/Library/Frameworks/JavaVM.framework" - JAVA_HOME="${JAVA_TEMP}/Home" - JAVA_ARCH="${JAVA_TEMP}/Libraries/libjvm_compat.dylib" - # According to: - # http://developer.apple.com/unix/crossplatform.html - # you need to explicitely set the include path - JAVA_INCS="-I${JAVA_HOME}/include" - HAVE_JAVA=yes - # This is the Debian default path - elif test -d "/usr/lib/jvm/default-java"; then - JAVA_HOME=/usr/lib/jvm/default-java - else - JAVA_HOME=/usr/lib/jvm - fi - fi - JAVA_HOME=[`echo -n $JAVA_HOME | sed -e 's|/$||'`] - if test -z "$JAVA_ARCH"; then - if test -d "${JAVA_HOME}/jre/lib/i386"; then - JAVA_ARCH="i386"; - elif test -d "${JAVA_HOME}/jre/lib/amd64"; then - JAVA_ARCH="amd64" - elif test -d "${JAVA_HOME}/jre/lib/mac"; then - JAVA_ARCH="mac" - elif test -d "${JAVA_HOME}/jre/lib/maci"; then - JAVA_ARCH="maci" - elif test -d "${JAVA_HOME}/jre/lib/solaris"; then - JAVA_ARCH="solaris" - elif test -d "${JAVA_HOME}/jre/lib/solarisv9"; then - JAVA_ARCH="solarisv9" - fi - if test -n "$JAVA_ARCH"; then - HAVE_JAVA=yes - case "$canonical_host_type" in - *-mingw* | *-cygwin*) - JAVA_LIBS=-ladvapi32 - JAVA_INCS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/win32" - ;; - *) - JAVA_INCS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux" - ;; - esac - fi - fi - ;; - esac - else - AC_MSG_WARN([this package requires at least Java-1.5]) - fi -fi - -CONFIGURE_OUTPUTS="Makeconf" -STATUS_MSG=" -octave commands will install into the following directories: - m-files: $mpath - oct-files: $opath - binaries: $xpath -alternatives: - m-files: $altmpath - oct-files: $altopath - -shell commands will install into the following directories: - binaries: $bindir - man pages: $mandir - libraries: $libdir - headers: $includedir - -octave-forge is configured with - octave: $OCTAVE (version $OCTAVE_VERSION) - mkoctfile: $MKOCTFILE for Octave $subver - java: $HAVE_JAVA" +dnl The configure script is generated by autogen.sh from configure.base +dnl and the various configure.add files in the source tree. Edit +dnl configure.base and reprocess rather than modifying ./configure. + +dnl autoconf 2.13 certainly doesn't work! What is the minimum requirement? +AC_PREREQ(2.2) + +AC_INIT(configure.base) + +PACKAGE=octave-forge +MAJOR_VERSION=0 +MINOR_VERSION=1 +PATCH_LEVEL=0 + +dnl Kill caching --- this ought to be the default +define([AC_CACHE_LOAD], )dnl +define([AC_CACHE_SAVE], )dnl + +dnl uncomment to put support files in another directory +dnl AC_CONFIG_AUX_DIR(admin) + +VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) + +dnl need to find admin files, so keep track of the top dir. +TOPDIR=`pwd` +AC_SUBST(TOPDIR) + +dnl if mkoctfile doesn't work, then we need the following: +dnl AC_PROG_CXX +dnl AC_PROG_F77 + +dnl Need C compiler regardless so define it in a way that +dnl makes autoconf happy and we can override whatever we +dnl need with mkoctfile -p. +dnl XXX FIXME XXX should use mkoctfile to get CC and CFLAGS +AC_PROG_CC + +dnl XXX FIXME XXX need tests for -p -c -s in mkoctfile. + +dnl ******************************************************************* +dnl Sort out mkoctfile version number and install paths + +dnl XXX FIXME XXX latest octave has octave-config so we don't +dnl need to discover things here. Doesn't have --exe-site-dir +dnl but defines --oct-site-dir and --m-site-dir + +dnl Check for mkoctfile +AC_CHECK_PROG(MKOCTFILE,mkoctfile,mkoctfile) +test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found on path]) + +AC_SUBST(ver) +AC_SUBST(subver) +AC_SUBST(mpath) +AC_SUBST(opath) +AC_SUBST(xpath) +AC_SUBST(altpath) +AC_SUBST(altmpath) +AC_SUBST(altopath) + +AC_ARG_WITH(path, + [ --with-path install path prefix], + [ path=$withval ]) +AC_ARG_WITH(mpath, + [ --with-mpath override path for m-files], + [mpath=$withval]) +AC_ARG_WITH(opath, + [ --with-opath override path for oct-files], + [opath=$withval]) +AC_ARG_WITH(xpath, + [ --with-xpath override path for executables], + [xpath=$withval]) +AC_ARG_WITH(altpath, + [ --with-altpath alternative functions install path prefix], + [ altpath=$withval ]) +AC_ARG_WITH(altmpath, + [ --with-altmpath override path for alternative m-files], + [altmpath=$withval]) +AC_ARG_WITH(altopath, + [ --with-altopath override path for alternative oct-files], + [altopath=$withval]) + +if test -n "$path" ; then + test -z "$mpath" && mpath=$path + test -z "$opath" && opath=$path/oct + test -z "$xpath" && xpath=$path/bin + test -z "$altpath" && altpath=$path-alternatives +fi + +if test -n "$altpath" ; then + test -z "$altmpath" && altmpath=$altpath + test -z "$altopath" && altopath=$altpath/oct +fi + +dnl Don't query if path/ver are given in the configure environment +#if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$altmpath" || test -z "$altopath" || test -z "$ver" ; then +if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$ver" ; then + dnl Construct program to get mkoctfile version and local install paths + cat > conftest.cc <<EOF +#include <octave/config.h> +#include <octave/version.h> +#include <octave/defaults.h> + +#define INFOV "\nINFOV=" OCTAVE_VERSION "\n" + +#define INFOH "\nINFOH=" OCTAVE_CANONICAL_HOST_TYPE "\n" + +#ifdef OCTAVE_LOCALVERFCNFILEDIR +# define INFOM "\nINFOM=" OCTAVE_LOCALVERFCNFILEDIR "\n" +#else +# define INFOM "\nINFOM=" OCTAVE_LOCALFCNFILEPATH "\n" +#endif + +#ifdef OCTAVE_LOCALVEROCTFILEDIR +# define INFOO "\nINFOO=" OCTAVE_LOCALVEROCTFILEDIR "\n" +#else +# define INFOO "\nINFOO=" OCTAVE_LOCALOCTFILEPATH "\n" +#endif + +#ifdef OCTAVE_LOCALVERARCHLIBDIR +# define INFOX "\nINFOX=" OCTAVE_LOCALVERARCHLIBDIR "\n" +#else +# define INFOX "\nINFOX=" OCTAVE_LOCALARCHLIBDIR "\n" +#endif + +const char *infom = INFOM; +const char *infoo = INFOO; +const char *infox = INFOX; +const char *infoh = INFOH; +const char *infov = INFOV; +EOF + + dnl Compile program perhaps with a special version of mkoctfile + $MKOCTFILE conftest.cc || AC_MSG_ERROR(Could not run $MKOCTFILE) + + dnl Strip the config info from the compiled file + eval `strings conftest.o | grep "^INFO.=" | sed -e "s,//.*$,,"` + rm -rf conftest* + + dnl set the appropriate variables if they are not already set + ver=`echo $INFOV | sed -e "s/\.//" -e "s/\..*$//"` + subver=`echo $INFOV | sed -e "[s/^[^.]*[.][^.]*[.]//]"` + alt_mbase=`echo $INFOM | sed -e "[s,\/[^\/]*$,,]"` + alt_obase=`echo $INFOO | sed -e "[s,/site.*$,/site,]"` + test -z "$mpath" && mpath=$INFOM/octave-forge + test -z "$opath" && opath=$INFOO/octave-forge + test -z "$xpath" && xpath=$INFOX + test -z "$altmpath" && altmpath=$alt_mbase/octave-forge-alternatives/m + test -z "$altopath" && altopath=$alt_obase/octave-forge-alternatives/oct/$INFOH +fi + +dnl ******************************************************************* + +dnl XX... [truncated message content] |