Commit the rest of the OSX build fixes missed in the previous commit.

This commit is contained in:
Bernhard Stegmaier 2014-10-17 13:45:33 -04:00 committed by Wayne Stambaugh
parent 816974b8ca
commit f06bfe6d70
18 changed files with 372 additions and 168 deletions

View File

@ -349,8 +349,9 @@ if( APPLE )
set( OSX_BUNDLE_MAIN "kicad.app" )
set( OSX_BUNDLE_BIN_DIR "Contents/MacOS" )
set( OSX_BUNDLE_LIB_DIR "Contents/Frameworks" )
set( OSX_BUNDLE_KIFACE_DIR "Contents/Plugins" )
set( OSX_BUNDLE_KIFACE_DIR "Contents/PlugIns" )
set( OSX_BUNDLE_SUP_DIR "Contents/SharedSupport" )
set( OSX_BUNDLE_APP_DIR "Contents/Applications" )
set( OSX_BUNDLE_BUILD_DIR "${CMAKE_BINARY_DIR}/kicad/${OSX_BUNDLE_MAIN}" )
set( OSX_BUNDLE_BUILD_BIN_DIR "${OSX_BUNDLE_BUILD_DIR}/${OSX_BUNDLE_BIN_DIR}" )
set( OSX_BUNDLE_BUILD_LIB_DIR "${OSX_BUNDLE_BUILD_DIR}/${OSX_BUNDLE_LIB_DIR}" )
@ -377,6 +378,24 @@ if( APPLE )
# used to set DEFAULT_FP_LIB_PATH in config.h.cmake, but then never used
# set it to correct value just in case (see common.cpp)
set( KICAD_FP_LIB_INSTALL_PATH "~/Library/Preferences/kicad" )
# Override default paths for fixup_bundle
set( OSX_BUNDLE_OVERRIDE_PATHS "
function( gp_item_default_embedded_path_override item default_embedded_path_var )
# by default, embed things right next to the main bundle executable:
set( path \"@executable_path/../../Contents/MacOS\" )
set( overridden 0 )
# embed .dylibs right next to the main bundle executable:
if( item MATCHES \"\\\\.dylib$\" )
set( path \"@executable_path/../Frameworks\" )
set( overridden 1 )
endif()
set( \${default_embedded_path_var} \"\${path}\" PARENT_SCOPE )
endfunction(gp_item_default_embedded_path_override)
"
)
endif()
mark_as_advanced( KICAD_BIN
@ -614,7 +633,7 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
)
else()
# relative path for python in bundle
set( PYTHON_LIB_DIR "python" )
set( PYTHON_LIB_DIR "python/site-packages" )
# install into bundle Frameworks folder
set( PYTHON_DEST "${OSX_BUNDLE_BUILD_LIB_DIR}/${PYTHON_LIB_DIR}"
CACHE PATH "Python module install path."
@ -655,6 +674,25 @@ endif()
# 'CMakeLists.txt' files to process
#================================================
if( APPLE )
# Remove app bundles in ${KICAD_BIN} before installing anything new.
# Must be defined before all includes so that it is executed first.
install( CODE "
message( STATUS \"Removing existing application bundles...\" )
# Remove links to standalone apps
file( REMOVE ${KICAD_BIN}/bitmap2component.app )
file( REMOVE ${KICAD_BIN}/eeschema.app )
file( REMOVE ${KICAD_BIN}/cvpcb.app )
file( REMOVE ${KICAD_BIN}/gerbview.app )
file( REMOVE ${KICAD_BIN}/pcb_calculator.app )
file( REMOVE ${KICAD_BIN}/pcbnew.app )
file( REMOVE ${KICAD_BIN}/pl_editor.app )
# Remove main bundle
file( REMOVE_RECURSE ${KICAD_BIN}/${OSX_BUNDLE_MAIN} )
" COMPONENT Runtime
)
endif()
############################
# Binaries ( CMake targets ) #
############################

View File

@ -100,6 +100,8 @@ target folder for compiled binaries, third parameter is the kicad folder, and
the last optional parameter are make options used during the build (in this
case for building with 4 jobs in parallel).
The script will automatically detect if you are compiling wxWidgets or wxPython.
NOTE: All paths are assumed to be relative to the current directory, i.e., the
working root you are in.
CAUTION: The script will erase existing wx-build and target folders (wx-bin)
without any confirmation!

View File

@ -142,8 +142,11 @@ wxString FindKicadFile( const wxString& shortname )
{
// Test the presence of the file in the directory shortname of
// the KiCad binary path.
#ifndef __WXMAC__
wxString fullFileName = Pgm().GetExecutablePath() + shortname;
#else
wxString fullFileName = Pgm().GetExecutablePath() + wxT( "Contents/MacOS/" ) + shortname;
#endif
if( wxFileExists( fullFileName ) )
return fullFileName;
@ -157,16 +160,22 @@ wxString FindKicadFile( const wxString& shortname )
return fullFileName;
}
// find binary file from possibilities list:
// /usr/local/kicad/linux or c:/kicad/winexe
// Path list for KiCad binary files
const static wxChar* possibilities[] = {
#ifdef __WINDOWS__
#if defined( __WINDOWS__ )
wxT( "c:/kicad/bin/" ),
wxT( "d:/kicad/bin/" ),
wxT( "c:/Program Files/kicad/bin/" ),
wxT( "d:/Program Files/kicad/bin/" ),
#elif defined( __WXMAC__ )
// all internal paths are relative to main bundle kicad.app
wxT( "Contents/Applications/cvpcb.app/Contents/MacOS/" ),
wxT( "Contents/Applications/pcbnew.app/Contents/MacOS/" ),
wxT( "Contents/Applications/eeschema.app/Contents/MacOS/" ),
wxT( "Contents/Applications/gerbview.app/Contents/MacOS/" ),
wxT( "Contents/Applications/bitmap2component.app/Contents/MacOS/" ),
wxT( "Contents/Applications/pcb_calculator.app/Contents/MacOS/" ),
wxT( "Contents/Applications/pl_editor.app/Contents/MacOS/" ),
#else
wxT( "/usr/bin/" ),
wxT( "/usr/local/bin/" ),
@ -174,9 +183,15 @@ wxString FindKicadFile( const wxString& shortname )
#endif
};
// find binary file from possibilities list:
for( unsigned i=0; i<DIM(possibilities); ++i )
{
#ifndef __WXMAC__
fullFileName = possibilities[i] + shortname;
#else
// make relative paths absolute
fullFileName = Pgm().GetExecutablePath() + possibilities[i] + shortname;
#endif
if( wxFileExists( fullFileName ) )
return fullFileName;
@ -189,23 +204,8 @@ wxString FindKicadFile( const wxString& shortname )
int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& param,
wxProcess *callback )
{
wxString fullFileName;
wxString fullFileName = FindKicadFile( ExecFile );
fullFileName = FindKicadFile( ExecFile );
#ifdef __WXMAC__
if( wxFileExists( fullFileName ) || wxDir::Exists( fullFileName ) )
{
return ProcessExecute( Pgm().GetExecutablePath() + wxT( "/" )
+ ExecFile + wxT( " " )
+ param, wxEXEC_ASYNC, callback );
}
else
{
return ProcessExecute( wxT( "/usr/bin/open " ) + param, wxEXEC_ASYNC, callback );
}
#else
if( wxFileExists( fullFileName ) )
{
if( !param.IsEmpty() )
@ -213,7 +213,16 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& para
return ProcessExecute( fullFileName, wxEXEC_ASYNC, callback );
}
#ifdef __WXMAC__
else
{
if( !param.IsEmpty() )
fullFileName += wxT( " " ) + param;
return ProcessExecute( wxT( "/usr/bin/open -a " ) + fullFileName, wxEXEC_ASYNC, callback );
}
#endif
wxString msg;
msg.Printf( _( "Command <%s> could not found" ), GetChars( fullFileName ) );
DisplayError( frame, msg, 20 );
@ -233,6 +242,7 @@ wxString KicadDatasPath()
}
else // Path of executables.
{
#ifndef __WXMAC__
wxString tmp = Pgm().GetExecutablePath();
#ifdef __WINDOWS__
tmp.MakeLower();
@ -303,6 +313,11 @@ wxString KicadDatasPath()
break;
}
}
#else
// On OSX point to Contents/SharedSupport folder of main bundle
data_path = GetOSXKicadDataDir();
found = true;
#endif
}
if( found )

View File

@ -113,11 +113,13 @@ const wxString KIWAY::dso_full_path( FACE_T aFaceId )
return wxEmptyString;
}
#ifndef __WXMAC__
wxFileName fn = wxStandardPaths::Get().GetExecutablePath();
#ifdef __WXMAC__
// we have the dso's in @executable_path/../Plugins in OSX bundle
fn.RemoveLastDir();
fn.AppendDir( wxT( "Plugins" ) );
#else
// we have the dso's in main OSX bundle kicad.app/Contents/PlugIns
wxFileName fn = Pgm().GetExecutablePath();
fn.AppendDir( wxT( "Contents" ) );
fn.AppendDir( wxT( "PlugIns" ) );
#endif
fn.SetName( name );

View File

@ -412,38 +412,30 @@ bool PGM_BASE::initPgm()
bool PGM_BASE::setExecutablePath()
{
#ifdef __APPLE__ // Apple MacOSx
// Derive path from location of the app bundle
CFBundleRef mainBundle = CFBundleGetMainBundle();
if( mainBundle == NULL )
return false;
CFURLRef urlref = CFBundleCopyBundleURL( mainBundle );
if( urlref == NULL )
return false;
CFStringRef str = CFURLCopyFileSystemPath( urlref, kCFURLPOSIXPathStyle );
if( str == NULL )
return false;
char* native_str = NULL;
int len = CFStringGetMaximumSizeForEncoding( CFStringGetLength( str ),
kCFStringEncodingUTF8 ) + 1;
native_str = new char[len];
CFStringGetCString( str, native_str, len, kCFStringEncodingUTF8 );
m_bin_dir = FROM_UTF8( native_str );
delete[] native_str;
#else
m_bin_dir = wxStandardPaths::Get().GetExecutablePath();
#endif
#ifdef __WXMAC__
// On OSX Pgm().GetExecutablePath() will always point to main
// bundle directory, e.g., /Applications/kicad.app/
wxFileName fn( m_bin_dir );
if( fn.GetName() == wxT( "kicad" ) )
{
// kicad launcher, so just remove the Contents/MacOS part
fn.RemoveLastDir();
fn.RemoveLastDir();
}
else
{
// standalone binaries live in Contents/Applications/<standalone>.app/Contents/MacOS
fn.RemoveLastDir();
fn.RemoveLastDir();
fn.RemoveLastDir();
fn.RemoveLastDir();
fn.RemoveLastDir();
}
m_bin_dir = fn.GetPath() + wxT( "/" );
#else
// Use unix notation for paths. I am not sure this is a good idea,
// but it simplifies compatibility between Windows and Unices.
// However it is a potential problem in path handling under Windows.
@ -452,6 +444,7 @@ bool PGM_BASE::setExecutablePath()
// Remove file name form command line:
while( m_bin_dir.Last() != '/' && !m_bin_dir.IsEmpty() )
m_bin_dir.RemoveLast();
#endif
return true;
}

View File

@ -111,7 +111,12 @@ const wxString PROJECT::FootprintLibTblName() const
// application title which is no longer constant or known. This next line needs
// to be re-thought out.
#ifndef __WXMAC__
fn.AssignDir( wxStandardPaths::Get().GetUserConfigDir() );
#else
// don't pollute home folder, temp folder seems to be more appropriate
fn.AssignDir( wxStandardPaths::Get().GetTempDir() );
#endif
#if defined( __WINDOWS__ )
fn.AppendDir( wxT( "kicad" ) );

View File

@ -53,8 +53,23 @@ if( MINGW )
endif()
if( APPLE )
# setup bundle
set( CVPCB_RESOURCES cvpcb.icns cvpcb_doc.icns )
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/cvpcb.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/cvpcb_doc.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set( MACOSX_BUNDLE_ICON_FILE cvpcb.icns )
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.kicad )
set( MACOSX_BUNDLE_NAME cvpcb )
endif()
if( USE_KIWAY_DLLS )
add_executable( cvpcb WIN32
add_executable( cvpcb WIN32 MACOSX_BUNDLE
../common/single_top.cpp
../common/pgm_base.cpp
${CVPCB_RESOURCES}
@ -141,13 +156,32 @@ if( USE_KIWAY_DLLS )
# these 2 binaries are a matched set, keep them together:
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( cvpcb PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
)
# puts binaries into the *.app bundle while linking
set_target_properties( cvpcb_kiface PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_KIFACE_DIR}
)
# put individual bundle outside of main bundle as a first step
# will be pulled into the main bundle when creating main bundle
install( TARGETS cvpcb
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
install( CODE "
# override default embedded path settings
${OSX_BUNDLE_OVERRIDE_PATHS}
# do all the work
include( BundleUtilities )
fixup_bundle( ${KICAD_BIN}/cvpcb.app/Contents/MacOS/cvpcb
\"\"
\"\"
)
" COMPONENT Runtime
)
else()
install( TARGETS cvpcb
DESTINATION ${KICAD_BIN}
@ -161,7 +195,7 @@ if( USE_KIWAY_DLLS )
else()
add_executable( cvpcb WIN32
add_executable( cvpcb WIN32 MACOSX_BUNDLE
${CVPCB_SRCS}
${CVPCB_DIALOGS}
${CVPCB_RESOURCES}
@ -201,15 +235,8 @@ else()
# Must follow github_plugin
target_link_libraries( cvpcb ${Boost_LIBRARIES} )
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( cvpcb PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
)
else()
install( TARGETS cvpcb
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()
install( TARGETS cvpcb
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()

View File

@ -233,9 +233,23 @@ set_source_files_properties( dialogs/dialog_bom.cpp
OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/dialog_bom_help_html.h
)
if( APPLE )
# setup bundle
set( EESCHEMA_RESOURCES eeschema.icns eeschema_doc.icns )
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/eeschema.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/eeschema_doc.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set( MACOSX_BUNDLE_ICON_FILE eeschema.icns )
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.kicad )
set( MACOSX_BUNDLE_NAME eeschema )
endif()
if( USE_KIWAY_DLLS )
add_executable( eeschema WIN32
add_executable( eeschema WIN32 MACOSX_BUNDLE
../common/single_top.cpp
../common/pgm_base.cpp
${EESCHEMA_RESOURCES}
@ -292,13 +306,32 @@ if( USE_KIWAY_DLLS )
# these 2 binaries are a matched set, keep them together:
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( eeschema PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
)
# puts binaries into the *.app bundle while linking
set_target_properties( eeschema_kiface PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_KIFACE_DIR}
)
# put individual bundle outside of main bundle as a first step
# will be pulled into the main bundle when creating main bundle
install( TARGETS eeschema
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
install( CODE "
# override default embedded path settings
${OSX_BUNDLE_OVERRIDE_PATHS}
# do all the work
include( BundleUtilities )
fixup_bundle( ${KICAD_BIN}/eeschema.app/Contents/MacOS/eeschema
\"\"
\"\"
)
" COMPONENT Runtime
)
else()
install( TARGETS eeschema
DESTINATION ${KICAD_BIN}
@ -313,7 +346,7 @@ if( USE_KIWAY_DLLS )
endif()
else()
add_executable( eeschema WIN32
add_executable( eeschema WIN32 MACOSX_BUNDLE
../common/single_top.cpp
${EESCHEMA_SRCS}
${EESCHEMA_COMMON_SRCS}
@ -333,17 +366,10 @@ else()
COMPILE_DEFINITIONS "TOP_FRAME=FRAME_SCH;PGM_DATA_FILE_EXT=\"sch\";BUILD_KIWAY_DLL"
)
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( eeschema PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
)
else()
install( TARGETS eeschema
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()
install( TARGETS eeschema
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()

View File

@ -10,13 +10,11 @@
<array>
<string>sch</string>
</array>
<key>CFBundleTypeIconFile</key> <string>eeschema.icns</string>
<key>CFBundleTypeIconFile</key> <string>eeschema_doc.icns</string>
<key>CFBundleTypeName</key> <string>eeschema document</string>
<key>LSHandlerRank</key> <string>Owner</string>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key> <string>English</string>
<key>CFBundleExecutable</key> <string>eeschema</string>
<key>CFBundleGetInfoString</key> <string></string>

View File

@ -379,7 +379,11 @@ void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event )
void DIALOG_BOM::OnChoosePlugin( wxCommandEvent& event )
{
wxString mask = wxT( "*" );
#ifndef __WXMAC__
wxString path = Pgm().GetExecutablePath();
#else
wxString path = GetOSXKicadDataDir() + wxT( "/plugins" );
#endif
wxString fullFileName = EDA_FileSelector( _( "Plugin files:" ),
path,

View File

@ -871,7 +871,11 @@ void NETLIST_DIALOG_ADD_PLUGIN::OnBrowsePlugins( wxCommandEvent& event )
wxString FullFileName, Mask, Path;
Mask = wxT( "*" );
#ifndef __WXMAC__
Path = Pgm().GetExecutablePath();
#else
Path = GetOSXKicadDataDir() + wxT( "/plugins" );
#endif
FullFileName = EDA_FileSelector( _( "Plugin files:" ),
Path,
FullFileName,

View File

@ -79,9 +79,23 @@ if( MINGW )
mingw_resource_compiler( gerbview )
endif()
if( APPLE )
# setup bundle
set( GERBVIEW_RESOURCES gerbview.icns gerbview_doc.icns )
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/gerbview.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/gerbview_doc.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set( MACOSX_BUNDLE_ICON_FILE gerbview.icns )
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.kicad )
set( MACOSX_BUNDLE_NAME gerbview )
endif()
if( USE_KIWAY_DLLS )
add_executable( gerbview WIN32
add_executable( gerbview WIN32 MACOSX_BUNDLE
../common/single_top.cpp
../common/pgm_base.cpp
${GERBVIEW_RESOURCES}
@ -135,13 +149,32 @@ if( USE_KIWAY_DLLS )
# these 2 binaries are a matched set, keep them together
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( gerbview PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
)
# puts binaries into the *.app bundle while linking
set_target_properties( gerbview_kiface PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_KIFACE_DIR}
)
# put individual bundle outside of main bundle as a first step
# will be pulled into the main bundle when creating main bundle
install( TARGETS gerbview
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
install( CODE "
# override default embedded path settings
${OSX_BUNDLE_OVERRIDE_PATHS}
# do all the work
include( BundleUtilities )
fixup_bundle( ${KICAD_BIN}/gerbview.app/Contents/MacOS/gerbview
\"\"
\"\"
)
" COMPONENT Runtime
)
else()
install( TARGETS gerbview
DESTINATION ${KICAD_BIN}
@ -155,7 +188,7 @@ if( USE_KIWAY_DLLS )
else()
add_executable( gerbview WIN32
add_executable( gerbview WIN32 MACOSX_BUNDLE
gerbview.cpp
${GERBVIEW_SRCS}
${DIALOGS_SRCS}
@ -170,16 +203,9 @@ else()
${wxWidgets_LIBRARIES}
${GDI_PLUS_LIBRARIES}
)
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( gerbview PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
)
else()
install( TARGETS gerbview
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()
install( TARGETS gerbview
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()

View File

@ -89,7 +89,7 @@ if( APPLE )
set( SCRIPTING_HELPER "0" )
endif()
# make bundle relocatable
# make main bundle relocatable
install( CODE "
# find all libs and modules
file( GLOB BUNDLE_FIX_LIBS ${OSX_BUNDLE_INSTALL_KIFACE_DIR}/*.kiface )
@ -101,19 +101,7 @@ if( APPLE )
endif()
# override default embedded path settings
function( gp_item_default_embedded_path_override item default_embedded_path_var )
# by default, embed things right next to the main bundle executable:
set( path \"@executable_path/../../Contents/MacOS\" )
set( overridden 0 )
# embed .dylibs right next to the main bundle executable:
if( item MATCHES \"\\\\.dylib$\" )
set( path \"@executable_path/../Frameworks\" )
set( overridden 1 )
endif()
set( \${default_embedded_path_var} \"\${path}\" PARENT_SCOPE )
endfunction(gp_item_default_embedded_path_override)
${OSX_BUNDLE_OVERRIDE_PATHS}
# do all the work
include( BundleUtilities )
@ -123,4 +111,32 @@ if( APPLE )
)
" COMPONENT Runtime
)
# move all individual app bundles into main bundle
install( CODE "
# helper function to move a bundle into main bundle
function( move_to_main_bundle bundle_name )
message( STATUS \"Moving \${bundle_name} into main bundle...\" )
file( MAKE_DIRECTORY ${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_APP_DIR} )
file( REMOVE_RECURSE ${KICAD_BIN}/\${bundle_name}/${OSX_BUNDLE_LIB_DIR} )
file( RENAME ${KICAD_BIN}/\${bundle_name} ${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_APP_DIR}/\${bundle_name} )
execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink \"../../../Frameworks\" \"Frameworks\"
WORKING_DIRECTORY ${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_APP_DIR}/\${bundle_name}/Contents
)
# create a top-level link pointing inside main bundle
execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink \"${OSX_BUNDLE_MAIN}/${OSX_BUNDLE_APP_DIR}/\${bundle_name}\" \"\${bundle_name}\"
WORKING_DIRECTORY ${KICAD_BIN}
)
endfunction( move_to_main_bundle )
# move all app bundles
move_to_main_bundle( bitmap2component.app )
move_to_main_bundle( eeschema.app )
move_to_main_bundle( cvpcb.app )
move_to_main_bundle( gerbview.app )
move_to_main_bundle( pcb_calculator.app )
move_to_main_bundle( pcbnew.app )
move_to_main_bundle( pl_editor.app )
" COMPONENT Runtime
)
endif()

View File

@ -41,6 +41,7 @@
#include <vector>
#include <build_version.h>
#include <macros.h>
#include <common.h>
#include <wx/dir.h>
#include <wx/filename.h>
@ -74,6 +75,7 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxString& aPrjFullFileName,
wxFileName templatePath;
wxString envStr;
#ifndef __WXMAC__
wxGetEnv( wxT( "KICAD" ), &envStr );
// Add a new tab for system templates
@ -101,6 +103,10 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxString& aPrjFullFileName,
sep + wxT( ".." ) + sep + wxT( "share" ) + sep + wxT( "template" ) + sep;
}
}
#else
// Use what is provided in the bundle data dir
templatePath = GetOSXKicadDataDir() + sep + wxT( "template" );
#endif
ps->AddPage( _( "System Templates" ), templatePath );

View File

@ -53,10 +53,25 @@ if( MINGW )
endif()
if( APPLE )
# setup bundle
set( PL_EDITOR_RESOURCES pl_editor.icns pl_editor_doc.icns )
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/pl_editor.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/pl_editor_doc.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set( MACOSX_BUNDLE_ICON_FILE pl_editor.icns )
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.kicad )
set( MACOSX_BUNDLE_NAME pl_editor )
endif()
if( USE_KIWAY_DLLS )
# a very small program launcher for pl_editor_kiface
add_executable( pl_editor WIN32
add_executable( pl_editor WIN32 MACOSX_BUNDLE
../common/single_top.cpp
../common/pgm_base.cpp
${PL_EDITOR_RESOURCES}
@ -110,13 +125,32 @@ if( USE_KIWAY_DLLS )
# these 2 binaries are a matched set, keep them together:
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( pl_editor PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
)
# puts binaries into the *.app bundle while linking
set_target_properties( pl_editor_kiface PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_KIFACE_DIR}
)
# put individual bundle outside of main bundle as a first step
# will be pulled into the main bundle when creating main bundle
install( TARGETS pl_editor
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
install( CODE "
# override default embedded path settings
${OSX_BUNDLE_OVERRIDE_PATHS}
# do all the work
include( BundleUtilities )
fixup_bundle( ${KICAD_BIN}/pl_editor.app/Contents/MacOS/pl_editor
\"\"
\"\"
)
" COMPONENT Runtime
)
else()
install( TARGETS pl_editor
DESTINATION ${KICAD_BIN}
@ -130,7 +164,7 @@ if( USE_KIWAY_DLLS )
else()
add_executable( pl_editor WIN32
add_executable( pl_editor WIN32 MACOSX_BUNDLE
pl_editor.cpp
${PL_EDITOR_SRCS}
${DIALOGS_SRCS}
@ -145,15 +179,9 @@ else()
${wxWidgets_LIBRARIES}
${GDI_PLUS_LIBRARIES}
)
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( pl_editor PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
)
else()
install( TARGETS pl_editor
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()
install( TARGETS pl_editor
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()

View File

@ -10,13 +10,11 @@
<array>
<string>kicad_wks</string>
</array>
<key>CFBundleTypeIconFile</key> <string>pl_editor.icns</string>
<key>CFBundleTypeIconFile</key> <string>pl_editor_doc.icns</string>
<key>CFBundleTypeName</key> <string>pl_editor document</string>
<key>LSHandlerRank</key> <string>Owner</string>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key> <string>English</string>
<key>CFBundleExecutable</key> <string>pl_editor</string>
<key>CFBundleGetInfoString</key> <string></string>

View File

@ -54,11 +54,22 @@ make_lexer(
datafile_read_write.h
)
if( APPLE )
# setup bundle
set( PCB_CALCULATOR_RESOURCES pcb_calculator.icns )
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/pcb_calculator.icns" PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set( MACOSX_BUNDLE_ICON_FILE pcb_calculator.icns )
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.kicad )
set( MACOSX_BUNDLE_NAME pcb_calculator )
endif()
if( USE_KIWAY_DLLS )
#if( false )
add_executable( pcb_calculator WIN32
add_executable( pcb_calculator WIN32 MACOSX_BUNDLE
../common/single_top.cpp
../common/pgm_base.cpp
${PCB_CALCULATOR_RESOURCES}
@ -108,13 +119,32 @@ if( USE_KIWAY_DLLS )
# these 2 binaries are a matched set, keep them together
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( pcb_calculator PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
)
# puts binaries into the *.app bundle while linking
set_target_properties( pcb_calculator_kiface PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_KIFACE_DIR}
)
# put individual bundle outside of main bundle as a first step
# will be pulled into the main bundle when creating main bundle
install( TARGETS pcb_calculator
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
install( CODE "
# override default embedded path settings
${OSX_BUNDLE_OVERRIDE_PATHS}
# do all the work
include( BundleUtilities )
fixup_bundle( ${KICAD_BIN}/pcb_calculator.app/Contents/MacOS/pcb_calculator
\"\"
\"\"
)
" COMPONENT Runtime
)
else()
install( TARGETS pcb_calculator
DESTINATION ${KICAD_BIN}
@ -128,7 +158,7 @@ if( USE_KIWAY_DLLS )
else()
add_executable( pcb_calculator WIN32
add_executable( pcb_calculator WIN32 MACOSX_BUNDLE
../common/single_top.cpp
pcb_calculator.cpp
${PCB_CALCULATOR_SRCS}
@ -146,16 +176,9 @@ else()
polygon
${wxWidgets_LIBRARIES}
)
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( pcb_calculator PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
)
else()
install( TARGETS pcb_calculator
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()
install( TARGETS pcb_calculator
DESTINATION ${KICAD_BIN}
COMPONENT binary
)
endif()

View File

@ -217,7 +217,7 @@ static bool scriptingSetup()
{
wxString path_frag;
#ifdef __MINGW32__
#if defined( __MINGW32__ )
// force python environment under Windows:
const wxString python_us( "python27_us" );
@ -261,28 +261,24 @@ static bool scriptingSetup()
// [KICAD_PATH]/scripting/plugins
// Add this default search path:
path_frag = Pgm().GetExecutablePath() + wxT( "scripting/plugins" );
#elif defined __WXMAC__
#elif defined( __WXMAC__ )
// User plugin folder is ~/Library/Application Support/kicad/scripting/plugins
path_frag = wxStandardPaths::Get().GetUserDataDir() + wxT( "/scripting/plugins" );
path_frag = GetOSXKicadUserDataDir() + wxT( "/scripting/plugins" );
// Add default paths to PYTHONPATH
wxString pypath;
// User scripting folder (~/Library/Application Support/kicad/scripting/plugins)
pypath = wxStandardPaths::Get().GetUserDataDir() + wxT( "/scripting/plugins" );
pypath = GetOSXKicadUserDataDir() + wxT( "/scripting/plugins" );
// Machine scripting folder (/Library/Application Support/kicad/scripting/plugins)
pypath += wxT( ":/Library/Application Support/kicad/scripting/plugins" );
pypath += wxT( ":" ) + GetOSXKicadMachineDataDir() + wxT( "/scripting/plugins" );
// Bundle scripting folder (<kicad.app>/Contents/SharedSupport/scripting/plugins)
pypath += wxT( ":" ) + wxStandardPaths::Get().GetDataDir() + wxT( "/scripting/plugins" );
// Bundle wxPython folder (<kicad.app>/Contents/Frameworks/python)
wxFileName fn = wxFileName( wxStandardPaths::Get().GetExecutablePath() );
fn.RemoveLastDir();
fn.AppendDir( wxT( "Frameworks" ) );
fn.AppendDir( wxT( "python" ) );
pypath += wxT( ":" ) + fn.GetPath();
// Original content of PYTHONPATH
pypath += wxT( ":" ) + GetOSXKicadDataDir() + wxT( "/scripting/plugins" );
// Bundle wxPython folder (<kicad.app>/Contents/Frameworks/python/site-packages)
pypath += wxT( ":" ) + Pgm().GetExecutablePath() + wxT( "Contents/Frameworks/python/site-packages" );
// Original content of $PYTHONPATH
if( wxGetenv("PYTHONPATH") != NULL )
{
pypath += wxT( ":" ) + wxString( wxGetenv("PYTHONPATH") );
pypath = wxString( wxGetenv("PYTHONPATH") ) + wxT( ":" ) + pypath;
}
// set $PYTHONPATH
@ -292,9 +288,6 @@ static bool scriptingSetup()
path_frag = wxT( "/usr/local/kicad/bin/scripting/plugins" );
#endif
// On linux and osx, 2 others paths are
// [HOME]/.kicad_plugins/
// [HOME]/.kicad/scripting/plugins/
if( !pcbnewInitPythonScripting( TO_UTF8( path_frag ) ) )
{
wxLogSysError( wxT( "pcbnewInitPythonScripting() failed." ) );