From: <ai...@us...> - 2013-12-17 01:25:33
|
Revision: 12872 http://sourceforge.net/p/plplot/code/12872 Author: airwin Date: 2013-12-17 01:25:27 +0000 (Tue, 17 Dec 2013) Log Message: ----------- Many rpath fixups for the case where Tcl/Tk is not installed in a system location. Modified Paths: -------------- trunk/bindings/tcl/CMakeLists.txt trunk/cmake/modules/tcl-related.cmake trunk/cmake/modules/tk.cmake trunk/examples/CMakeLists.txt trunk/examples/tk/Makefile.examples.in trunk/src/CMakeLists.txt Modified: trunk/bindings/tcl/CMakeLists.txt =================================================================== --- trunk/bindings/tcl/CMakeLists.txt 2013-12-17 01:18:23 UTC (rev 12871) +++ trunk/bindings/tcl/CMakeLists.txt 2013-12-17 01:25:27 UTC (rev 12872) @@ -74,7 +74,8 @@ endif(USE_TCL_TK_STUBS) if(USE_RPATH) - set(LIB_INSTALL_RPATH ${LIB_DIR}) + set(LIB_INSTALL_RPATH ${LIB_DIR} ${TCL_RPATH}) + filter_rpath(LIB_INSTALL_RPATH) set_target_properties(tclmatrix${LIB_TAG} PROPERTIES SOVERSION ${tclmatrix_SOVERSION} @@ -360,6 +361,8 @@ if(USE_RPATH) get_target_property(LIB_INSTALL_RPATH plplot${LIB_TAG} INSTALL_RPATH) + list(APPEND LIB_INSTALL_RPATH ${TCL_TK_RPATH}) + filter_rpath(LIB_INSTALL_RPATH) set_target_properties(plplottcltk${LIB_TAG} PROPERTIES SOVERSION ${plplottcltk_SOVERSION} @@ -368,6 +371,9 @@ INSTALL_NAME_DIR "${LIB_DIR}" ) + # This version of LIB_INSTALL_RPATH also used below for pltcl. + list(APPEND LIB_INSTALL_RPATH ${TCL_TK_ITCL_ITK_RPATH}) + filter_rpath(LIB_INSTALL_RPATH) set_target_properties(plplottcltk_Main${LIB_TAG} PROPERTIES SOVERSION ${plplottcltk_Main_SOVERSION} Modified: trunk/cmake/modules/tcl-related.cmake =================================================================== --- trunk/cmake/modules/tcl-related.cmake 2013-12-17 01:18:23 UTC (rev 12871) +++ trunk/cmake/modules/tcl-related.cmake 2013-12-17 01:25:27 UTC (rev 12872) @@ -41,27 +41,31 @@ # further. #TCL_INCLUDE_PATH -#TCL_LIBRARY (Always the non-stub version) -#TCL_STUB_LIBRARY (Always the stub version) +#TCL_LIBRARY (Always the non-stub version) +#TCL_STUB_LIBRARY (Always the stub version) #ITCL_INCLUDE_PATH #ITCL_LIBRARY -#HAVE_ITCL (On when itcl header and library have been found. -# Otherwise, undefined. -# Used for source file configuration.) -#HAVE_ITCLDECLS_H (defined [actually as a path, but we don't use that] -# when itclDecls.h. Otherwise, undefined. -# Used for source file configuration.) +#HAVE_ITCL (On when itcl header and library have been found. +# Otherwise, undefined. +# Used for source file configuration.) +#HAVE_ITCLDECLS_H (defined [actually as a path, but we don't use that] +# when itclDecls.h. Otherwise, undefined. +# Used for source file configuration.) #TK_INCLUDE_PATH -#TK_LIBRARY (Always the non-stub version) -#TK_STUB_LIBRARY (Always the stub version) +#TK_LIBRARY (Always the non-stub version) +#TK_STUB_LIBRARY (Always the stub version) #ITK_INCLUDE_PATH #ITK_LIBRARY -#HAVE_ITK (On when itcl header and library have been found. -# Otherwise, undefined. -# Used for source file configuration.) +#HAVE_ITK (On when itcl header and library have been found. +# Otherwise, undefined. +# Used for source file configuration.) #PLPLOT_ITCL_VERSION (Consistent Itcl version number found by PLplot). #PLPLOT_ITK_VERSION (Consistent Itk version number found by PLplot). #PLPLOT_IWIDGETS_VERSION (Consistent Iwidgets version number found by PLplot). +#TCL_RPATH (rpath, if needed for non-system Tcl location) +#TCL_TK_RPATH (rpath, if needed for non-system Tcl/Tk location) +#TCL_TK_ITCL_ITK_RPATH (rpath, if needed for non-system Tcl/Tk/Itcl/Itk +# location) if(ENABLE_tcl) message(STATUS "Start determining consistent system data for Tcl and friends") @@ -74,6 +78,9 @@ get_filename_component(TCL_LIBRARY_PATH ${TCL_LIBRARY} PATH) message(STATUS "TCL_LIBRARY_PATH = ${TCL_LIBRARY_PATH}") + set(TCL_RPATH ${TCL_LIBRARY_PATH}) + set(TCL_TK_RPATH ${TCL_RPATH}) + set(TCL_TK_ITCL_ITK_RPATH ${TCL_RPATH}) if(TCL_TCLSH) message(STATUS "Looking for tclsh - found") @@ -172,6 +179,8 @@ if(ITCL_LIBRARY) message(STATUS "Looking for itcl library - found") message(STATUS "ITCL_LIBRARY = ${ITCL_LIBRARY}") + get_filename_component(ITCL_LIBRARY_PATH ${ITCL_LIBRARY} PATH) + list(APPEND TCL_TK_ITCL_ITK_RPATH ${ITCL_LIBRARY_PATH}) set(HAVE_ITCL ON) find_path(HAVE_ITCLDECLS_H itclDecls.h HINTS ${ITCL_INCLUDE_PATH}) else(ITCL_LIBRARY) @@ -215,6 +224,8 @@ if(NOT ${TK_LIBRARY_PATH} STREQUAL ${TCL_LIBRARY_PATH}) message(STATUS "WARNING: the Tcl and Tk library locations are inconsistent so those libraries are likely not compatible") endif(NOT ${TK_LIBRARY_PATH} STREQUAL ${TCL_LIBRARY_PATH}) + list(APPEND TCL_TK_RPATH ${TK_LIBRARY_PATH}) + list(APPEND TCL_TK_ITCL_ITK_RPATH ${TK_LIBRARY_PATH}) else(ENABLE_tk) message(STATUS "WARNING: Because Tk is disabled must disable Itk as well") set(ENABLE_itk OFF CACHE BOOL "Enable Itk interface code" FORCE) @@ -305,6 +316,8 @@ message(STATUS "Looking for itk library - found") message(STATUS "ITK_LIBRARY = ${ITK_LIBRARY}") set(HAVE_ITK ON) + get_filename_component(ITK_LIBRARY_PATH ${ITK_LIBRARY} PATH) + list(APPEND TCL_TK_ITCL_ITK_RPATH ${ITK_LIBRARY_PATH}) # Test version consistency between iwidgets, itk, and itcl. if(NOT IWIDGETS_VERSIONS_LIST) @@ -412,6 +425,22 @@ set(ENABLE_tk OFF CACHE BOOL "Enable Tk interface code" FORCE) set(ENABLE_itk OFF CACHE BOOL "Enable Itk interface code" FORCE) endif(TCL_FOUND AND TCL_TCLSH) + + filter_rpath(TCL_RPATH) + if(TCL_RPATH) + message(STATUS "TCL_RPATH = ${TCL_RPATH}") + endif(TCL_RPATH) + + filter_rpath(TCL_TK_RPATH) + if(TCL_TK_RPATH) + message(STATUS "TCL_TK_RPATH = ${TCL_TK_RPATH}") + endif(TCL_TK_RPATH) + + filter_rpath(TCL_TK_ITCL_ITK_RPATH) + if(TCL_TK_ITCL_ITK_RPATH) + message(STATUS "TCL_TK_ITCL_ITK_RPATH = ${TCL_TK_ITCL_ITK_RPATH}") + endif(TCL_TK_ITCL_ITK_RPATH) + message(STATUS "Finished determining consistent system data for Tcl and friends") else(ENABLE_tcl) message(STATUS "WARNING: ENABLE_tcl is OFF so disabling everything else that is Tcl/Tk related") Modified: trunk/cmake/modules/tk.cmake =================================================================== --- trunk/cmake/modules/tk.cmake 2013-12-17 01:18:23 UTC (rev 12871) +++ trunk/cmake/modules/tk.cmake 2013-12-17 01:25:27 UTC (rev 12872) @@ -25,6 +25,7 @@ # tk_COMPILE_FLAGS - individual COMPILE_FLAGS required to compile # the tk device. # tk_LINK_FLAGS - individual LINK_FLAGS for the dynamic tk device. +# tk_RPATH - rpath for tk device driver. # DRIVERS_LINK_FLAGS - list of LINK_FLAGS for all static devices. # tk_SOURCE - list of source files other than tk.c @@ -33,6 +34,7 @@ # ntk_COMPILE_FLAGS - individual COMPILE_FLAGS required to compile # the ntk device. # ntk_LINK_FLAGS - individual LINK_FLAGS for the dynamic ntk device. +# ntk_RPATH - rpath for ntk device driver. # DRIVERS_LINK_FLAGS - list of LINK_FLAGS for all static devices. # The following variables are set/modified for the tkwin device: @@ -40,6 +42,7 @@ # tkwin_COMPILE_FLAGS - individual COMPILE_FLAGS required to compile # the tkwin device. # tkwin_LINK_FLAGS - individual LINK_FLAGS for the dynamic tkwin device. +# tkwin_RPATH - rpath for tkwin device driver. # DRIVERS_LINK_FLAGS - list of LINK_FLAGS for all static devices. # tkwin_SOURCE - list of source files other than tkwin.c @@ -62,6 +65,7 @@ "-I${TCL_INCLUDE_PATH} ${TKLIB_COMPILE_FLAGS} -I\"${CMAKE_SOURCE_DIR}\"/bindings/tcl -I\"${CMAKE_BINARY_DIR}\"/bindings/tcl -I\"${CMAKE_SOURCE_DIR}\"/bindings/tk" ) set(tk_LINK_FLAGS plplottcltk${LIB_TAG} ${TCL_LIBRARY} ${TK_LIBRARY}) + set(tk_RPATH ${TCL_TK_RPATH}) set(DRIVERS_LINK_FLAGS ${DRIVERS_LINK_FLAGS} ${TCL_LIBRARY} ${TK_LIBRARY}) if(NOT ENABLE_DYNDRIVERS) # All source that is in libplplottcltk @@ -98,6 +102,7 @@ if(PLD_ntk) set(ntk_COMPILE_FLAGS "-I${TCL_INCLUDE_PATH} ${TKLIB_COMPILE_FLAGS}") set(ntk_LINK_FLAGS ${TCL_LIBRARY} ${TK_LIBRARY}) + set(ntk_RPATH ${TCL_TK_RPATH}) set(DRIVERS_LINK_FLAGS ${DRIVERS_LINK_FLAGS} ${ntk_LINK_FLAGS}) endif(PLD_ntk) @@ -108,8 +113,11 @@ if(USE_TCL_TK_STUBS) set(tkwin_LINK_FLAGS plplottcltk${LIB_TAG} ${TCL_STUB_LIBRARY} ${TK_STUB_LIBRARY} ${X11_LIBRARIES}) + # tkwin_RPATH should be undefined for this case since stubs versions + # of the libraries are static (in my experience so far). else(USE_TCL_TK_STUBS) set(tkwin_LINK_FLAGS plplottcltk${LIB_TAG} ${TCL_LIBRARY} ${TK_LIBRARY} ${X11_LIBRARIES}) + set(tkwin_RPATH ${TCL_TK_RPATH}) endif(USE_TCL_TK_STUBS) set(DRIVERS_LINK_FLAGS ${DRIVERS_LINK_FLAGS} ${TCL_LIBRARY} ${TK_LIBRARY}) Modified: trunk/examples/CMakeLists.txt =================================================================== --- trunk/examples/CMakeLists.txt 2013-12-17 01:18:23 UTC (rev 12871) +++ trunk/examples/CMakeLists.txt 2013-12-17 01:25:27 UTC (rev 12872) @@ -211,17 +211,37 @@ # */Makefiles configured in each * subdirectory from */Makefile.examples.in. if(USE_RPATH) get_target_property(_LIB_INSTALL_RPATH plplot${LIB_TAG} INSTALL_RPATH) - string(REGEX REPLACE ";" ":" LIB_INSTALL_RPATH "${_LIB_INSTALL_RPATH}") - set(RPATHCMD "-Wl,-rpath -Wl,${LIB_INSTALL_RPATH}") - if(PLD_extqt) - if(ENABLE_DYNDRIVERS) - get_target_property(_qt_INSTALL_RPATH qt INSTALL_RPATH) - string(REGEX REPLACE ";" ":" qt_INSTALL_RPATH "${_qt_INSTALL_RPATH}") - set(qt_RPATHCMD "-Wl,-rpath -Wl,${LIB_INSTALL_RPATH}:${qt_INSTALL_RPATH}:${DRV_DIR}") - else(ENABLE_DYNDRIVERS) - set(qt_RPATHCMD ${RPATHCMD}) - endif(ENABLE_DYNDRIVERS) - endif(PLD_extqt) + if(_LIB_INSTALL_RPATH) + string(REGEX REPLACE ";" ":" LIB_INSTALL_RPATH "${_LIB_INSTALL_RPATH}") + set(RPATHCMD "-Wl,-rpath -Wl,${LIB_INSTALL_RPATH}") + if(PLD_extqt) + if(ENABLE_DYNDRIVERS) + get_target_property(_qt_INSTALL_RPATH qt INSTALL_RPATH) + if(_qt_INSTALL_RPATH) + string(REGEX REPLACE ";" ":" qt_INSTALL_RPATH "${_qt_INSTALL_RPATH}") + set(qt_RPATHCMD "-Wl,-rpath -Wl,${LIB_INSTALL_RPATH}:${qt_INSTALL_RPATH}:${DRV_DIR}") + else(_qt_INSTALL_RPATH) + set(qt_RPATHCMD) + endif(_qt_INSTALL_RPATH) + else(ENABLE_DYNDRIVERS) + set(qt_RPATHCMD ${RPATHCMD}) + endif(ENABLE_DYNDRIVERS) + endif(PLD_extqt) + if(ENABLE_tcl) + get_target_property(_plplottcltk_Main_INSTALL_RPATH plplottcltk_Main${LIB_TAG} INSTALL_RPATH) + if(_plplottcltk_Main_INSTALL_RPATH) + string(REGEX REPLACE ";" ":" plplottcltk_Main_INSTALL_RPATH "${_plplottcltk_Main_INSTALL_RPATH}") + set(plplottcltk_Main_RPATHCMD "-Wl,-rpath -Wl,${LIB_INSTALL_RPATH}:${plplottcltk_Main_INSTALL_RPATH}") + else(_plplottcltk_Main_INSTALL_RPATH) + set(plplottcltk_Main_RPATHCMD) + endif(_plplottcltk_Main_INSTALL_RPATH) + endif(ENABLE_tcl) + else(_LIB_INSTALL_RPATH) + set(RPATHCMD) + set(qt_RPATHCMD) + set(plplottcltk_Main_RPATHCMD) + endif(_LIB_INSTALL_RPATH) + endif(USE_RPATH) # Install lena.pgm in installed examples directory so that all implementations Modified: trunk/examples/tk/Makefile.examples.in =================================================================== --- trunk/examples/tk/Makefile.examples.in 2013-12-17 01:18:23 UTC (rev 12871) +++ trunk/examples/tk/Makefile.examples.in 2013-12-17 01:25:27 UTC (rev 12872) @@ -25,7 +25,7 @@ LIB_TAG = @LIB_TAG@ PKG_CONFIG_ENV = @PKG_CONFIG_ENV@ -RPATHCMD = @RPATHCMD@ +plplottcltk_Main_RPATHCMD = @plplottcltk_Main_RPATHCMD@ EXECUTABLES_list = xtk01$(EXEEXT) # Second and fourth examples depend on itk. @@ -37,6 +37,6 @@ rm -f $(EXECUTABLES_list) $(itk_EXECUTABLES_list) .c$(EXEEXT): - $(CC) $< -o $@ $(RPATHCMD) `$(PKG_CONFIG_ENV) pkg-config @PC_STATIC_OPTION@ --cflags --libs plplot$(LIB_TAG)-tcl_Main plplot$(LIB_TAG)-tcl plplot$(LIB_TAG)` -lm + $(CC) $< -o $@ $(plplottcltk_Main_RPATHCMD) `$(PKG_CONFIG_ENV) pkg-config @PC_STATIC_OPTION@ --cflags --libs plplot$(LIB_TAG)-tcl_Main plplot$(LIB_TAG)-tcl plplot$(LIB_TAG)` -lm .SUFFIXES: .c $(EXEEXT) Modified: trunk/src/CMakeLists.txt =================================================================== --- trunk/src/CMakeLists.txt 2013-12-17 01:18:23 UTC (rev 12871) +++ trunk/src/CMakeLists.txt 2013-12-17 01:25:27 UTC (rev 12872) @@ -417,6 +417,7 @@ ) if(USE_RPATH) + filter_rpath(LIB_INSTALL_RPATH) set_target_properties( plplot${LIB_TAG} PROPERTIES This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |