{"id":3653,"date":"2020-06-21T10:17:41","date_gmt":"2020-06-21T15:17:41","guid":{"rendered":"http:\/\/www.logikalsolutions.com\/wordpress\/?p=3653"},"modified":"2021-02-14T12:28:13","modified_gmt":"2021-02-14T18:28:13","slug":"copperspice-experiments-pt-5","status":"publish","type":"post","link":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/","title":{"rendered":"CopperSpice Experiments &#8211; Pt. 5"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Sometimes trying to avoid creating a Debian package is more work than actually creating the package.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before I got deep into coding modifications of Diamond I wanted to get a GUI GDB front end. Yes, I can use Emacs GDB interface and have, but I quasi-suck at the command line. Yes, I would get better over time, but I had used <a href=\"http:\/\/gede.acidron.com\/\">Gede<\/a> before and it works rather nice. Besides, I&#8217;m currently helping on the family farm with crop spraying and getting interrupted every 45 minutes or so to drag the support take out to the sprayer, then drag it back and fill it. Not a situation for deep ponderous thought.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Building Gede<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s times like these when you make really stupid simple sounding decisions. I didn&#8217;t want Qt 5.x development on this machine. Simple solution, on my primary machine create a VM with Ubuntu 20.04 LTS and all updates. This thing could spin itself up while I was out of the office. I just needed to respond to apply updates and a few other things. So far so good.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Installed virtualbox extras so I could use shared directory and have binary cut &amp; paste.<\/li><li>sudo apt install synaptic<\/li><li>sudo apt-get install build-essential libgl1-mesa-dev<\/li><li>sudo apt-get install exuberant-ctags<\/li><li>sudo apt-get install qt5-default qttools5-dev-tools qtbase5-dev<\/li><li>sudo update-alternatives &#8211;install \/usr\/bin\/python python \/usr\/bin\/python3 20<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">That last step is because there is no &#8220;default&#8221; python set up in Ubuntu. Python3 is installed, but not established as one of the &#8220;alternatives&#8221; for the python command. You can&#8217;t build Gede without python.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since I copied the directory across from my KDE Neon primary system via the shared drive, I did the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">make clean\nmake<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Installing Gede<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I jumped through the hoops of copying back to shared drive, then thumb drive, and finally from thumb to the CopperSpice development system. Then I found out the creator of the build didn&#8217;t have &#8220;just a copy step&#8221; for the install.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"452\" height=\"263\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/build-py-hack.png\" alt=\"\" class=\"wp-image-3654\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/build-py-hack.png 452w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/build-py-hack-300x175.png 300w\" sizes=\"(max-width: 452px) 100vw, 452px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Added a quick hack using Jed editor in a terminal. Copied the elif for &#8220;install&#8221; to one for &#8220;&#8211;install&#8221; and turned off the build flag.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"625\" height=\"136\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/build-py-installed.png\" alt=\"\" class=\"wp-image-3655\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/build-py-installed.png 625w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/build-py-installed-300x65.png 300w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Yeah, I am &#8220;da man!&#8221; or so I thought; especially since I hate python.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"1133\" height=\"123\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-fail.png\" alt=\"\" class=\"wp-image-3656\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-fail.png 1133w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-fail-300x33.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-fail-1024x111.png 1024w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-fail-768x83.png 768w\" sizes=\"(max-width: 1133px) 100vw, 1133px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>*^)(*&amp;)(*&amp;<\/strong> should have took the time to make a .deb package on the other system. Both of these are systems are running Ubuntu 20.04 LTS though. I quick run through applying updates that had no impact what-so-ever. Adding a big red herring to the issue is that 5.12 is what is in the repos. There is no 5.14 in the repos. Adding insult to injury libQt5Core.so.5 is exactly where it says it can&#8217;t find it. I should have included a few more lines of the error because later in the ldd listing it actually found the library and there was a good (non-zero) hex number behind it.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"602\" height=\"117\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/scripts-needed-executable.png\" alt=\"\" class=\"wp-image-3673\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/scripts-needed-executable.png 602w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/scripts-needed-executable-300x58.png 300w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">One by one I start installing Qt stuff from the above list. I skipped the build-essentials line (because it is already here) but one by one I added the packages. Exact same error message every time. I found a pair of .sh files in the tree after some searching that weren&#8217;t flagged as executable. Once I looked at them I realized they were another Red Herring because they were only to run tests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This <em>should<\/em> have worked.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Back to the other machine I go. I create a minimal install of Ubuntu 20.04 LTS with all updates applied in a VM. I then clone the VM just in case I trash the test bed. After quite a bit of trail and error (I&#8217;m not great with Python and generally don&#8217;t like script languages) I modified build.py to be as follows:<\/p>\n\n\n\n<pre title=\"build.py\" class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">#!\/usr\/bin\/env python\n#\n# Written by Johan Henriksson. Copyright (C) 2014-2017.\n#\nimport sys\nimport os\nimport subprocess\nimport tempfile\nimport shutil\nimport platform\n\nFORCE_QT4=1\nFORCE_QT5=2\nAUTODETECT=3\n\ng_dest_path = \"\/usr\/local\"\ng_verbose = False\ng_exeName = \"gede\"\ng_qtVersionToUse = AUTODETECT\ng_qmakeQt4 = \"\"\ng_qmakeQt5 = \"\"\ng_debVersion = \"1.0\"\ng_baseDir = os.getcwd()\n\nprint(\"g_baseDir: %s\" % (g_baseDir))\n        \n# Run the make command\ndef run_make(a_list):\n    if g_verbose:\n        errcode = subprocess.call(['make'] + a_list)\n    else:\n        p = subprocess.Popen(['make'] + a_list, stdout=subprocess.PIPE)\n        out, err = p.communicate()\n        errcode = p.returncode\n        if err:\n            print(err)\n    return errcode\n\n# Remove a file\ndef removeFile(filename):\n    try:\n        os.remove(filename)\n    except OSError:\n        pass\n\n# Do a cleanup\ndef doClean():\n    for p in [\".\/src\",\n            \".\/tests\/tagtest\",\n            \".\/tests\/highlightertest\",\n            \".\/tests\/ini\"\n            ]:\n        print(\"Cleaning up in %s\" % (p))\n        oldP = os.getcwd()\n        os.chdir(p)\n        if os.path.exists(\"Makefile\"):\n            if run_make([\"clean\"]):\n                exit(1)\n        else:\n            os.system(\"rm -f *.o\")\n        removeFile(g_exeName)\n        removeFile(\"Makefile\")\n        removeFile(\".qmake.stash\")\n        os.chdir(oldP)\n\n    \n# Show usage\ndef dump_usage():\n    print(\".\/build.py [OPTIONS]... COMMAND\")\n    print(\"where COMMAND is one of:\")\n    print(\"      install         Installs the program\")\n    print(\"      install-nomake  Installs the program\")\n    print(\"      clean           Cleans the source directory\")\n    print(\"      deb             Build and create .deb\")\n    print(\"where OPTIONS are:\")\n    print(\"      --prefix=DESTDIR  The path to install to (default is %s).\" % (g_dest_path))\n    print(\"      --verbose         Verbose output.\")\n    print(\"      --use-qt4         Use qt4\")\n    print(\"      --use-qt5         Use qt5\")\n    print(\"      --version=n.x.s   Assign version to .deb\")\n    print(\"\")\n    return 1\n\n\ndef exeExist(name):\n    pathEnv = os.environ[\"PATH\"]\n    for path in pathEnv.split(\":\"):\n        if os.path.isfile(path + \"\/\" + name):\n            return path\n    return \"\"\n\ndef printRed(textString):\n    \"\"\" Print in red text \"\"\"\n    CSI=\"\\x1B[\"\n    print(CSI+\"1;31;40m\" + textString + CSI + \"0m\")\n        \ndef ensureExist(name):\n    \"\"\" Checks if an executable exist in the PATH. \"\"\"\n    sys.stdout.write(\"Checking for \" + name + \"... \"),\n    foundPath = exeExist(name)\n    if foundPath:\n        print(\" found in \" + foundPath)\n    else:\n        printRed(\" not found!!\")\n\ndef detectQt():\n    \"\"\" @brief Detects the Qt version installed in the system.\n        @return The name of the qmake executable. \n    \"\"\"\n    global g_qmakeQt4\n    global g_qmakeQt5\n    sys.stdout.write(\"Detecting Qt version... \"),\n    qtVerList = []\n    if exeExist(\"qmake-qt4\"):\n        qtVerList += [\"Qt4\"]\n        g_qmakeQt4 = \"qmake-qt4\";\n    if exeExist(\"qmake-qt5\"):\n        qtVerList += [\"Qt5\"]\n        g_qmakeQt5 = \"qmake-qt5\";\n    if exeExist(\"qmake\"):\n        qtVerList += [\"Qt?\"]\n        if not g_qmakeQt5:\n            g_qmakeQt5 = \"qmake\";\n        else:\n            g_qmakeQt4 = \"qmake\";\n    sys.stdout.write(\", \".join(qtVerList) + \"\\n\")\n    if (not g_qmakeQt4) and (not g_qmakeQt5):\n        print(\"No Qt found\");\n\n    # Which version to use?\n    qmakeName = \"qmake\"\n    if g_qtVersionToUse == FORCE_QT4 and g_qmakeQt4:\n        qmakeName = g_qmakeQt4;\n    elif g_qmakeQt5:\n        qmakeName = g_qmakeQt5;\n    elif g_qmakeQt4:\n        qmakeName = g_qmakeQt4;\n    print(\"Using '\" + qmakeName + \"'\")\n\n    return qmakeName;\n\ndef is_os_64bit():\n    return platform.machine().endswith('64')\n\ndef dependencies_installed():\n    if (shutil.which(\"fakeroot\") != \"None\" and shutil.which(\"gzip\") != \"None\"\n        and shutil.which(\"md5sum\") != None and shutil.which(\"dpkg-deb\") != \"None\"):\n        return True\n    else:\n        print(\"Requires: fakeroot  gzip  md5sum  dpkg-deb be installed\")\n        return False\n       \n\n# Main entry\nif __name__ == \"__main__\":\n    try:\n        do_clean = False\n        do_install = False\n        do_build = True\n        do_buildAll = False\n        do_debian = False\n        \n        for arg in sys.argv[1:]:\n            if arg == \"clean\":\n                do_build = False\n                do_clean = True\n                do_debian = False\n            elif arg == \"install\":\n                do_install = True\n                do_build = True\n                do_debian = False\n            elif arg == \"install-nomake\":\n                do_install = True\n                do_build = False\n                do_debian = False\n            elif arg == \"deb\":\n                do_clean = True\n                do_install = False\n                do_build = True\n                do_debian = True\n            elif arg == \"--help\" or arg == \"help\":\n                exit( dump_usage())\n            elif arg == \"--verbose\":\n                g_verbose = True\n            elif arg == \"--buildall\":\n                do_buildAll = True\n            elif arg.find(\"--prefix=\") == 0:\n                g_dest_path = arg[9:]\n            elif arg == \"--use-qt4\":\n                g_qtVersionToUse = FORCE_QT4\n            elif arg == \"--use-qt5\":\n                g_qtVersionToUse = FORCE_QT5\n            elif arg.find(\"--version=\") == 0:\n                g_debVersion = arg[10:]\n            else:\n                exit(dump_usage())\n\n        if do_clean:\n            print(\"Cleaning\")\n            doClean();\n        if do_build:\n            print(\"building\")\n            ensureExist(\"make\")\n            ensureExist(\"gcc\")\n            ensureExist(\"ctags\")\n            sys.stdout.flush()\n            \n            olddir = os.getcwd()\n            if do_buildAll:\n                srcDirList = [\"src\", \"tests\/tagtest\", \"tests\/highlightertest\"]\n            else:\n                srcDirList = [\"src\"]\n            for srcdir in srcDirList:\n                os.chdir(srcdir)\n                if not os.path.exists(\"Makefile\"):\n                    qmakeName = detectQt();\n                    print(\"Generating makefile\")\n                    if subprocess.call([qmakeName]):\n                        exit(1)\n                print(\"Compiling in \" + srcdir + \" (please wait)\")\n                if run_make([\"-j4\"]):\n                    exit(1)\n                os.chdir(olddir)\n                \n        if do_install:\n            print(\"installing\")\n            os.chdir(\"src\")\n            print(\"Installing to '%s'\" % (g_dest_path) )\n            try:\n                os.makedirs(g_dest_path + \"\/bin\")\n            except:\n                pass\n            if not os.path.isdir(g_dest_path + \"\/bin\"):\n                print(\"Failed to create dir\")\n                exit(1)\n            try:\n                shutil.copyfile(\"gede\", g_dest_path + \"\/bin\/gede\")\n                os.chmod(g_dest_path + \"\/bin\/gede\", 0o775);\n            except:\n                print(\"Failed to install files to \" + g_dest_path)\n                raise\n\n            print(\"\")\n            print(\"Gede has been installed to \" + g_dest_path + \"\/bin\")\n            print(\"Start it by running gede\")\n\n        # This will probably fail if run on RPM based distro\n        # Build will have changed directory so need to get\n        # back to base dir first.\n        #\n        if do_debian:\n            g_tmpDir = tempfile.mkdtemp()\n            print(\"g_tmpDir: %s\"  % (g_tmpDir))\n            os.chdir(g_tmpDir)\n            try:\n                os.makedirs(\"debian\")\n                arr = os.listdir()\n                print(arr)\n            except:\n                pass\n            if not os.path.isdir(g_tmpDir + \"\/debian\"):\n                print(\"Failed to create debian dir\")\n                exit(1)\n            # if I can create the \"root\" I can create subdirs\n            #\n            try:\n                os.chdir(\"debian\")\n                os.makedirs(\"DEBIAN\")\n                os.makedirs(\"usr\/share\/doc\/gede\")\n                os.makedirs(\"usr\/share\/applications\")\n                os.makedirs(\"usr\/local\/bin\")\n            except:\n                print(\"Failed to create debian directories\")\n                raise\n            #\n            #  desktop file\n            #\n            try:\n                os.chdir(\"usr\/share\/applications\")\n                desktop_file = open(\"gede.desktop\", \"w\")\n                desktop_file.write(\"[Desktop Entry]\\n\")\n                desktop_file.write(\"Name=Gede\\n\")\n                desktop_file.write(\"GenericName=Gede GDB frontend\\n\")\n                desktop_file.write(\"Comment=GUI GDB interface\\n\")\n                desktop_file.write(\"Path=\/usr\/local\/bin\\n\")\n                desktop_file.write(\"Exec=gede\\n\")\n                desktop_file.write(\"Termanal=false\\n\")\n                desktop_file.write(\"Type=Application\\n\")\n                desktop_file.write(\"StartupNotify=false\\n\")\n                desktop_file.write(\"MimeType=text\/plain;\\n\")\n                desktop_file.write(\"NoDisplay=false\\n\")\n                desktop_file.close()\n            except:\n                print(\"Failed to create desktop file\")\n                raise\n\n            #\n            #  Required DEBIAN package files\n            #\n            try:\n                os.chdir(g_tmpDir)\n                os.chdir(\"debian\/DEBIAN\")\n                control_file = open(\"control\", \"w\")\n                control_file.write(\"Package: gede\\n\")\n                control_file.write(\"Priority: optional\\n\")\n                control_file.write(\"Section: Development\\n\")\n                control_file.write(\"Maintainer: Johan H. johan@acidron.com\\n\")\n                control_file.write(\"Installed-Size: 1500\\n\")\n                if is_os_64bit():\n                    control_file.write(\"Architecture: amd64\\n\")\n                else:\n                    control_file.write(\"Architecture: i386\\n\")\n\n                control_file.write(\"Version: %s\\n\" % (g_debVersion))\n                qtVersion = detectQt()\n                control_file.write(\"Depends: exuberant-ctags, gdb, \")\n                if qtVersion == g_qmakeQt5:\n                    control_file.write(\"qtbase5-dev\\n\")\n                else:\n                    control_file.write(\"libqt4-dev\\n\")\n\n                control_file.write(\"\"\"Description: Gede is a graphical frontend (GUI) to GDB written in C++ and using the Qt5 or Qt4 toolkit.\n Gede can be compiled on (all?) Linux distributions and on FreeBSD.\n Gede supports debugging programs written in Ada, FreeBasic, C++, C, Rust, Fortran and Go.\n The Gede sourcecode is licensed under the terms of the BSD license. The icons used are from the NetBeans project and licensed under the terms of the NetBeans License Agreement \\n \"\"\")\n                control_file.close()\n                \n            except:\n                print(\"Failed to create required DEBIAN package files\")\n                raise\n\n            try:\n                os.chdir(g_baseDir)\n                os.chdir(\"src\")\n\n                shutil.copyfile(\"gede\", g_tmpDir + \"\/debian\/usr\/local\/bin\/gede\")\n                os.chmod(g_tmpDir + \"\/debian\/usr\/local\/bin\/gede\", 0o775);\n                shutil.copyfile(\"changelog\", g_tmpDir + \"\/debian\/usr\/share\/doc\/gede\/changelog.Debian\")\n                shutil.copyfile(\"..\/LICENSE\", g_tmpDir + \"\/debian\/usr\/share\/doc\/gede\/LICENSE\")\n                #\n                # make the sacred zip\n                #\n                os.chdir(g_tmpDir)\n                os.system(\"gzip --best debian\/usr\/share\/doc\/gede\/changelog*\")\n                os.system(\"md5sum debian\/usr\/share\/doc\/gede\/* 2&gt;\/dev\/null &gt;debian\/DEBIAN\/md5sums\")\n                #\n                # may need to chmod go-w on everything now\n                #\n                os.system(\"fakeroot dpkg-deb -Zgzip --build debian\")\n                shutil.copyfile(\"debian.deb\", g_baseDir + \"\/gede_\" + g_debVersion + \".deb\")\n                os.chdir(g_baseDir)\n                shutil.rmtree(g_tmpDir)\n            except:\n                print(\"Failed to create debian\")\n                raise\n            \n\n    except IOError as e:\n        print(\"I\/O error({0}): {1}\".format(e.errno, e.strerror))\n    except SystemExit as e:\n        pass\n        raise e\n    except:\n        print(\"Error occured\")\n        raise\n\n\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">The Package<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This requires a changelog file be placed in the src directory. I put one line in mine: Empty changelog file. Yes, I sent this stuff to the maintainer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"662\" height=\"94\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-qtchooser.png\" alt=\"\" class=\"wp-image-3670\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-qtchooser.png 662w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-qtchooser-300x43.png 300w\" sizes=\"(max-width: 662px) 100vw, 662px\" \/><figcaption>which version logic doesn&#8217;t work<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The existing logic to determine which version of Qt doesn&#8217;t work in a qtchooser world. I didn&#8217;t bother fixing it, just made sure it defaulted to Qt5. In a good and just world I would have written something to parse the output of ldd and built my dependency list from that.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"971\" height=\"597\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-ldd.png\" alt=\"\" class=\"wp-image-3671\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-ldd.png 971w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-ldd-300x184.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-ldd-768x472.png 768w\" sizes=\"(max-width: 971px) 100vw, 971px\" \/><figcaption>ldd output<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In a just and perfect world I wouldn&#8217;t have used the -dev files for Qt4 and Qt5. In that world I would have only installed the packages containing the needed libraries. Yes, I took the short route. If you are going to use this to debug GnuCOBOL (which translates to C before compiling) you only need enough Qt stuff to run this.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"746\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-after-install-1024x746.png\" alt=\"\" class=\"wp-image-3672\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-after-install-1024x746.png 1024w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-after-install-300x219.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-after-install-768x559.png 768w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/gede-after-install.png 1362w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>After install on minimal machine<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After you sudo dpkg -i gede_whatever.deb you need to sudo apt install -f to install the dependencies. As you can see I was able to launch the debugger front end immediately after the installation on the minimal system.<\/p>\n\n\n\n<pre title=\"Usage\" class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\"># Show usage\ndef dump_usage():\n    print(\".\/build.py [OPTIONS]... COMMAND\")\n    print(\"where COMMAND is one of:\")\n    print(\"      install         Installs the program\")\n    print(\"      install-nomake  Installs the program\")\n    print(\"      clean           Cleans the source directory\")\n    print(\"      deb             Build and create .deb\")\n    print(\"where OPTIONS are:\")\n    print(\"      --prefix=DESTDIR  The path to install to (default is %s).\" % (g_dest_path))\n    print(\"      --verbose         Verbose output.\")\n    print(\"      --use-qt4         Use qt4\")\n    print(\"      --use-qt5         Use qt5\")\n    print(\"      --version=n.x.s   Assign version to .deb\")\n    print(\"\")\n    return 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When you want to generate a .deb you assign a version to it with the &#8211;version=something option. Please make certain this is text without any spaces or characters that are not allowed in a file name.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;m not good with cmake either, but as part of my experiments with CopperSpice and modifying of Diamond editor to have some features I want, I plan on making the build process allow for a Debian build rather than just an install build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/\">&lt;Previous-part<\/a>    <a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/further-adventures-with-copperspice\/\">Next-part><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sometimes trying to avoid creating a Debian package is more work than actually creating the package. Before I got deep into coding modifications of Diamond I wanted to get a GUI GDB front end. Yes, I can use Emacs GDB interface and have, but I quasi-suck at the command line. Yes, I would get better over time, but I had used Gede before and it works rather nice. Besides, I&#8217;m currently helping on the family &hellip; <a title=\"CopperSpice Experiments &#8211; Pt. 5\" class=\"bnm-read-more\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/\"><span class=\"screen-reader-text\">CopperSpice Experiments &#8211; Pt. 5<\/span>Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":3599,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[1835,1846,1845,1267],"class_list":["post-3653","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-information-technology","tag-copperspice","tag-gdb","tag-gede","tag-jed","bnm-entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>CopperSpice Experiments - Pt. 5 &#8211; Logikal Blog<\/title>\n<meta name=\"description\" content=\"I decided I should have a GUI GDB interface to assist in debugging. Gede seems good but needed option to create debian package.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CopperSpice Experiments - Pt. 5 &#8211; Logikal Blog\" \/>\n<meta property=\"og:description\" content=\"I decided I should have a GUI GDB interface to assist in debugging. Gede seems good but needed option to create debian package.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/\" \/>\n<meta property=\"og:site_name\" content=\"Logikal Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-21T15:17:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-14T18:28:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"627\" \/>\n\t<meta property=\"og:image:height\" content=\"585\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"seasoned_geek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"seasoned_geek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/\"},\"author\":{\"name\":\"seasoned_geek\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"headline\":\"CopperSpice Experiments &#8211; Pt. 5\",\"datePublished\":\"2020-06-21T15:17:41+00:00\",\"dateModified\":\"2021-02-14T18:28:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/\"},\"wordCount\":904,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/diamond-1.png\",\"keywords\":[\"CopperSpice\",\"GDB\",\"Gede\",\"jed\"],\"articleSection\":[\"Information Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/\",\"name\":\"CopperSpice Experiments - Pt. 5 &#8211; Logikal Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/diamond-1.png\",\"datePublished\":\"2020-06-21T15:17:41+00:00\",\"dateModified\":\"2021-02-14T18:28:13+00:00\",\"description\":\"I decided I should have a GUI GDB interface to assist in debugging. Gede seems good but needed option to create debian package.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/diamond-1.png\",\"contentUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/diamond-1.png\",\"width\":627,\"height\":585},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-5\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CopperSpice Experiments &#8211; Pt. 5\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\",\"name\":\"Logikal Blog\",\"description\":\"For people with attention spans longer than a Tweet\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\",\"name\":\"seasoned_geek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"caption\":\"seasoned_geek\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\"},\"description\":\"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\\\/Qt touchscreen\\\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \\\"Zinc It!\\\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \\\"The Minimum You Need to Know to Be an OpenVMS Application Developer\\\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \\\"The Minimum You Need to Know\\\" book series was born. Three years later he wrote his first novel \\\"Infinite Exposure\\\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \\\"The Earth That Was\\\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.\",\"sameAs\":[\"https:\\\/\\\/theminimumyouneedtoknow.com\"],\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/author\\\/seasoned_geek\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CopperSpice Experiments - Pt. 5 &#8211; Logikal Blog","description":"I decided I should have a GUI GDB interface to assist in debugging. Gede seems good but needed option to create debian package.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/","og_locale":"en_US","og_type":"article","og_title":"CopperSpice Experiments - Pt. 5 &#8211; Logikal Blog","og_description":"I decided I should have a GUI GDB interface to assist in debugging. Gede seems good but needed option to create debian package.","og_url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/","og_site_name":"Logikal Blog","article_published_time":"2020-06-21T15:17:41+00:00","article_modified_time":"2021-02-14T18:28:13+00:00","og_image":[{"width":627,"height":585,"url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","type":"image\/png"}],"author":"seasoned_geek","twitter_card":"summary_large_image","twitter_misc":{"Written by":"seasoned_geek","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/#article","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/"},"author":{"name":"seasoned_geek","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"headline":"CopperSpice Experiments &#8211; Pt. 5","datePublished":"2020-06-21T15:17:41+00:00","dateModified":"2021-02-14T18:28:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/"},"wordCount":904,"commentCount":0,"publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","keywords":["CopperSpice","GDB","Gede","jed"],"articleSection":["Information Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/","url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/","name":"CopperSpice Experiments - Pt. 5 &#8211; Logikal Blog","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/#primaryimage"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","datePublished":"2020-06-21T15:17:41+00:00","dateModified":"2021-02-14T18:28:13+00:00","description":"I decided I should have a GUI GDB interface to assist in debugging. Gede seems good but needed option to create debian package.","breadcrumb":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/#primaryimage","url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","contentUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","width":627,"height":585},{"@type":"BreadcrumbList","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.logikalsolutions.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"CopperSpice Experiments &#8211; Pt. 5"}]},{"@type":"WebSite","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website","url":"https:\/\/www.logikalsolutions.com\/wordpress\/","name":"Logikal Blog","description":"For people with attention spans longer than a Tweet","publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.logikalsolutions.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842","name":"seasoned_geek","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","url":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","caption":"seasoned_geek"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r"},"description":"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\/Qt touchscreen\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \"Zinc It!\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \"The Minimum You Need to Know to Be an OpenVMS Application Developer\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \"The Minimum You Need to Know\" book series was born. Three years later he wrote his first novel \"Infinite Exposure\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \"The Earth That Was\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.","sameAs":["https:\/\/theminimumyouneedtoknow.com"],"url":"https:\/\/www.logikalsolutions.com\/wordpress\/author\/seasoned_geek\/"}]}},"_links":{"self":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/3653","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/comments?post=3653"}],"version-history":[{"count":0,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/3653\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media\/3599"}],"wp:attachment":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media?parent=3653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/categories?post=3653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/tags?post=3653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}