From ccf5df9fea54f2429e95c076e97bdd49ba9e7474 Mon Sep 17 00:00:00 2001 From: Martin Maly Date: Fri, 16 Jan 2026 18:17:58 -0800 Subject: [PATCH 1/3] Fix ctags Build Use the same macro names as later versions of ctags do to avoid conflict with gcc macro names. --- ctags-5.8/debug.h | 2 +- ctags-5.8/eiffel.c | 2 +- ctags-5.8/general.h | 8 ++++---- ctags-5.8/lregex.c | 30 +++++++++++++++--------------- ctags-5.8/lua.c | 2 +- ctags-5.8/main.c | 2 +- ctags-5.8/options.c | 24 ++++++++++++------------ ctags-5.8/options.h | 2 +- ctags-5.8/parse.c | 2 +- ctags-5.8/python.c | 2 +- ctags-5.8/routines.c | 2 +- ctags-5.8/routines.h | 2 +- plinrelease.sh | 18 +++++++++--------- 13 files changed, 49 insertions(+), 49 deletions(-) diff --git a/ctags-5.8/debug.h b/ctags-5.8/debug.h index 41a6881..95b7930 100644 --- a/ctags-5.8/debug.h +++ b/ctags-5.8/debug.h @@ -58,7 +58,7 @@ enum eDebugLevels { * Function prototypes */ extern void lineBreak (void); -extern void debugPrintf (const enum eDebugLevels level, const char *const format, ...) __printf__ (2, 3); +extern void debugPrintf (const enum eDebugLevels level, const char *const format, ...) CTAGS_ATTR_PRINTF (2, 3); extern void debugPutc (const int level, const int c); extern void debugParseNest (const boolean increase, const unsigned int level); extern void debugCppNest (const boolean begin, const unsigned int level); diff --git a/ctags-5.8/eiffel.c b/ctags-5.8/eiffel.c index b504ac3..0468ab3 100644 --- a/ctags-5.8/eiffel.c +++ b/ctags-5.8/eiffel.c @@ -803,7 +803,7 @@ static void findKeyword (tokenInfo *const token, const keywordId keyword) static boolean parseType (tokenInfo *const token); -static void parseGeneric (tokenInfo *const token, boolean declaration __unused__) +static void parseGeneric (tokenInfo *const token, boolean declaration CTAGS_ATTR_UNUSED) { unsigned int depth = 0; #ifdef TYPE_REFERENCE_TOOL diff --git a/ctags-5.8/general.h b/ctags-5.8/general.h index 2d1d629..94148d8 100644 --- a/ctags-5.8/general.h +++ b/ctags-5.8/general.h @@ -57,11 +57,11 @@ * to prevent warnings about unused variables. */ #if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) && !defined (__GNUG__) -# define __unused__ __attribute__((unused)) -# define __printf__(s,f) __attribute__((format (printf, s, f))) +# define CTAGS_ATTR_UNUSED __attribute__((unused)) +# define CTAGS_ATTR_PRINTF(s,f) __attribute__((format (printf, s, f))) #else -# define __unused__ -# define __printf__(s,f) +# define CTAGS_ATTR_UNUSED +# define CTAGS_ATTR_PRINTF(s,f) #endif /* diff --git a/ctags-5.8/lregex.c b/ctags-5.8/lregex.c index 59f5df6..74190b6 100644 --- a/ctags-5.8/lregex.c +++ b/ctags-5.8/lregex.c @@ -538,11 +538,11 @@ extern void findRegexTags (void) #endif /* HAVE_REGEX */ extern void addTagRegex ( - const langType language __unused__, - const char* const regex __unused__, - const char* const name __unused__, - const char* const kinds __unused__, - const char* const flags __unused__) + const langType language CTAGS_ATTR_UNUSED, + const char* const regex CTAGS_ATTR_UNUSED, + const char* const name CTAGS_ATTR_UNUSED, + const char* const kinds CTAGS_ATTR_UNUSED, + const char* const flags CTAGS_ATTR_UNUSED) { #ifdef HAVE_REGEX Assert (regex != NULL); @@ -564,10 +564,10 @@ extern void addTagRegex ( } extern void addCallbackRegex ( - const langType language __unused__, - const char* const regex __unused__, - const char* const flags __unused__, - const regexCallback callback __unused__) + const langType language CTAGS_ATTR_UNUSED, + const char* const regex CTAGS_ATTR_UNUSED, + const char* const flags CTAGS_ATTR_UNUSED, + const regexCallback callback CTAGS_ATTR_UNUSED) { #ifdef HAVE_REGEX Assert (regex != NULL); @@ -581,7 +581,7 @@ extern void addCallbackRegex ( } extern void addLanguageRegex ( - const langType language __unused__, const char* const regex __unused__) + const langType language CTAGS_ATTR_UNUSED, const char* const regex CTAGS_ATTR_UNUSED) { #ifdef HAVE_REGEX if (! regexBroken) @@ -602,7 +602,7 @@ extern void addLanguageRegex ( */ extern boolean processRegexOption (const char *const option, - const char *const parameter __unused__) + const char *const parameter CTAGS_ATTR_UNUSED) { boolean handled = FALSE; const char* const dash = strchr (option, '-'); @@ -624,7 +624,7 @@ extern boolean processRegexOption (const char *const option, return handled; } -extern void disableRegexKinds (const langType language __unused__) +extern void disableRegexKinds (const langType language CTAGS_ATTR_UNUSED) { #ifdef HAVE_REGEX if (language <= SetUpper && Sets [language].count > 0) @@ -639,8 +639,8 @@ extern void disableRegexKinds (const langType language __unused__) } extern boolean enableRegexKind ( - const langType language __unused__, - const int kind __unused__, const boolean mode __unused__) + const langType language CTAGS_ATTR_UNUSED, + const int kind CTAGS_ATTR_UNUSED, const boolean mode CTAGS_ATTR_UNUSED) { boolean result = FALSE; #ifdef HAVE_REGEX @@ -660,7 +660,7 @@ extern boolean enableRegexKind ( return result; } -extern void printRegexKinds (const langType language __unused__, boolean indent __unused__) +extern void printRegexKinds (const langType language CTAGS_ATTR_UNUSED, boolean indent CTAGS_ATTR_UNUSED) { #ifdef HAVE_REGEX if (language <= SetUpper && Sets [language].count > 0) diff --git a/ctags-5.8/lua.c b/ctags-5.8/lua.c index d385544..ea2546f 100644 --- a/ctags-5.8/lua.c +++ b/ctags-5.8/lua.c @@ -37,7 +37,7 @@ static kindOption LuaKinds [] = { */ /* for debugging purposes */ -static void __unused__ print_string (char *p, char *q) +static void CTAGS_ATTR_UNUSED print_string (char *p, char *q) { for ( ; p != q; p++) fprintf (errout, "%c", *p); diff --git a/ctags-5.8/main.c b/ctags-5.8/main.c index 79948fe..413991b 100644 --- a/ctags-5.8/main.c +++ b/ctags-5.8/main.c @@ -522,7 +522,7 @@ static void makeTags (cookedArgs *args) * Start up code */ -extern int main (int __unused__ argc, char **argv) +extern int main (int CTAGS_ATTR_UNUSED argc, char **argv) { cookedArgs *args; #ifdef VMS diff --git a/ctags-5.8/options.c b/ctags-5.8/options.c index d26627f..08f0046 100644 --- a/ctags-5.8/options.c +++ b/ctags-5.8/options.c @@ -730,7 +730,7 @@ static void processEtagsInclude ( } static void processExcludeOption ( - const char *const option __unused__, const char *const parameter) + const char *const option CTAGS_ATTR_UNUSED, const char *const parameter) { const char *const fileName = parameter + 1; if (parameter [0] == '\0') @@ -867,7 +867,7 @@ static void processFieldsOption ( } static void processFilterTerminatorOption ( - const char *const option __unused__, const char *const parameter) + const char *const option CTAGS_ATTR_UNUSED, const char *const parameter) { freeString (&Option.filterTerminator); Option.filterTerminator = stringCopy (parameter); @@ -930,8 +930,8 @@ static void printProgramIdentification (void) } static void processHelpOption ( - const char *const option __unused__, - const char *const parameter __unused__) + const char *const option CTAGS_ATTR_UNUSED, + const char *const parameter CTAGS_ATTR_UNUSED) { printProgramIdentification (); putchar ('\n'); @@ -1139,8 +1139,8 @@ static void processLanguagesOption ( } static void processLicenseOption ( - const char *const option __unused__, - const char *const parameter __unused__) + const char *const option CTAGS_ATTR_UNUSED, + const char *const parameter CTAGS_ATTR_UNUSED) { printProgramIdentification (); puts (""); @@ -1166,8 +1166,8 @@ static void processListKindsOption ( } static void processListMapsOption ( - const char *const __unused__ option, - const char *const __unused__ parameter) + const char *const CTAGS_ATTR_UNUSED option, + const char *const CTAGS_ATTR_UNUSED parameter) { if (parameter [0] == '\0' || strcasecmp (parameter, "all") == 0) printLanguageMaps (LANG_AUTO); @@ -1183,8 +1183,8 @@ static void processListMapsOption ( } static void processListLanguagesOption ( - const char *const option __unused__, - const char *const parameter __unused__) + const char *const option CTAGS_ATTR_UNUSED, + const char *const parameter CTAGS_ATTR_UNUSED) { printLanguageList (); exit (0); @@ -1358,8 +1358,8 @@ static void processIgnoreOption (const char *const list) } static void processVersionOption ( - const char *const option __unused__, - const char *const parameter __unused__) + const char *const option CTAGS_ATTR_UNUSED, + const char *const parameter CTAGS_ATTR_UNUSED) { printProgramIdentification (); exit (0); diff --git a/ctags-5.8/options.h b/ctags-5.8/options.h index 34150e7..eefe29e 100644 --- a/ctags-5.8/options.h +++ b/ctags-5.8/options.h @@ -122,7 +122,7 @@ extern CONST_OPTION optionValues Option; /* * FUNCTION PROTOTYPES */ -extern void verbose (const char *const format, ...) __printf__ (1, 2); +extern void verbose (const char *const format, ...) CTAGS_ATTR_PRINTF (1, 2); extern void freeList (stringList** const pString); extern void setDefaultTagFileName (void); extern void checkOptions (void); diff --git a/ctags-5.8/parse.c b/ctags-5.8/parse.c index 0b5e2c3..a9abfa0 100644 --- a/ctags-5.8/parse.c +++ b/ctags-5.8/parse.c @@ -376,7 +376,7 @@ extern void freeParserResources (void) */ extern void processLanguageDefineOption ( - const char *const option, const char *const parameter __unused__) + const char *const option, const char *const parameter CTAGS_ATTR_UNUSED) { #ifdef HAVE_REGEX if (parameter [0] == '\0') diff --git a/ctags-5.8/python.c b/ctags-5.8/python.c index 5fdf31b..5c76473 100644 --- a/ctags-5.8/python.c +++ b/ctags-5.8/python.c @@ -135,7 +135,7 @@ static boolean isIdentifierCharacter (int c) * extract all relevant information and create a tag. */ static void makeFunctionTag (vString *const function, - vString *const parent, int is_class_parent, const char *arglist __unused__) + vString *const parent, int is_class_parent, const char *arglist CTAGS_ATTR_UNUSED) { tagEntryInfo tag; initTagEntry (&tag, vStringValue (function)); diff --git a/ctags-5.8/routines.c b/ctags-5.8/routines.c index 83bcdcc..37bb0d4 100644 --- a/ctags-5.8/routines.c +++ b/ctags-5.8/routines.c @@ -526,7 +526,7 @@ static boolean isPathSeparator (const int c) #if ! defined (HAVE_STAT_ST_INO) -static void canonicalizePath (char *const path __unused__) +static void canonicalizePath (char *const path CTAGS_ATTR_UNUSED) { #if defined (MSDOS_STYLE_PATH) char *p; diff --git a/ctags-5.8/routines.h b/ctags-5.8/routines.h index c623e17..61820b8 100644 --- a/ctags-5.8/routines.h +++ b/ctags-5.8/routines.h @@ -85,7 +85,7 @@ extern void freeRoutineResources (void); extern void setExecutableName (const char *const path); extern const char *getExecutableName (void); extern const char *getExecutablePath (void); -extern void error (const errorSelection selection, const char *const format, ...) __printf__ (2, 3); +extern void error (const errorSelection selection, const char *const format, ...) CTAGS_ATTR_PRINTF (2, 3); /* Memory allocation functions */ #ifdef NEED_PROTO_MALLOC diff --git a/plinrelease.sh b/plinrelease.sh index 1870144..4ebe431 100755 --- a/plinrelease.sh +++ b/plinrelease.sh @@ -42,15 +42,15 @@ then fi QMAKE=`which qmake` -QT5QMAKE=`echo ${QMAKE} | grep -i 'Qt5'` -grep -i 'Qt5' ${QMAKE} -if test $? != 0 ; then - echo "The qmake program must be Qt5.4 or higher vintage." - echo "Please adjust PATH to include a Qt5 build if necessary." - echo "Please install Qt5.4 from here if you don't have it already:" - echo "download.qt.io./official_releases/qt/5.4/5.4.2" - exit 1 -fi +# QT5QMAKE=`echo ${QMAKE} | grep -i 'Qt5'` +# grep -i 'Qt5' ${QMAKE} +# if test $? != 0 ; then +# echo "The qmake program must be Qt5.4 or higher vintage." +# echo "Please adjust PATH to include a Qt5 build if necessary." +# echo "Please install Qt5.4 from here if you don't have it already:" +# echo "download.qt.io./official_releases/qt/5.4/5.4.2" +# exit 1 +# fi CLEAN=$1 From abf08e1c64e58ce122dadfb71d2a2660dbb75ab4 Mon Sep 17 00:00:00 2001 From: Martin Maly Date: Sat, 17 Jan 2026 15:55:29 -0800 Subject: [PATCH 2/3] Update plinrelease.sh --- plinrelease.sh | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/plinrelease.sh b/plinrelease.sh index 4ebe431..464578b 100755 --- a/plinrelease.sh +++ b/plinrelease.sh @@ -24,6 +24,8 @@ SETUP="setup.sh" SIDE="simpleide.sh" SETUPSH="./release/linux/${SETUP}" SIDERSH="./release/linux/${SIDE}" +SIMPLE_LIBRARIES="https://github.com/parallaxinc/Simple-Libraries.git" +PROP_LOADER="https://github.com/parallaxinc/PropLoader.git" # # we provide SimpleIDE, PropellerGCC, ctags, qt libs, spin source, and workspace in this packager @@ -33,7 +35,7 @@ LIBAUDIO="/usr/lib/libaudio.so.2" LIBAUDIO2="/usr/lib/x86_64-linux-gnu/libaudio.so.2" SPINLIB="./spin" -which qmake +QMAKE=$(which qmake) if [ $? -ne 0 ] then echo "Qt must be installed. Please install Qt5.4 from here:" @@ -41,27 +43,27 @@ then exit 1 fi -QMAKE=`which qmake` -# QT5QMAKE=`echo ${QMAKE} | grep -i 'Qt5'` -# grep -i 'Qt5' ${QMAKE} -# if test $? != 0 ; then -# echo "The qmake program must be Qt5.4 or higher vintage." -# echo "Please adjust PATH to include a Qt5 build if necessary." -# echo "Please install Qt5.4 from here if you don't have it already:" -# echo "download.qt.io./official_releases/qt/5.4/5.4.2" -# exit 1 -# fi +QMAKE_VERSION=$("${QMAKE}" -query QMAKE_VERSION) +if dpkg --compare-versions "${QMAKE_VERSION}" "lt" "3.1"; then + echo "The qmake program must be 3.1 or higher vintage." + echo "Are you sure you have Qt5 installed?" + echo "Please adjust PATH to include a Qt5 build if necessary." + echo "Please install Qt5:" + echo "sudo apt update && sudo apt install -y qtbase5-dev qt5-qmake" + echo "Or download it from here: https://download.qt.io./archive/qt/5.15" + exit 1 +fi CLEAN=$1 if [ ! -e ./Workspace ] then echo "SimpleIDE Workspace not found. Adding:" - git clone https://github.com/parallaxinc/propsideworkspace/ Workspace + git clone "${SIMPLE_LIBRARIES}" Workspace if [ $? -ne 0 ] then echo "SimpleIDE Workspace git failed. Add it with this command:" - echo "git clone https://github.com/parallaxinc/propsideworkspace/ Workspace" + echo "git clone "${SIMPLE_LIBRARIES}" Workspace" exit 1 fi cd Workspace @@ -204,23 +206,11 @@ if [ ${LIBAUDIO}X != X ]; then fi fi -# -# Quazip no longer needed -# -#MYLDD=`ldd ${BUILD}/${NAME} | grep quazip | awk '{print $3}'` -#QUAZIP=`echo $MYLDD` -# -#cp ${QUAZIP} ${VERSION}/bin -#if test $? != 0; then -# echo "copy ${QUAZIP} failed." -# exit 1 -#fi - export PATH=$PROPGCC/bin:$PATH if [ ! -e $WXLOADER ] ; then echo "proploader not found. Adding:" - git clone https://github.com/dbetz/proploader/ ../proploader + git clone "${PROP_LOADER}" ../proploader pushd `pwd` cd ../proploader export OS=linux @@ -315,9 +305,9 @@ if test $? != 0; then echo "copy workspace failed." exit 1 fi -rm -rf ${VERSION}/parallax/Workspace/.hg +rm -rf ${VERSION}/parallax/Workspace/.git if test $? != 0; then - echo "remove workspace .hg tracking failed." + echo "remove Workspace/.git tracking failed." exit 1 fi From 423065cdfebbca263b59950a72b69b03aae527a6 Mon Sep 17 00:00:00 2001 From: Martin Maly Date: Sat, 17 Jan 2026 16:30:16 -0800 Subject: [PATCH 3/3] GitHub Action --- .github/workflows/package.yaml | 42 ++++++++++++++++++++++++++++++++++ plinrelease.sh | 15 ++++++------ 2 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/package.yaml diff --git a/.github/workflows/package.yaml b/.github/workflows/package.yaml new file mode 100644 index 0000000..827677a --- /dev/null +++ b/.github/workflows/package.yaml @@ -0,0 +1,42 @@ +name: Build SimpleIDE +on: + push: + branches: + - main + - master + - qt5side + pull_request: + branches: + - main + - master + - qt5side +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Install PropGCC + run: | + DIR=$(mktemp -d propgcc-XXXX) + cd ${DIR} + curl --silent -o simpleide.deb 'https://www.parallax.com/package/simpleide-software-for-linux-propeller-c/?wpdmdl=3349&refresh=696bf3f98722b1768682489&ind=1600713241394&filename=simple-ide_1-0-1-rc1_amd64.deb' + ar x simpleide.deb + sudo tar -C / -xzf data.tar.gz + cd .. + rm -rf ${DIR} + shell: bash + + - name: Set up Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.15.*' + host: 'linux' + target: 'desktop' + install-deps: true + + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Build SimpleIDE + run: | + ./plinrelease.sh && ls -al SimpleIDE-*.tar.bz2 + shell: bash diff --git a/plinrelease.sh b/plinrelease.sh index 464578b..55d6c13 100755 --- a/plinrelease.sh +++ b/plinrelease.sh @@ -209,14 +209,13 @@ fi export PATH=$PROPGCC/bin:$PATH if [ ! -e $WXLOADER ] ; then - echo "proploader not found. Adding:" - git clone "${PROP_LOADER}" ../proploader - pushd `pwd` - cd ../proploader - export OS=linux - make - popd - unset OS + echo "proploader not found. Adding:" + git clone "${PROP_LOADER}" ../proploader + make -C ../proploader OS=linux + if [ $? -ne 0 ]; then + echo "PropLoader build failed." + exit 1 + fi fi cp ${WXLOADER} ${VERSION}/bin