← Back to team overview

kicad-developers team mailing list archive

[PATCH] Use absolute path CMAKE_INSTALL_FULL_LIBDIR for 3d viewer PLUGINDIR

 

Currently, the plugindir in the plugin manager is constructed as
{CMAKE_INSTALL_PREFIX}/bin/../{CMAKE_INSTALL_LIBDIR}/kicad/..., while
CMakes install uses {CMAKE_INSTALL_LIBDIR}/kicad/...

In case CMAKE_INSTALL_LIBDIR is a relative path "install" prefixes it
with CMAKE_INSTALL_PREFIX and both paths happen to match, otherwise
the constructed path ends up as e.g. "/usr/bin/../usr/lib/kicad/...".

For these cases where an absolute path is wanted CMake provides the
CMAKE_INSTALL_FULL_<dir> variants which works the same as
CMAKE_INSTALL_<dir> when used as DIRECTORY for install.

Fixes https://bugs.launchpad.net/kicad/+bug/1796905

Kind regards,

Stefan
From 3f1f474f8ceab75acda7c1d0a36cc9c33c6124b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@xxxxxxxxxxxxxx>
Date: Tue, 9 Oct 2018 17:35:55 +0200
Subject: [PATCH] Use absolute path CMAKE_INSTALL_FULL_LIBDIR for 3d viewer
 PLUGINDIR

Currently, the plugindir in the plugin manager is constructed as
{CMAKE_INSTALL_PREFIX}/bin/../{CMAKE_INSTALL_LIBDIR}/kicad/..., while
CMakes install uses {CMAKE_INSTALL_LIBDIR}/kicad/...

In case CMAKE_INSTALL_LIBDIR is a relative path "install" prefixes it
with CMAKE_INSTALL_PREFIX and both paths happen to match, otherwise
the constructed path ends up as e.g. "/usr/bin/../usr/lib/kicad/...".

For these cases where an absolute path is wanted CMake provides the
CMAKE_INSTALL_FULL_<dir> variants which works the same as
CMAKE_INSTALL_<dir> when used as DIRECTORY for install.
---
 3d-viewer/3d_cache/3d_plugin_manager.cpp | 10 +++-------
 3d-viewer/3d_plugin_dir.h.in             |  2 +-
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/3d-viewer/3d_cache/3d_plugin_manager.cpp b/3d-viewer/3d_cache/3d_plugin_manager.cpp
index 52f2cef..fc561e7 100644
--- a/3d-viewer/3d_cache/3d_plugin_manager.cpp
+++ b/3d-viewer/3d_cache/3d_plugin_manager.cpp
@@ -149,14 +149,10 @@ void S3D_PLUGIN_MANAGER::loadPlugins( void )
     #endif
 
     #ifndef _WIN32
-        // multiarch friendly determination of the plugin directory: the executable dir
-        // is first determined via wxStandardPaths::Get().GetExecutablePath() and then
-        // the CMAKE_INSTALL_LIBDIR path is appended relative to the executable dir.
+        // PLUGINDIR = CMAKE_INSTALL_FULL_LIBDIR path is the absolute path
+        // corresponding to the install path used for constructing KICAD_USER_PLUGIN
 
-        fn.Assign( wxStandardPaths::Get().GetExecutablePath() );
-        fn.RemoveLastDir();
-        wxString tfname = fn.GetPathWithSep();
-        tfname.Append( wxString::FromUTF8Unchecked( PLUGINDIR ) );
+        wxString tfname = wxString::FromUTF8Unchecked( PLUGINDIR );
         fn.Assign( tfname, "");
         fn.AppendDir( "kicad" );
     #else
diff --git a/3d-viewer/3d_plugin_dir.h.in b/3d-viewer/3d_plugin_dir.h.in
index 6cf6de2..fb923ec 100644
--- a/3d-viewer/3d_plugin_dir.h.in
+++ b/3d-viewer/3d_plugin_dir.h.in
@@ -1 +1 @@
-#define PLUGINDIR "@CMAKE_INSTALL_LIBDIR@"
+#define PLUGINDIR "@CMAKE_INSTALL_FULL_LIBDIR@"
-- 
2.19.0


Follow ups