Refactoring jjlab.net

I just spent two whole days refactoring and improving my jjlab.net website.

One thing I had to think very carefully about for my modeling was the class/instance distinction for various things, you can see my notes below.

So channels have shows, and shows have features.

A series has segments, and segments have a video.

A series is an instance of a show, and a segment is an instance of a feature.

Everything is easy when you know how!

John's notes about the design of his model

Fixing compile_commands.json for VS Code and Linux kernel sources

I have my Linux kernel sources setup like this:

-------------------
Fri Jun 14 00:35:24 [bash:5.2.15 jobs:0 error:0 time:2449]
jj5@virtuoso:/home/jj5/repo/git/git.kernel.org/torvalds-linux
$ git remote show origin
* remote origin
  Fetch URL: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  Push  URL: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date)
-------------------

The scripts/clang-tools/gen_compile_commands.py runs just fine:

-------------------
Fri Jun 14 00:35:28 [bash:5.2.15 jobs:0 error:0 time:2453]
jj5@virtuoso:/home/jj5/repo/git/git.kernel.org/torvalds-linux
$ scripts/clang-tools/gen_compile_commands.py 
-------------------

But there is a problem with some unknown clang options, as you can see here:

Problems with clang commands in VS Code

So I wrote this collection of sed scripts to delete the problematic options:

-------------------
Fri Jun 14 00:11:28 [bash:5.2.15 jobs:0 error:0 time:1013]
jj5@virtuoso:/home/jj5/repo/git/git.kernel.org/torvalds-linux
$ cat jj5/fix-commands.sh 
#!/bin/bash

main() {

  set -euo pipefail;

  cd "$( dirname "$0" )";

  cd ..;

  local file="compile_commands.json";

  sed -i 's/-mpreferred-stack-boundary=3//g' "$file"
  sed -i 's/-mfunction-return=thunk-extern//g' "$file"
  sed -i 's/-mindirect-branch=thunk-extern//g' "$file"
  sed -i 's/-mindirect-branch-register//g' "$file"
  sed -i 's/-fno-allow-store-data-races//g' "$file"
  sed -i 's/-fconserve-stack//g' "$file"
  sed -i 's/-mrecord-mcount//g' "$file"

}

main "$@";
-------------------

Bug fixed! Thanks to my mates on IRC for helping me fix this one. This clangd extension for VS Code seems to work really well.

p.s. another possible solution is here.

Spiral

My friend sent me this:

a bunch of hardcoded print statement which spiral a counter

It pretty much forced me to write spiral.php and spiral.sh to generate this:

print('1')

print('7 8 9')
print('6 1 2')
print('5 4 3')

print('21 22 23 24 25')
print('20  7  8  9 10')
print('19  6  1  2 11')
print('18  5  4  3 12')
print('17 16 15 14 13')

print('43 44 45 46 47 48 49')
print('42 21 22 23 24 25 26')
print('41 20  7  8  9 10 27')
print('40 19  6  1  2 11 28')
print('39 18  5  4  3 12 29')
print('38 17 16 15 14 13 30')
print('37 36 35 34 33 32 31')

print('73 74 75 76 77 78 79 80 81')
print('72 43 44 45 46 47 48 49 50')
print('71 42 21 22 23 24 25 26 51')
print('70 41 20  7  8  9 10 27 52')
print('69 40 19  6  1  2 11 28 53')
print('68 39 18  5  4  3 12 29 54')
print('67 38 17 16 15 14 13 30 55')
print('66 37 36 35 34 33 32 31 56')
print('65 64 63 62 61 60 59 58 57')

print('111 112 113 114 115 116 117 118 119 120 121')
print('110  73  74  75  76  77  78  79  80  81  82')
print('109  72  43  44  45  46  47  48  49  50  83')
print('108  71  42  21  22  23  24  25  26  51  84')
print('107  70  41  20   7   8   9  10  27  52  85')
print('106  69  40  19   6   1   2  11  28  53  86')
print('105  68  39  18   5   4   3  12  29  54  87')
print('104  67  38  17  16  15  14  13  30  55  88')
print('103  66  37  36  35  34  33  32  31  56  89')
print('102  65  64  63  62  61  60  59  58  57  90')
print('101 100  99  98  97  96  95  94  93  92  91')

