From: <hez...@us...> - 2011-08-14 01:03:24
|
Revision: 11884 http://plplot.svn.sourceforge.net/plplot/?rev=11884&view=rev Author: hezekiahcarty Date: 2011-08-14 01:03:18 +0000 (Sun, 14 Aug 2011) Log Message: ----------- Experimental support for building OCaml bindings with a static PLplot core The OCaml bindings could only previously be compiled against a shared library version of PLplot. This commit updates the CMake rules so that, at least on my system (Ubunty 11.04, 64bit), the OCaml bindings and examples build and run properly when -DBUILD_SHARED_LIBS=OFF is passed to cmake. Testing on other distributions and OSs is welcome! Modified Paths: -------------- trunk/bindings/ocaml/CMakeLists.txt trunk/cmake/modules/ocaml.cmake trunk/examples/ocaml/CMakeLists.txt Modified: trunk/bindings/ocaml/CMakeLists.txt =================================================================== --- trunk/bindings/ocaml/CMakeLists.txt 2011-08-14 01:02:52 UTC (rev 11883) +++ trunk/bindings/ocaml/CMakeLists.txt 2011-08-14 01:03:18 UTC (rev 11884) @@ -27,6 +27,32 @@ # Optionally build the Plcairo module add_subdirectory(plcairo) + # Stack on a bunch of extra flags if we are building against a static PLplot core + set(ocaml_STATIC_FLAGS) + if(NOT BUILD_SHARED_LIBS) + foreach(DEP ${plplotd_LIB_DEPENDS} ${csirocsa_LIB_DEPENDS} ${csironn_LIB_DEPENDS}) + if(DEP STREQUAL "csirocsa" OR DEP STREQUAL "csironn" OR DEP STREQUAL "qsastime") + set(internal_LIB_DIR) + if(DEP STREQUAL "csirocsa") + set(internal_LIB_DIR "csa") + elseif(DEP STREQUAL "csironn") + set(internal_LIB_DIR "nn") + elseif(DEP STREQUAL "qsastime") + set(internal_LIB_DIR "qsastime") + endif() + set(ocaml_STATIC_FLAGS ${ocaml_STATIC_FLAGS} -cclib ${CMAKE_BINARY_DIR}/lib/${internal_LIB_DIR}/lib${DEP}.a) + elseif(DEP STREQUAL "general") + set(ocaml_STATIC_FLAGS ${ocaml_STATIC_FLAGS}) + else() + if(DEP MATCHES "^-") + set(ocaml_STATIC_FLAGS ${ocaml_STATIC_FLAGS} -ccopt ${DEP}) + else() + set(ocaml_STATIC_FLAGS ${ocaml_STATIC_FLAGS} -cclib ${DEP}) + endif() + endif() + endforeach(DEP ${plplotd_LIB_DEPENDS}) + endif(NOT BUILD_SHARED_LIBS) + # optional command to generate generated_plplot_h.inc. This generated # version of the file should be identical to plplot_h.inc. if(GENERATE_PLPLOT_H_INC) @@ -76,7 +102,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/libplplot_stubs.a COMMAND ${OCAMLC} -c ${CMAKE_CURRENT_BINARY_DIR}/plplot_core_stubs.c COMMAND ${OCAMLC} -ccopt -I${CMAKE_SOURCE_DIR}/include -ccopt -I${CMAKE_BINARY_DIR}/include -ccopt -I${CMAKE_SOURCE_DIR}/lib/qsastime -c ${CMAKE_CURRENT_SOURCE_DIR}/plplot_impl.c - COMMAND ${OCAMLMKLIB} -o plplot_stubs -L${CAMLIDL_LIB_DIR} -lcamlidl -L${CMAKE_BINARY_DIR}/src -lplplot${LIB_TAG} ${CMAKE_CURRENT_BINARY_DIR}/plplot_core_stubs.o ${CMAKE_CURRENT_BINARY_DIR}/plplot_impl.o + COMMAND ${OCAMLMKLIB} -o plplot_stubs -L${CAMLIDL_LIB_DIR} -lcamlidl -L${CMAKE_BINARY_DIR}/src -lplplot${LIB_TAG} ${CMAKE_CURRENT_BINARY_DIR}/plplot_core_stubs.o ${CMAKE_CURRENT_BINARY_DIR}/plplot_impl.o ${ocaml_STATIC_FLAGS} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/plplot_core_stubs.c ${CMAKE_CURRENT_SOURCE_DIR}/plplot_impl.c @@ -135,7 +161,7 @@ add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/plplot.cma - COMMAND ${OCAMLC} -a -custom -o ${CMAKE_CURRENT_BINARY_DIR}/plplot.cma ${CMAKE_CURRENT_BINARY_DIR}/plplot_core.cmo ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmo -dllib -lplplot_stubs -ccopt -L${CMAKE_CURRENT_BINARY_DIR} -cclib -lplplot_stubs -ccopt -L${CAMLIDL_LIB_DIR} -cclib -lcamlidl -ccopt -L${CMAKE_BINARY_DIR}/src -cclib -lplplot${LIB_TAG} -dllpath ${CMAKE_BINARY_DIR}/src + COMMAND ${OCAMLC} -a -custom -o ${CMAKE_CURRENT_BINARY_DIR}/plplot.cma ${CMAKE_CURRENT_BINARY_DIR}/plplot_core.cmo ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmo -dllib -lplplot_stubs -ccopt -L${CMAKE_CURRENT_BINARY_DIR} -cclib -lplplot_stubs -ccopt -L${CAMLIDL_LIB_DIR} -cclib -lcamlidl -ccopt -L${CMAKE_BINARY_DIR}/src -cclib -lplplot${LIB_TAG} -dllpath ${CMAKE_BINARY_DIR}/src ${ocaml_STATIC_FLAGS} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/plplot_core.cmo ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmo @@ -188,7 +214,7 @@ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmxa ${CMAKE_CURRENT_BINARY_DIR}/plplot.a - COMMAND ${OCAMLOPT} -a -o ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmxa ${CMAKE_CURRENT_BINARY_DIR}/plplot_core.cmx ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmx -ccopt -L${CMAKE_CURRENT_BINARY_DIR} -cclib -lplplot_stubs -ccopt -L${CAMLIDL_LIB_DIR} -cclib -lcamlidl -ccopt -L${CMAKE_BINARY_DIR}/src -cclib -lplplot${LIB_TAG} + COMMAND ${OCAMLOPT} -a -o ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmxa ${CMAKE_CURRENT_BINARY_DIR}/plplot_core.cmx ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmx -ccopt -L${CMAKE_CURRENT_BINARY_DIR} -cclib -lplplot_stubs -ccopt -L${CAMLIDL_LIB_DIR} -cclib -lcamlidl -ccopt -L${CMAKE_BINARY_DIR}/src -cclib -lplplot${LIB_TAG} ${ocaml_STATIC_FLAGS} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/plplot_core.cmx ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmx Modified: trunk/cmake/modules/ocaml.cmake =================================================================== --- trunk/cmake/modules/ocaml.cmake 2011-08-14 01:02:52 UTC (rev 11883) +++ trunk/cmake/modules/ocaml.cmake 2011-08-14 01:03:18 UTC (rev 11884) @@ -28,9 +28,10 @@ endif(DEFAULT_NO_BINDINGS) if(ENABLE_ocaml AND NOT BUILD_SHARED_LIBS) - message(STATUS "WARNING: " - "OCaml requires shared libraries. Disabling ocaml bindings") - set(ENABLE_ocaml OFF CACHE BOOL "Enable OCaml bindings" FORCE) + message(STATUS "NOTICE: " + "OCaml requires -fPIC flag when building static PLplot. Forcing -fPIC for C and C++ compilation.") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") endif(ENABLE_ocaml AND NOT BUILD_SHARED_LIBS) if(ENABLE_ocaml) Modified: trunk/examples/ocaml/CMakeLists.txt =================================================================== --- trunk/examples/ocaml/CMakeLists.txt 2011-08-14 01:02:52 UTC (rev 11883) +++ trunk/examples/ocaml/CMakeLists.txt 2011-08-14 01:03:18 UTC (rev 11884) @@ -120,10 +120,14 @@ set(ocaml_EXTRA_CLEAN_FILES) if(CORE_BUILD) set(I_OPTION ${CMAKE_BINARY_DIR}/bindings/ocaml) - set(ccopt_OPTION "-L ${CMAKE_BINARY_DIR}/src -Wl,-rpath -Wl,${CMAKE_BINARY_DIR}/src ") + if(BUILD_SHARED_LIBS) + set(ccopt_OPTION -ccopt "-L ${CMAKE_BINARY_DIR}/src -Wl,-rpath -Wl,${CMAKE_BINARY_DIR}/src ") + endif() else(CORE_BUILD) set(I_OPTION ${OCAML_INSTALL_DIR}/plplot) - set(ccopt_OPTION "-L ${CMAKE_INSTALL_LIBDIR} -Wl,-rpath -Wl,${CMAKE_INSTALL_LIBDIR} ") + if(BUILD_SHARED_LIBS) + set(ccopt_OPTION -ccopt "-L ${CMAKE_INSTALL_LIBDIR} -Wl,-rpath -Wl,${CMAKE_INSTALL_LIBDIR} ") + endif() endif(CORE_BUILD) get_property(files_plplot_ocaml GLOBAL PROPERTY FILES_plplot_ocaml) @@ -155,7 +159,7 @@ COMMAND ${ocaml_compiler} -g -I ${I_OPTION} - -ccopt ${ccopt_OPTION} + ${ccopt_OPTION} plplot.${ocaml_lib_extension} ${unix_lib} -o ${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE_NAME} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |