SimulIDE: add recipe

This commit is contained in:
Gerasim Troeglazov
2020-10-01 22:05:14 +10:00
parent b88f45eae6
commit 9d314a8970
4 changed files with 488 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,34 @@
resource app_flags B_SINGLE_LAUNCH;
resource app_version {
major = @MAJOR@,
middle = @MIDDLE@,
minor = @MINOR@,
variety = B_APPV_FINAL,
internal = 0,
short_info = "SimulIDE",
long_info = "@LONG_INFO@"
};
resource app_signature "@APP_SIGNATURE@";
resource vector_icon {
$"6E63696606020006023B019B3AA235BC243E3C71D248D17C49849100E6C98FFF"
$"CE7A31020006023BA71138D0C8BBF4B83E90E64AED7C485BD7009C6600FF8A4F"
$"0302000602BB6FCBB8D4C839AA71BC3992492FF148D96A00FF900EFFFFFFFF05"
$"000400510200060333FE33368500B942AB369564494B2349818E0053535357A4"
$"9B9BFFFFFFFF080606E6064C5C3034292D2C2F282C2E2C324B0A044C5C4C3054"
$"2C54580607EA0E4C30542C3B25312736242DB6BE2D2E302AB82FB76ABA5BB6A0"
$"3602044432453243324235423242384439433945394736473A473208022D2F3F"
$"3508032D42314435400803324E364A3F4D0A064D5E585E6056604A4C422B4B0C"
$"0A040107000A03030201001001178523040A020102000A010101000A00010000"
$"0A0501030240924500000000000040700DC6DB5CC3B8740A0301031240924500"
$"000000000040700DC6DB5CC3B87401178200040A050103024092450000000000"
$"0040700DC8ADAE43478B0A0301031240924500000000000040700DC8ADAE4347"
$"8B01178200040A0501030240924500000000000040700DC6DB5C4888F10A0301"
$"031240924500000000000040700DC6DB5C4888F101178200040A030306050410"
$"0117831004"
};

View File

@@ -0,0 +1,350 @@
From 11ebb40877ac6388889908a38d67f0c5e98a01ad Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Thu, 1 Oct 2020 20:08:13 +1000
Subject: Fixes for Haiku
diff --git a/SimulIDE.pro b/SimulIDE.pro
index 5d94c2f..37050ac 100644
--- a/SimulIDE.pro
+++ b/SimulIDE.pro
@@ -25,6 +25,10 @@ TEMPLATE = app
TARGET = simulide
+haiku {
+ TARGET = SimulIDE
+}
+
QT += svg
QT += xml
QT += script
@@ -186,6 +190,11 @@ linux {
QMAKE_LIBS += -lelf
QMAKE_LFLAGS += -no-pie
}
+haiku {
+ OS = Haiku
+ QMAKE_LIBS += -lelf -lnetwork -lbsd
+ QMAKE_LFLAGS += -no-pie
+}
macx {
OS = MacOs
INCLUDEPATH += \
@@ -236,6 +245,17 @@ win32 | linux {
$(COPY_DIR) ../resources/icons $$TARGET_PREFIX/share ; \
$(MOVE) ../resources/translations/*.qm $$TARGET_PREFIX/share/simulide/translations ;
}
+haiku {
+ DESTDIR = $$TARGET_PREFIX
+ mkpath( $$TARGET_PREFIX )
+ copy2dest.commands = \
+ $(MKDIR) $$TARGET_PREFIX/data ; \
+ $(MKDIR) $$TARGET_PREFIX/examples ; \
+ $(MKDIR) $$TARGET_PREFIX/translations ; \
+ $(COPY_DIR) ../resources/data $$TARGET_PREFIX ; \
+ $(COPY_DIR) ../resources/examples $$TARGET_PREFIX ; \
+ $(MOVE) ../resources/translations/*.qm $$TARGET_PREFIX/translations ;
+}
macx {
DESTDIR = $$TARGET_PREFIX
mkpath( $$TARGET_PREFIX/simulide.app )
diff --git a/src/application.qrc b/src/application.qrc
index 84a4aa9..b4ea9be 100644
--- a/src/application.qrc
+++ b/src/application.qrc
@@ -4,63 +4,63 @@
<file alias="simulide.png">../src/icons/simulide.png</file>
<file alias="null-0.png">../src/icons/components/null-0.png</file>
- <file alias="newcirc.png">../src/icons/mainwindow/new.png</file>
- <file alias="opencirc.png">../src/icons/mainwindow/open.png</file>
- <file alias="savecirc.png">../src/icons/mainwindow/save.png</file>
- <file alias="savecircas.png">../src/icons/mainwindow/saveas.png</file>
- <file alias="help.png">../src/icons/mainwindow/help.png</file>
- <file alias="about.png">../src/icons/mainwindow/about.png</file>
-
- <file alias="new.png">../src/icons/mainwindow/new.png</file>
- <file alias="open.png">../src/icons/mainwindow/open.png</file>
- <file alias="save.png">../src/icons/mainwindow/save.png</file>
- <file alias="saveas.png">../src/icons/mainwindow/saveas.png</file>
-
- <file alias="cut.png">../src/icons/mainwindow/cut.png</file>
- <file alias="copy.png">../src/icons/mainwindow/copy.png</file>
- <file alias="paste.png">../src/icons/mainwindow/paste.png</file>
-
- <file alias="cdup.png">../src/icons/mainwindow/cdup.png</file>
- <file alias="undo.png">../src/icons/mainwindow/rotateCCW.png</file>
- <file alias="redo.png">../src/icons/mainwindow/rotateCW.png</file>
- <file alias="find.png">../src/icons/mainwindow/find.png</file>
-
- <file alias="compile.png">../src/icons/mainwindow/verify.png</file>
- <file alias="setroot.png">../src/icons/mainwindow/verify.png</file>
-
- <file alias="finish.png">../src/icons/mainwindow/finish.png</file>
- <file alias="step.png">../src/icons/mainwindow/step.png</file>
- <file alias="stepover.png">../src/icons/mainwindow/stepover.png</file>
- <file alias="play.png">../src/icons/mainwindow/play.png</file>
- <file alias="runtobk.png">../src/icons/mainwindow/runtobk.png</file>
- <file alias="pause.png">../src/icons/mainwindow/pause.png</file>
- <file alias="reset.png">../src/icons/mainwindow/reset.png</file>
- <file alias="stop.png">../src/icons/mainwindow/stop.png</file>
-
- <file alias="poweroff.png">../src/icons/mainwindow/poweroff.png</file>
- <file alias="poweron.png">../src/icons/mainwindow/poweron.png</file>
- <file alias="powerdeb.png">../src/icons/mainwindow/powerdeb.png</file>
- <file alias="pausesim.png">../src/icons/mainwindow/pausesim.png</file>
-
- <file alias="remove.png">../src/icons/mainwindow/remove.png</file>
- <file alias="properties.png">../src/icons/mainwindow/properties.png</file>
- <file alias="rotateCW.png">../src/icons/mainwindow/rotateCW.png</file>
- <file alias="rotateCCW.png">../src/icons/mainwindow/rotateCCW.png</file>
- <file alias="rotate180.png">../src/icons/mainwindow/rotate180.png</file>
- <file alias="hflip.png">../src/icons/mainwindow/hflip.png</file>
- <file alias="vflip.png">../src/icons/mainwindow/vflip.png</file>
- <file alias="load.png">../src/icons/mainwindow/load.png</file>
- <file alias="reload.png">../src/icons/mainwindow/reload.png</file>
- <file alias="terminal.png">../src/icons/mainwindow/terminal.png</file>
- <file alias="closeterminal.png">../src/icons/mainwindow/closeterminal.png</file>
- <file alias="saveimage.png">../src/icons/mainwindow/saveimage.png</file>
-
- <file alias="rename.png">../src/icons/mainwindow/rename.png</file>
+ <file alias="newcirc.png">../src/icons/mainwindow/new.svg</file>
+ <file alias="opencirc.png">../src/icons/mainwindow/open.svg</file>
+ <file alias="savecirc.png">../src/icons/mainwindow/save.svg</file>
+ <file alias="savecircas.png">../src/icons/mainwindow/saveas.svg</file>
+ <file alias="help.png">../src/icons/mainwindow/help.svg</file>
+ <file alias="about.png">../src/icons/mainwindow/about.svg</file>
+
+ <file alias="new.png">../src/icons/mainwindow/new.svg</file>
+ <file alias="open.png">../src/icons/mainwindow/open.svg</file>
+ <file alias="save.png">../src/icons/mainwindow/save.svg</file>
+ <file alias="saveas.png">../src/icons/mainwindow/saveas.svg</file>
+
+ <file alias="cut.png">../src/icons/mainwindow/cut.svg</file>
+ <file alias="copy.png">../src/icons/mainwindow/copy.svg</file>
+ <file alias="paste.png">../src/icons/mainwindow/paste.svg</file>
+
+ <file alias="cdup.png">../src/icons/mainwindow/cdup.svg</file>
+ <file alias="undo.png">../src/icons/mainwindow/undo.svg</file>
+ <file alias="redo.png">../src/icons/mainwindow/redo.svg</file>
+ <file alias="find.png">../src/icons/mainwindow/find.svg</file>
+
+ <file alias="compile.png">../src/icons/mainwindow/verify.svg</file>
+ <file alias="setroot.png">../src/icons/mainwindow/verify.svg</file>
+
+ <file alias="finish.png">../src/icons/mainwindow/finish.svg</file>
+ <file alias="step.png">../src/icons/mainwindow/step.svg</file>
+ <file alias="stepover.png">../src/icons/mainwindow/stepover.svg</file>
+ <file alias="play.png">../src/icons/mainwindow/play.svg</file>
+ <file alias="runtobk.png">../src/icons/mainwindow/runtobk.svg</file>
+ <file alias="pause.png">../src/icons/mainwindow/pause.svg</file>
+ <file alias="reset.png">../src/icons/mainwindow/reset.svg</file>
+ <file alias="stop.png">../src/icons/mainwindow/stop.svg</file>
+
+ <file alias="poweroff.png">../src/icons/mainwindow/poweroff.svg</file>
+ <file alias="poweron.png">../src/icons/mainwindow/poweron.svg</file>
+ <file alias="powerdeb.png">../src/icons/mainwindow/powerdeb.svg</file>
+ <file alias="pausesim.png">../src/icons/mainwindow/pausesim.svg</file>
+
+ <file alias="remove.png">../src/icons/mainwindow/remove.svg</file>
+ <file alias="properties.png">../src/icons/mainwindow/properties.svg</file>
+ <file alias="rotateCW.png">../src/icons/mainwindow/rotateCW.svg</file>
+ <file alias="rotateCCW.png">../src/icons/mainwindow/rotateCCW.svg</file>
+ <file alias="rotate180.png">../src/icons/mainwindow/rotate180.svg</file>
+ <file alias="hflip.png">../src/icons/mainwindow/hflip.svg</file>
+ <file alias="vflip.png">../src/icons/mainwindow/vflip.svg</file>
+ <file alias="load.png">../src/icons/mainwindow/load.svg</file>
+ <file alias="reload.png">../src/icons/mainwindow/reload.svg</file>
+ <file alias="terminal.png">../src/icons/mainwindow/terminal.svg</file>
+ <file alias="closeterminal.png">../src/icons/mainwindow/closeterminal.svg</file>
+ <file alias="saveimage.png">../src/icons/mainwindow/saveimage.svg</file>
+
+ <file alias="rename.png">../src/icons/mainwindow/rename.svg</file>
<file alias="invert.png">../src/icons/mainwindow/invert.png</file>
<file alias="unuse.png">../src/icons/mainwindow/unuse.png</file>
- <file alias="breakpoint.png">../src/icons/mainwindow/breakpoint.png</file>
- <file alias="nobreakpoint.png">../src/icons/mainwindow/nobreakpoint.png</file>
+ <file alias="breakpoint.png">../src/icons/mainwindow/breakpoint.svg</file>
+ <file alias="nobreakpoint.png">../src/icons/mainwindow/nobreakpoint.svg</file>
<file alias="led.png">../src/icons/components/led.png</file>
<file alias="diode.png">../src/icons/components/diode.png</file>
diff --git a/src/gui/componentselector/componentselector.cpp b/src/gui/componentselector/componentselector.cpp
index a9884ff..e50b351 100644
--- a/src/gui/componentselector/componentselector.cpp
+++ b/src/gui/componentselector/componentselector.cpp
@@ -141,7 +141,11 @@ void ComponentSelector::loadXml( const QString &setFile )
if( element.hasAttribute("icon") )
{
QDir compSetDir( qApp->applicationDirPath() );
+#ifdef Q_OS_HAIKU
+ compSetDir.cd( "./data/images" );
+#else
compSetDir.cd( "../share/simulide/data/images" );
+#endif
icon = compSetDir.absoluteFilePath( element.attribute("icon") );
}
QString name = element.attribute( "name" );
diff --git a/src/gui/editorwidget/codeeditor.cpp b/src/gui/editorwidget/codeeditor.cpp
index abc43bc..a19715f 100644
--- a/src/gui/editorwidget/codeeditor.cpp
+++ b/src/gui/editorwidget/codeeditor.cpp
@@ -76,8 +76,12 @@ CodeEditor::CodeEditor( QWidget* parent, OutPanelText* outPane )
m_debugging = false;
m_stepOver = false;
m_driveCirc = false;
-
+
+#ifdef Q_OS_HAIKU
+ m_font.setFamily("Noto Sans Mono");
+#else
m_font.setFamily("Monospace");
+#endif
m_font.setFixedPitch( true );
m_font.setPixelSize( m_fontSize );
setFont( m_font );
diff --git a/src/gui/editorwidget/inodebugger.cpp b/src/gui/editorwidget/inodebugger.cpp
index 8db2bdf..2ecf4a0 100644
--- a/src/gui/editorwidget/inodebugger.cpp
+++ b/src/gui/editorwidget/inodebugger.cpp
@@ -34,8 +34,12 @@ InoDebugger::InoDebugger( QObject* parent, OutPanelText* outPane, QString filePa
Q_UNUSED( InoDebugger_properties );
setObjectName( "Arduino Compiler/Debugger" );
-
- m_compilerPath = "";
+
+#ifdef Q_OS_HAIKU
+ m_compilerPath = "/system/apps/Arduino/";
+#else
+ m_compilerPath = "";
+#endif
m_compSetting = "arduino_Path";
readSettings();
@@ -150,7 +154,11 @@ int InoDebugger::compile()
/// , then debugger will hang!
QString cBuildPath = buildPath;
QString preferencesPath = SIMUAPI_AppPath::self()->availableDataFilePath("codeeditor/preferences.txt");
+#ifdef Q_OS_HAIKU
+ QString command = m_compilerPath +"arduino.sh";
+#else
QString command = m_compilerPath +"arduino";
+#endif
#ifndef Q_OS_UNIX
command += "_debug";
@@ -167,7 +175,11 @@ int InoDebugger::compile()
command += " -v --board arduino:avr:"+boardName+" --pref build.path=" + cBuildPath;
if( !preferencesPath.isEmpty() )
command += " --preferences-file " + preferencesPath;
+#ifdef Q_OS_HAIKU
+ command += " --pref preproc.save_build_files=true --verify " + ProcInoFile;
+#else
command += " --preserve-temp-files --verify " + ProcInoFile;
+#endif
m_firmware = "";
m_outPane->appendText( command );
@@ -204,6 +216,10 @@ int InoDebugger::compile()
else
{
m_firmware = buildPath + "/"+ m_fileName + ".ino.hex";
+#ifdef Q_OS_HAIKU
+ QString cmd = "cp " + cBuildPath + "/*.hex " + m_firmware;
+ system(cmd.toUtf8().data());
+#endif
error = 0;
}
QApplication::restoreOverrideCursor();
diff --git a/src/main.cpp b/src/main.cpp
index 90e2a6a..7dc9776 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -24,7 +24,11 @@
QString langFile( QString locale )
{
+#ifdef Q_OS_HAIKU
+ QString langF = "./translations/simulide_"+locale+".qm";
+#else
QString langF = "../share/simulide/translations/simulide_"+locale+".qm";
+#endif
QFile file( langF );
if( !file.exists() ) langF = "";
@@ -58,7 +62,11 @@ int main(int argc, char *argv[])
//QApplication::setGraphicsSystem( "raster" );//native, raster, opengl
QApplication app( argc, argv );
+#ifdef Q_OS_HAIKU
+ QSettings settings( QStandardPaths::standardLocations( QStandardPaths::AppConfigLocation).first()+"/simulide.ini", QSettings::IniFormat, 0l );
+#else
QSettings settings( QStandardPaths::standardLocations( QStandardPaths::DataLocation).first()+"/simulide.ini", QSettings::IniFormat, 0l );
+#endif
QString locale = QLocale::system().name();
if( settings.contains( "language" ) ) locale = settings.value( "language" ).toString();
@@ -69,7 +77,11 @@ int main(int argc, char *argv[])
locale = QLocale::system().name().split("_").first();
langF = langFile( locale );
}
+#ifdef Q_OS_HAIKU
+ if( langF == "" ) langF = "./translations/simulide_en.qm";
+#else
if( langF == "" ) langF = "../share/simulide/translations/simulide_en.qm";
+#endif
QTranslator translator;
translator.load( langF );
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index bf3bfe9..9448bae 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -33,7 +33,11 @@ MainWindow* MainWindow::m_pSelf = 0l;
MainWindow::MainWindow()
: QMainWindow()
+#ifdef Q_OS_HAIKU
+ , m_settings( QStandardPaths::standardLocations( QStandardPaths::AppConfigLocation).first()+"/simulide.ini", QSettings::IniFormat, this )
+#else
, m_settings( QStandardPaths::standardLocations( QStandardPaths::DataLocation).first()+"/simulide.ini", QSettings::IniFormat, this )
+#endif
{
setWindowIcon( QIcon(":/simulide.png") );
m_pSelf = this;
diff --git a/src/simuapi_apppath.cpp b/src/simuapi_apppath.cpp
index 8fcd2fe..c0315a8 100644
--- a/src/simuapi_apppath.cpp
+++ b/src/simuapi_apppath.cpp
@@ -31,6 +31,17 @@ SIMUAPI_AppPath *SIMUAPI_AppPath::self()
return m_pSelf;
}
+#ifdef Q_OS_HAIKU
+SIMUAPI_AppPath::SIMUAPI_AppPath()
+ : m_ROExamFolder( qApp->applicationDirPath() )
+ , m_RODataFolder( qApp->applicationDirPath() )
+ , m_RWDataFolder( QStandardPaths::writableLocation( QStandardPaths::AppConfigLocation ))
+{
+ m_ROExamFolder.cd( "./examples" );
+ m_RODataFolder.cd( "./data" );
+ m_RWDataFolder.cd( "data" );
+}
+#else
SIMUAPI_AppPath::SIMUAPI_AppPath()
: m_ROExamFolder( qApp->applicationDirPath() )
, m_RODataFolder( qApp->applicationDirPath() )
@@ -40,6 +51,7 @@ SIMUAPI_AppPath::SIMUAPI_AppPath()
m_RODataFolder.cd( "../share/simulide/data" );
m_RWDataFolder.cd( "data" );
}
+#endif
QDir SIMUAPI_AppPath::RWDataFolder() const
{
--
2.28.0

View File

@@ -0,0 +1,104 @@
SUMMARY="Real Time Electronic Circuit Simulator"
DESCRIPTION="SimulIDE is a simple real time electronic circuit simulator, intended \
for hobbyist or students to learn and experiment with simple electronic circuits an\
d microcontrollers, supporting PIC, AVR and Arduino.
This is not an accurate simulator for circuit analysis, it aims to be fast, simple \
and easy to use, this means simple and not very accurate electronic models and limi\
ted features.
Simplicity and ease of use are the key features of this simulator.
You can create, simulate and interact with your circuits within minutes, just drag \
components from the list, drop into the circuit, connect them and push power button\
to see how it works.
SimulIDE also features a code Editor and Debugger for GcBasic, Arduino, PIC asm and \
AVR asm. It is still in it's firsts stages of development, with basic functionalitie\
s, but it is possible to write, compile and basic debugging with breakpoints, watch \
registers and global variables."
HOMEPAGE="https://www.simulide.com/"
COPYRIGHT=" 2012-2020 Santiago Gonzalez, Popov Alexey"
LICENSE="GNU GPL v3"
REVISION="1"
SOURCE_URI="https://mailfence.com/pub/docs/santigoro/web/SimulIDE_0.4.13/SimulIDE_$portVersion-SR5_Sources.tar.gz"
CHECKSUM_SHA256="b55b03e507882b8b68a25e5155dcac6020ba273be93bdf689612a0be67056d43"
SOURCE_DIR="simulide_$portVersion-SR5_Sources"
PATCHES="simulide-$portVersion.patchset"
ADDITIONAL_FILES="
simulide.rdef.in
icons.zip
"
ARCHITECTURES="!x86_gcc2 x86_64"
SECONDARY_ARCHITECTURES="x86"
GLOBAL_WRITABLE_FILES="
settings/SimulIDE/examples directory auto-merge
"
PROVIDES="
simulide$secondaryArchSuffix = $portVersion
app:SimulIDE$secondaryArchSuffix = $portVersion
"
REQUIRES="
haiku$secondaryArchSuffix
cmd:gpasm
cmd:avra
lib:libGL$secondaryArchSuffix
lib:libelf$secondaryArchSuffix
lib:libQt5Gui$secondaryArchSuffix
lib:libQt5Widgets$secondaryArchSuffix
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
devel:libGL$secondaryArchSuffix
devel:libelf$secondaryArchSuffix
devel:libQt5Core$secondaryArchSuffix
"
BUILD_PREREQUIRES="
cmd:find
cmd:gcc$secondaryArchSuffix
cmd:lrelease$secondaryArchSuffix >= 5
cmd:make
cmd:qmake$secondaryArchSuffix >= 5
"
PATCH()
{
unzip -o $sourceDir/../../additional-files/icons.zip -d $sourceDir/src/icons/mainwindow
}
BUILD()
{
cd build_XX
qmake -r prefix=$appsDir/SimulIDE
make $jobArgs
}
INSTALL()
{
mkdir -p $appsDir $settingsDir/SimulIDE
cp -R $sourceDir/build_XX/release/SimulIDE_$portVersion-SR5 $appsDir/SimulIDE
mv $appsDir/SimulIDE/examples $settingsDir/SimulIDE
ln -s $settingsDir/SimulIDE/examples $appsDir/SimulIDE/examples
local APP_SIGNATURE="application/x-vnd.simulide"
local MAJOR="`echo "$portVersion" | cut -d. -f1`"
local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
local MINOR="`echo "$portVersion" | cut -d. -f3`"
local LONG_INFO="$SUMMARY"
sed \
-e "s|@APP_SIGNATURE@|$APP_SIGNATURE|" \
-e "s|@MAJOR@|$MAJOR|" \
-e "s|@MIDDLE@|$MIDDLE|" \
-e "s|@MINOR@|$MINOR|" \
-e "s|@LONG_INFO@|$LONG_INFO|" \
$portDir/additional-files/simulide.rdef.in > \
$sourceDir/simulide.rdef
addResourcesToBinaries $sourceDir/simulide.rdef \
$appsDir/SimulIDE/SimulIDE
addAppDeskbarSymlink $appsDir/SimulIDE/SimulIDE
}