print('157 158 159 160 161 162 163 164 165 166 167 168 169')
print('156 111 112 113 114 115 116 117 118 119 120 121 122')
print('155 110  73  74  75  76  77  78  79  80  81  82 123')
print('154 109  72  43  44  45  46  47  48  49  50  83 124')
print('153 108  71  42  21  22  23  24  25  26  51  84 125')
print('152 107  70  41  20   7   8   9  10  27  52  85 126')
print('151 106  69  40  19   6   1   2  11  28  53  86 127')
print('150 105  68  39  18   5   4   3  12  29  54  87 128')
print('149 104  67  38  17  16  15  14  13  30  55  88 129')
print('148 103  66  37  36  35  34  33  32  31  56  89 130')
print('147 102  65  64  63  62  61  60  59  58  57  90 131')
print('146 101 100  99  98  97  96  95  94  93  92  91 132')
print('145 144 143 142 141 140 139 138 137 136 135 134 133')

print('211 212 213 214 215 216 217 218 219 220 221 222 223 224 225')
print('210 157 158 159 160 161 162 163 164 165 166 167 168 169 170')
print('209 156 111 112 113 114 115 116 117 118 119 120 121 122 171')
print('208 155 110  73  74  75  76  77  78  79  80  81  82 123 172')
print('207 154 109  72  43  44  45  46  47  48  49  50  83 124 173')
print('206 153 108  71  42  21  22  23  24  25  26  51  84 125 174')
print('205 152 107  70  41  20   7   8   9  10  27  52  85 126 175')
print('204 151 106  69  40  19   6   1   2  11  28  53  86 127 176')
print('203 150 105  68  39  18   5   4   3  12  29  54  87 128 177')
print('202 149 104  67  38  17  16  15  14  13  30  55  88 129 178')
print('201 148 103  66  37  36  35  34  33  32  31  56  89 130 179')
print('200 147 102  65  64  63  62  61  60  59  58  57  90 131 180')
print('199 146 101 100  99  98  97  96  95  94  93  92  91 132 181')
print('198 145 144 143 142 141 140 139 138 137 136 135 134 133 182')
print('197 196 195 194 193 192 191 190 189 188 187 186 185 184 183')

Error while running rockboxdev.sh

UPDATE: this problem was solved by installing some packages. The relevant hint is highlighted in red below.

This is the salt state I used to install dependencies on my Debian 12 system:

rockbox-dev-tools:
  pkg.latest:
    - pkgs:
      - texinfo
      - texi2html
      - automake
      - autotools-dev
      - libtool
      - libtool-bin
      - autoconf
      - flex
      - bison
      - libisl-dev
      - libgmp-dev
      - libmpc-dev
      - libmpfr-dev

I am following these instructions: https://git.rockbox.org/cgit/rockbox.git/tree/docs/README and am having this problem:

-------------------
Wed Jun 12 17:29:38 [bash:5.2.15 jobs:0 error:0 time:9641]
jj5@virtuoso:/home/jj5/repo/git/git.rockbox.org/rockbox/build
$ sudo ../tools/rockboxdev.sh
Download directory : /tmp/rbdev-dl (set RBDEV_DOWNLOAD or use --dlwhere= to change)
Install prefix     : /usr/local  (set RBDEV_PREFIX or use --prefix= to change)
Build dir          : /tmp/rbdev-build (set RBDEV_BUILD or use --builddir= to change)
Make options       :  (set MAKEFLAGS or use --makeflags= to change)
Restart step       :  (set RBDEV_RESTART or use --restart= to change)
Target arch        :  (set RBDEV_TARGET or use --target= to change)
Select target arch:
m   - m68k     (iriver h1x0/h3x0, iaudio m3/m5/x5 and mpio hd200)
a   - arm      (ipods, iriver H10, Sansa, D2, Gigabeat, older Sony NWZ, etc)
i   - mips     (Jz47xx and ATJ-based players)
x   - arm-linux  (Generic Linux ARM: Samsung ypr0, Linux-based Sony NWZ)
y   - mips-linux  (Generic Linux MIPS: eg the many HiBy-OS targets)
separate multiple targets with spaces
(Example: "m a i" will build m68k, arm, and mips)

