octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: java package and MacOS


From: Daniel J Sebald
Subject: Re: java package and MacOS
Date: Tue, 27 Nov 2012 15:30:30 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Thunderbird/3.1.16

On 11/27/2012 02:58 PM, Ben Abbott wrote:
On Nov 25, 2012, at 6:27 PM, Ben Abbott wrote:

On Nov 25, 2012, at 3:29 PM, Alexander Hansen wrote:

On 11/25/12 12:37 PM, Ben Abbott wrote:
Adding the Octave Forge java package to core Octave breaks building Octave on 
MacOS X.

        http://hg.savannah.gnu.org/hgweb/octave/rev/acf0addfc610

libtool: link: /opt/local/bin/g++-mp-4.5  -o dldfcn/.libs/__java__.so -bundle  
dldfcn/.libs/dldfcn___java___la-__java__.o   -L/opt/local/lib 
./.libs/liboctinterp.dylib -L/opt/local/libexec/llvm-3.1/lib 
-L/opt/local/lib/gcc45/gcc/x86_64-apple-darwin11/4.5.4 
-L/opt/local/lib/gcc45/gcc/x86_64-apple-darwin11/4.5.4/../../.. 
-L/opt/local/lib/gcc45 
/Users/bpabbott/Development/mercurial/default/sources/liboctave/.libs/liboctave.dylib
 -lfltk_gl -lfltk -lpthread /opt/local/lib/libhdf5.dylib 
/opt/local/lib/libfontconfig.dylib /opt/local/lib/libiconv.dylib 
/opt/local/lib/libfreetype.dylib -lz -lbz2 /opt/local/lib/libexpat.dylib 
/opt/local/lib/libX11.dylib /opt/local/lib/libxcb.dylib 
/opt/local/lib/libXau.dylib /opt/local/lib/libXdmcp.dylib -lLLVMAsmParser 
-lLLVMInstrumentation -lLLVMLinker -lLLVMArchive -lLLVMBitReader 
-lLLVMDebugInfo -lLLVMJIT -lLLVMipo -lLLVMVectorize -lLLVMBitWriter 
-lLLVMTableGen -lLLVMHexagonCodeGen -lLLVMHexagonAsmPrinter -lLLVMHexagonDesc 
-lLLVMHexagonInfo
-lLLVMPTXCodeG
en -lLLVMPTXDesc -lLLVMPTXInfo -lLLVMPTXAsmPrinter -lLLVMMBlazeDisassembler 
-lLLVMMBlazeAsmParser -lLLVMMBlazeCodeGen -lLLVMMBlazeDesc -lLLVMMBlazeInfo 
-lLLVMMBlazeAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo 
-lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter 
-lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMCellSPUCodeGen 
-lLLVMCellSPUDesc -lLLVMCellSPUInfo -lLLVMMipsDisassembler -lLLVMMipsAsmParser 
-lLLVMMipsCodeGen -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter 
-lLLVMARMDisassembler -lLLVMARMAsmParser -lLLVMARMCodeGen -lLLVMARMDesc 
-lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCCodeGen -lLLVMPowerPCDesc 
-lLLVMPowerPCAsmPrinter -lLLVMPowerPCInfo -lLLVMSparcCodeGen -lLLVMSparcDesc 
-lLLVMSparcInfo -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter 
-lLLVMX86AsmParser -lLLVMX86Disassembler -lLLVMX86Desc -lLLVMX86Info 
-lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCDisassembler -lLLVMMCParser 
-lLLVMInterpreter -lLLVMCodeGen -lLLVM
ScalarOpts
-l
LLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMMCJIT 
-lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMTarget -lLLVMMC -lLLVMObject 
-lLLVMCore -lLLVMSupport ../liboctave/.libs/liboctave.dylib -lstdc++ -lcholmod 
-lmetis -lumfpack -lsuitesparseconfig -lamd -lcamd -lcolamd -lccolamd 
-lcxsparse /opt/local/lib/libarpack.dylib -ltatlas -lqrupdate 
/opt/local/lib/libfftw3.dylib /opt/local/lib/libfftw3f.dylib -llapack -lcblas 
-lf77blas -latlas -lreadline -lncurses /opt/local/lib/libpcre.dylib -ldl 
/opt/local/lib/gcc45/libgfortran.dylib -lm  -O0 -m64 -pthread -Wl,-dylib_file 
-Wl,/usr/fubar/lib/octave/3.7.0+/liboctave.1.dylib:/Users/bpabbott/Development/mercurial/default/sources/liboctave/.libs/liboctave.dylib
   -pthread -framework AGL -framework OpenGL -framework ApplicationServices 
-framework Cocoa
Undefined symbols for architecture x86_64:
"_JNI_CreateJavaVM", referenced from:
     initialize_jvm()      in dldfcn___java___la-__java__.o
"_JNI_GetCreatedJavaVMs", referenced from:
     initialize_jvm()      in dldfcn___java___la-__java__.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[3]: *** [dldfcn/__java__.la] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

Looking at config.log, I have the follow defined.

#define JAVA_ARCH ""
#define JAVA_HOME ""
ac_cv_prog_JAVA=java
ac_cv_prog_JAVAC=javac
JAVA='java'
JAVAC='javac'
JAVA_CPPFLAGS=''
JAVA_LIBS=''

Ben


Unless I missed seeing it, I didn't notice anything referencing a Java
library in that linker line, so that would indeed result in missing
symbols. :-)

What happens if you set JAVA_HOME before configuring, e.g. by

export JAVA_HOME=`/usr/libexec/java_home`

?

I haven't tried JAVA_HOME, but setting JAVA_LIBS allowed the build to complete.

        export JAVA_LIBS="-framework JavaVM"

Maybe this should be set in configure.ac for MacOS?

Ben

Carlo's change to configure.ac works for me.

http://octave.1599824.n4.nabble.com/changeset-for-configuring-with-Java-on-OSX-tt4647251.html

When I try "dlgtest(0)" I get ...

        Java JDK home directory  does not exist.
        Please adapt java_home in dlgtest.m.

Setting JAVA_HOME to that used during the build gives ...

        setenv JAVA_HOME "/System/Library/Frameworks/JavaVM.framework/Home"

Now "dlgtest(0)" results in ...

        0 ... STOP
        1 ... listdlg tests
        2 ... errordlg tests
        3 ... warndlg tests
        4 ... helpdlg tests
        5 ... inputdlg tests
        6 ... TeX code tests
        Run which test?   [0]>

Is this the expected result?

Ben

Yes. When you run one of those tests there should be some dialog boxes appear on the screen if Java is working properly.

BTW, I've just altered dlgtest on my local copy so that it doesn't return if the JAVA_HOME variable isn't defined. Instead, it issues the current warning and continues on. When unsetting the JAVA_HOME variable with

export -n JAVA_HOME

the Java demo seems to still work properly. I think this conditional can be removed. It isn't clear to me where/why JAVA_HOME definition is required. I'm guessing it is interior to Octave java support somewhere and dlgtest() is assuming something about its requirement, but I keep thinking Octave should just fall back on "java" and "javac" as set up by the shell if nothing else.

As an aside, the function "getenv" doesn't seem to make a distinction between an environment variable not being set and an environment variable set to nothing. Both those cases result in an empty string. Is it worth making a distinction here, either returning a different result or a new routine "isenv()"?

Dan


reply via email to

[Prev in Thread] Current Thread [Next in Thread]