a

ROCKBOXDEV: Starting step 'binutils'
ROCKBOXDEV: Downloading binutils-2.26.1.tar.bz2 using curl
ROCKBOXDEV: try http://mirrors.kernel.org/gnu/binutils/binutils-2.26.1.tar.bz2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 24.4M  100 24.4M    0     0   791k      0  0:00:31  0:00:31 --:--:--  702k
ROCKBOXDEV: extracting binutils-2.26.1
ROCKBOXDEV: Getting ISL
ROCKBOXDEV: Downloading isl-0.15.tar.bz2 using curl
ROCKBOXDEV: try https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.15.tar.bz2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1538k  100 1538k    0     0   595k      0  0:00:02  0:00:02 --:--:--  595k
ROCKBOXDEV: logging to /tmp/rbdev-build/build-binutils.log
ROCKBOXDEV: mkdir build-binutils
ROCKBOXDEV: binutils/configure
ROCKBOXDEV: binutils/make
ROCKBOXDEV: an error occured, please see /tmp/rbdev-build/build-binutils.log
-------------------
Wed Jun 12 17:30:31 [bash:5.2.15 jobs:0 error:0 time:9694]
jj5@virtuoso:/home/jj5/repo/git/git.rockbox.org/rockbox/build
$ cat /tmp/rbdev-build/build-binutils.log
Running '../binutils-2.26.1/configure --target=arm-elf-eabi --prefix=/usr/local --disable-docs --disable-werror'
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... arm-elf-eabi
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /usr/bin/sed
checking for gawk... no
checking for mawk... mawk
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking whether g++ accepts -static-libstdc++ -static-libgcc... yes
checking for gnatbind... no
checking for gnatmake... no
checking whether compiler driver understands Ada... no
checking how to compare bootstrapped objects... cmp --ignore-initial=16 $$f1 $$f2
checking for objdir... .libs
configure: WARNING: using in-tree ISL, disabling version check
checking for default BUILD_CONFIG... 
checking for --enable-vtable-verify... no
checking for bison... bison -y
checking for bison... bison
checking for gm4... no
checking for gnum4... no
checking for m4... m4
checking for flex... flex
checking for flex... flex
checking for makeinfo... makeinfo
checking for expect... no
checking for runtest... no
checking for ar... ar
checking for as... as
checking for dlltool... no
checking for ld... ld
checking for lipo... no
checking for nm... nm
checking for ranlib... ranlib
checking for strip... strip
checking for windres... no
checking for windmc... no
checking for objcopy... objcopy
checking for objdump... objdump
checking for readelf... readelf
checking for arm-elf-eabi-cc... no
checking for arm-elf-eabi-gcc... no
checking for arm-elf-eabi-c++... no
checking for arm-elf-eabi-g++... no
checking for arm-elf-eabi-cxx... no
checking for arm-elf-eabi-gxx... no
checking for arm-elf-eabi-gcc... no
checking for arm-elf-eabi-gcj... no
checking for arm-elf-eabi-gfortran... no
checking for arm-elf-eabi-gccgo... no
checking for arm-elf-eabi-ar... no
checking for arm-elf-eabi-as... no
checking for arm-elf-eabi-dlltool... no
checking for arm-elf-eabi-ld... no
checking for arm-elf-eabi-lipo... no
checking for arm-elf-eabi-nm... no
checking for arm-elf-eabi-objcopy... no
checking for arm-elf-eabi-objdump... no
checking for arm-elf-eabi-ranlib... no
checking for arm-elf-eabi-readelf... no
checking for arm-elf-eabi-strip... no
checking for arm-elf-eabi-windres... no
checking for arm-elf-eabi-windmc... no
checking where to find the target ar... just compiled
checking where to find the target as... just compiled
checking where to find the target cc... pre-installed
checking where to find the target c++... pre-installed
checking where to find the target c++ for libstdc++... pre-installed
checking where to find the target dlltool... just compiled
checking where to find the target gcc... pre-installed
checking where to find the target gcj... pre-installed
checking where to find the target gfortran... pre-installed
checking where to find the target gccgo... pre-installed
checking where to find the target ld... just compiled
checking where to find the target lipo... pre-installed
checking where to find the target nm... just compiled
checking where to find the target objcopy... just compiled
checking where to find the target objdump... just compiled
checking where to find the target ranlib... just compiled
checking where to find the target readelf... just compiled
checking where to find the target strip... just compiled
checking where to find the target windres... just compiled
checking where to find the target windmc... just compiled
checking whether to enable maintainer-specific portions of Makefiles... no
configure: creating ./config.status
config.status: creating Makefile
Running 'gmake -j8'
gmake[1]: Entering directory '/tmp/rbdev-build/build-binutils'
gmake[1]: Nothing to be done for 'all-target'.
mkdir -p -- ./intl
mkdir -p -- ./isl
mkdir -p -- ./etc
Configuring in ./intl
Configuring in ./isl
mkdir -p -- ./libiberty
Configuring in ./etc
mkdir -p -- ./zlib
Configuring in ./libiberty
Configuring in ./zlib
configure: creating cache ./config.cache
checking whether to enable maintainer-specific portions of Makefiles... no
checking for makeinfo... makeinfo --split-size=5000000
configure: creating cache ./config.cache
checking whether gmake sets $(MAKE)... configure: creating cache ./config.cache
checking for a BSD-compatible install... /usr/bin/install -c
configure: creating cache ./config.cache
yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether NLS is requested... yes
configure: creating cache ./config.cache
checking for a BSD-compatible install... checking for msgfmt... no
checking for gmsgfmt... /usr/bin/install -c
checking whether build environment is sane... :
checking for xgettext... no
yes
checking build system type... configure: updating cache ./config.cache
checking for msgmerge... no
checking for x86_64-pc-linux-gnu-gcc... gcc
configure: creating ./config.status
checking for a thread-safe mkdir -p... x86_64-pc-linux-gnu
/usr/bin/mkdir -p
checking host system type... checking for gawk... mawk
checking whether gmake sets $(MAKE)... yes
x86_64-pc-linux-gnu
checking target system type... checking whether gmake supports nested variables... yes
checking for C compiler default output file name... arm-elf-eabi
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... checking whether gmake supports nested variables... (cached) yes
checking for x86_64-pc-linux-gnu-gcc... gcc
checking whether the C compiler works... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... checking for perl... perl
checking build system type... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... config.status: creating Makefile

checking for suffix of object files... x86_64-pc-linux-gnu
checking host system type... 
x86_64-pc-linux-gnu
checking for x86_64-pc-linux-gnu-ar... ar
checking for x86_64-pc-linux-gnu-ranlib... ranlib
checking whether to install libiberty headers and static library... no
configure: target_header_dir = 
checking for x86_64-pc-linux-gnu-gcc... gcc
checking whether we are cross compiling... o
checking whether we are using the GNU C compiler... gmake[2]: Entering directory '/tmp/rbdev-build/build-binutils/etc'
gmake[2]: Nothing to be done for 'all'.
gmake[2]: Leaving directory '/tmp/rbdev-build/build-binutils/etc'
yes
checking whether gcc accepts -g... no
checking for suffix of object files... yes
checking for gcc option to accept ISO C89... checking for C compiler default output file name... o
checking whether we are using the GNU C compiler... none needed
a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... yes
checking whether gcc accepts -g... checking build system type... x86_64-pc-linux-gnu
checking host system type... yes
checking for gcc option to accept ISO C89... x86_64-pc-linux-gnu
checking for x86_64-pc-linux-gnu-ranlib... ranlib
checking for library containing strerror... 
checking for suffix of object files... none needed
checking whether gcc understands -c and -o together... o
checking whether we are using the GNU C compiler... none required
checking how to run the C preprocessor... yes
checking whether gcc accepts -g... yes
checking for style of include used by gmake... gcc -E
GNU
checking dependency style of gcc... yes
checking for gcc option to accept ISO C89... checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... none needed
checking how to run the C preprocessor... /usr/bin/grep -E
checking for ANSI C header files... gcc3
checking whether we are using the GNU C++ compiler... gcc -E
yes
checking whether g++ accepts -g... checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking dependency style of g++... gcc3
checking for C compiler vendor... yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for sys/types.h... yes
yes
checking for sys/types.h... checking for sys/stat.h... yes
gnu
yes
checking for stdlib.h... checking for sys/stat.h... checking build system type... x86_64-pc-linux-gnu
checking host system type... yes
yes
checking for string.h... checking for stdlib.h... x86_64-pc-linux-gnu
checking whether the compiler supports function __attribute__((__warn_unused_result__))... yes
yes
yes
checking for __attribute__... checking for memory.h... checking for string.h... yes
checking how to print strings... yes
checking for strings.h... yes
checking for memory.h... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... yes
/usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... checking for inttypes.h... ld
checking if the linker (ld) is GNU ld... yes
yes
checking for BSD- or MS-compatible name lister (nm)... nm
checking the name lister (nm) interface... checking for strings.h... yes
checking for stdint.h... yes
checking for inttypes.h... yes
BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... yes
checking for unistd.h... 1572864
checking for stdint.h... checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for ld option to reload object files... -r
checking for x86_64-pc-linux-gnu-objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for x86_64-pc-linux-gnu-dlltool... dlltool
checking how to associate runtime and link libraries... printf %s\n
checking for x86_64-pc-linux-gnu-ar... ar
checking for archiver @FILE support... yes
yes
checking for off_t... @
checking for x86_64-pc-linux-gnu-strip... no
checking for strip... strip
checking for x86_64-pc-linux-gnu-ranlib... ranlib
checking command to parse nm output from gcc object... checking for unistd.h... yes
checking minix/config.h usability... yes
checking for size_t... no
checking minix/config.h presence... ok
checking for sysroot... no
no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... checking for x86_64-pc-linux-gnu-mt... no
checking for mt... mt
checking if mt is a manifest tool... no
checking how to run the C preprocessor... yes
yes
checking for working alloca.h... checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
gcc -E
checking whether gcc supports -W... yes
checking for alloca... yes
checking whether gcc supports -Wall... checking for ANSI C header files... yes
checking for stdlib.h... (cached) yes
yes
checking whether gcc supports -Wwrite-strings... checking for unistd.h... (cached) yes
checking for getpagesize... yes
checking whether gcc supports -Wc++-compat... yes
checking for working mmap... yes
checking whether gcc supports -Wstrict-prototypes... yes
checking whether gcc supports -pedantic ... yes
checking for sys/types.h... yes
checking whether gcc and cc understand -c and -o together... yes
checking for sys/stat.h... yes
checking whether we are using the GNU C Library 2.1 or newer... yes
yes
checking whether integer division by zero raises SIGFPE... checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for an ANSI C-conforming const... yes
yes
checking for stdint.h... checking for memory.h... yes
checking for inline... yes
checking for unsigned long long... yes
inline
checking whether byte ordering is bigendian... checking for strings.h... yes
checking for inttypes.h... yes
checking for inttypes.h... yes
no
checking for a BSD-compatible install... /usr/bin/install -c
yes
checking whether the inttypes.h PRIxNN macros are broken... checking for stdint.h... checking for sys/file.h... yes
no
checking for ld used by GCC... ld
checking if the linker (ld) is GNU ld... checking for sys/param.h... yes
checking for shared library run path origin... yes
yes
done
checking for unistd.h... checking for limits.h... checking argz.h usability... yes
checking for stdlib.h... (cached) yes
checking for malloc.h... yes
checking for dlfcn.h... yes
checking argz.h presence... yes
yes
checking for argz.h... yes
checking for string.h... (cached) yes
checking limits.h usability... checking for unistd.h... (cached) yes
yes
checking for objdir... .libs
checking for strings.h... (cached) yes
checking for sys/time.h... yes
checking limits.h presence... yes
yes
checking for limits.h... yes
checking for time.h... checking locale.h usability... yes
checking for sys/resource.h... checking if gcc supports -fno-rtti -fno-exceptions... yes
checking locale.h presence... yes
checking for locale.h... yes
yes
checking nl_types.h usability... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... checking for sys/stat.h... (cached) yes
checking for sys/mman.h... yes
checking if gcc static flag -static works... yes
checking nl_types.h presence... yes
checking for fcntl.h... yes
checking for nl_types.h... yes
checking malloc.h usability... yes
checking for alloca.h... yes
yes
checking malloc.h presence... checking for sys/pstat.h... yes
checking for malloc.h... yes
no
checking stddef.h usability... checking for sys/sysmp.h... yes
checking if gcc supports -c -o file.o... no
checking for sys/sysinfo.h... yes
checking stddef.h presence... yes
checking for stddef.h... yes
yes
checking for stdlib.h... (cached) yes
checking for machine/hal_sysinfo.h... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (ld -m elf_x86_64) supports shared libraries... checking for string.h... (cached) yes
yes
checking for a thread-safe mkdir -p... checking for unistd.h... (cached) yes
no
/usr/bin/mkdir -p
checking for gawk... mawk
checking whether gmake sets $(MAKE)... checking for sys/table.h... yes
checking dynamic linker characteristics... checking sys/param.h usability... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for x86_64-pc-linux-gnu-gcc... gcc
no
checking for sys/sysctl.h... no
yes
checking sys/param.h presence... checking for sys/systemcfg.h... yes
checking for sys/param.h... yes
no
checking for feof_unlocked... checking for stdint.h... (cached) yes
checking for stdio_ext.h... yes
checking for process.h... checking for C compiler default output file name... yes
no
checking for fgets_unlocked... checking for sys/prctl.h... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
yes
checking for sys/wait.h that is POSIX.1 compatible... checking how to run the C++ preprocessor... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... yes
yes
checking whether time.h and sys/time.h may both be included... checking for getc_unlocked... g++ -E

checking for suffix of object files... yes
checking whether errno must be declared... o
checking whether we are using the GNU C compiler... no
checking size of int... yes
checking for getcwd... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... 4
checking size of long... yes
checking for getegid... checking for ld used by g++... ld -m elf_x86_64
checking if the linker (ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (ld -m elf_x86_64) supports shared libraries... yes
none needed
checking for style of include used by gmake... GNU
checking dependency style of gcc... 8
checking size of size_t... yes
gcc3
checking for geteuid... checking how to print strings... printf
checking for a sed that does not truncate output... checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... 8
/usr/bin/sed
checking for long long... checking for grep that handles long lines and -e... yes
/usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... checking for getgid... ld
checking if the linker (ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... nm
checking the name lister (nm) interface... yes
checking if g++ static flag -static works... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking for ld option to reload object files... -r
checking for x86_64-pc-linux-gnu-objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for x86_64-pc-linux-gnu-ar... ar
checking for x86_64-pc-linux-gnu-strip... no
checking for strip... strip
checking for x86_64-pc-linux-gnu-ranlib... ranlib
checking command to parse nm output from gcc object... yes
checking for getuid... yes
checking size of long long... yes
checking if g++ supports -c -o file.o... yes
checking for mempcpy... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for perl... perl
checking for pdflatex... no
checking for pod2html... pod2html
checking for stdint types... ok
8
checking for a 64-bit type... yes
checking how to run the C preprocessor... checking for munmap... uint64_t
stdint.h (shortcircuit)
checking for intptr_t... make use of stdint.h in include/isl/stdint.h (assuming C99 compatible system)
checking which gmp to use... system
checking gmp.h usability... gcc -E
no
checking gmp.h presence... yes
checking for putenv... checking for ANSI C header files... no
checking for gmp.h... no
configure: error: gmp.h header not found
yes
checking for uintptr_t... gmake[1]: *** [Makefile:5771: configure-isl] Error 1
gmake[1]: *** Waiting for unfinished jobs....
yes
checking for setenv... yes
yes
checking for ssize_t... checking for setlocale... yes
checking for sys/types.h... yes
yes
checking for sys/stat.h... checking for stpcpy... yes
checking for pid_t... yes
checking for stdlib.h... yes
yes
checking for strcasecmp... checking for string.h... yes
checking for library containing strerror... yes
checking for memory.h... yes
none required
checking for asprintf... checking for strdup... yes
checking for strings.h... yes
yes
checking for inttypes.h... checking for atexit... yes
checking for strtoul... yes
checking for stdint.h... yes
checking for basename... yes
checking for unistd.h... yes
checking for tsearch... yes
yes
checking for dlfcn.h... checking for bcmp... yes
yes
checking for objdir... .libs
checking for __argz_count... yes
checking for bcopy... yes
checking for __argz_stringify... checking if gcc supports -fno-rtti -fno-exceptions... yes
checking for bsearch... yes
no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... checking for __argz_next... yes
checking if gcc static flag -static works... yes
checking for bzero... yes
checking for __fsetlocking... yes
checking if gcc supports -c -o file.o... yes
yes
checking for iconv... checking for calloc... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... yes
yes
checking for iconv declaration... checking for clock... install-shextern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
checking for nl_langinfo and CODESET... yes
checking for ffs... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking how to run the C preprocessor... gcc -E
yes
checking for LC_MESSAGES... checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
yes
checking for getcwd... checking for getpagesize... yes
checking for bison... bison
checking version of bison... 3.8.2, ok
checking whether NLS is requested... yes
checking whether included gettext is requested... no
checking for GNU gettext in libc... yes
yes
checking for working mmap... checking for getpagesize... yes
checking whether to use NLS... yes
checking where the gettext function comes from... libc
checking for aclocal... aclocal
checking for autoconf... autoconf
checking for autoheader... autoheader
yes
checking for gettimeofday... configure: updating cache ./config.cache
yes
configure: creating ./config.status
checking for memcpy... yes
checking for index... yes
checking for strerror... yes
checking for insque... config.status: creating Makefile
yes
config.status: creating config.intl
checking for unistd.h... (cached) yes
config.status: creating config.h
config.status: executing default-1 commands
yes
configure: updating cache ./config.cache
checking for memchr... configure: creating ./config.status
yes
checking for memcmp... yes
checking for memcpy... yes
checking for memmem... yes
checking for memmove... yes
checking for mempcpy... yes
checking for memset... yes
checking for mkstemps... yes
checking for putenv... yes
checking for random... yes
checking for rename... config.status: creating Makefile
config.status: executing depfiles commands
config.status: executing libtool commands
yes
checking for rindex... yes
checking for setenv... yes
checking for snprintf... yes
checking for sigsetmask... yes
checking for stpcpy... yes
checking for stpncpy... yes
checking for strcasecmp... yes
checking for strchr... yes
checking for strdup... yes
checking for strncasecmp... yes
checking for strndup... yes
checking for strnlen... yes
checking for strrchr... yes
checking for strstr... yes
checking for strtod... yes
checking for strtol... yes
checking for strtoul... yes
checking for strtoll... yes
checking for strtoull... yes
checking for strverscmp... yes
checking for tmpnam... yes
checking for vasprintf... yes
checking for vfprintf... yes
checking for vprintf... yes
checking for vsnprintf... yes
checking for vsprintf... yes
checking for waitpid... yes
checking for setproctitle... no
checking whether alloca needs Cray hooks... no
checking stack direction for C alloca... 1
checking for vfork.h... no
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking for _doprnt... no
checking for sys_errlist... no
checking for sys_nerr... no
checking for sys_siglist... no
checking for external symbol _system_configuration... no
checking for __fsetlocking... yes
checking for canonicalize_file_name... yes
checking for dup3... yes
checking for getrlimit... yes
checking for getrusage... yes
checking for getsysinfo... no
checking for gettimeofday... (cached) yes
checking for on_exit... yes
checking for psignal... yes
checking for pstat_getdynamic... no
checking for pstat_getstatic... no
checking for realpath... yes
checking for setrlimit... yes
checking for sbrk... yes
checking for spawnve... no
checking for spawnvpe... no
checking for strerror... yes
checking for strsignal... yes
checking for sysconf... yes
checking for sysctl... no
checking for sysmp... no
checking for table... no
checking for times... yes
checking for wait3... yes
checking for wait4... yes
checking whether basename is declared... yes
checking whether ffs is declared... yes
checking whether asprintf is declared... yes
checking whether vasprintf is declared... yes
checking whether snprintf is declared... yes
checking whether vsnprintf is declared... yes
checking whether calloc is declared... yes
checking whether getenv is declared... yes
checking whether getopt is declared... yes
checking whether malloc is declared... yes
checking whether realloc is declared... yes
checking whether sbrk is declared... yes
checking whether strtol is declared... yes
checking whether strtoul is declared... yes
checking whether strtoll is declared... yes
checking whether strtoull is declared... yes
checking whether strverscmp is declared... yes
checking whether canonicalize_file_name must be declared... no
checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
checking for getpagesize... (cached) yes
checking for working mmap... yes
checking for working strncmp... yes
configure: updating cache ./config.cache
configure: creating ./config.status
config.status: creating Makefile
config.status: creating testsuite/Makefile
config.status: creating config.h
config.status: executing default commands
gmake[1]: Leaving directory '/tmp/rbdev-build/build-binutils'
gmake: *** [Makefile:847: all] Error 2
-------------------

Missing libtool when preparing to build rockbox

UPDATE: the solution to this problem was to install the package ‘libtool-bin’.

I am following these instructions: https://git.rockbox.org/cgit/rockbox.git/tree/docs/README and am having this problem:

-------------------
Wed Jun 12 16:02:02 [bash:5.2.15 jobs:0 error:0 time:4385]
jj5@virtuoso:/home/jj5/repo/git/git.rockbox.org
$ git clone git://git.rockbox.org/rockbox
Cloning into 'rockbox'...
remote: Enumerating objects: 294287, done.
remote: Counting objects: 100% (294287/294287), done.
remote: Compressing objects: 100% (65094/65094), done.
remote: Total 294287 (delta 229471), reused 292590 (delta 227774), pack-reused 0 (from 0)
Receiving objects: 100% (294287/294287), 171.09 MiB | 3.97 MiB/s, done.
Resolving deltas: 100% (229471/229471), done.
-------------------
Wed Jun 12 16:03:02 [bash:5.2.15 jobs:0 error:0 time:4445]
jj5@virtuoso:/home/jj5/repo/git/git.rockbox.org
$ cd rockbox
-------------------
Wed Jun 12 16:03:11 [bash:5.2.15 jobs:0 error:0 time:4454]
jj5@virtuoso:/home/jj5/repo/git/git.rockbox.org/rockbox
$ mkdir build
-------------------
Wed Jun 12 16:03:13 [bash:5.2.15 jobs:0 error:0 time:4456]
jj5@virtuoso:/home/jj5/repo/git/git.rockbox.org/rockbox
$ cd build
-------------------
Wed Jun 12 16:03:15 [bash:5.2.15 jobs:0 error:0 time:4458]
jj5@virtuoso:/home/jj5/repo/git/git.rockbox.org/rockbox/build
$ ../tools/rockboxdev.sh
ROCKBOXDEV: "libtool" is required for this script to work.
ROCKBOXDEV: Please install the missing tools and re-run the script.
-------------------

I did install the ‘libtool’ package on my Debian system, but there is no ‘libtool’ command, only ‘libtoolize’.