Documentation | waf: Fix singlehtml output (!104)
Frank Kuehndel (@frank_k)
gitlab at rtems.org
Tue Feb 18 19:47:08 UTC 2025
Frank Kuehndel commented on a discussion: https://gitlab.rtems.org/rtems/docs/rtems-docs/-/merge_requests/104#note_120079
@ita2048 I added some printout with `####` into `common/waf.py` to see where `inliner` gets called. For example:
```
[...]
so = open(tgt, 'wb')
se = open(tgt + '.err', 'wb')
# inliner does not handle digests and fails to open the file.
with open(src, "rb") as fp:
no_hash = re.sub(b'\\?v=[a-z0-9]{8}', b'', fp.read())
no_digest = re.sub(b'\\?digest=[a-z0-9]{20}', b'', no_hash)
with open(src, "wb") as fp:
fp.write(no_digest)
print(f"###########################################################")
print(f"#### 1: {cmd = }")
r = task.exec_command(cmd, stdout = so, stderr = se, text=True)
so.close()
se.close()
```
With `task.exec_command(cmd, stdout = so, stderr = se, text=True)` or `task.exec_command(cmd, stdout = so, text=True)` and with or without binary mode for output files, the relevant output looks like:
```
[...]
###########################################################
#### 1: cmd = '/usr/local/bin/inliner /home/frank/src/rtems-docs/build/user/singlehtml/index.html'
[ 74/170] Compiling common/_static/logo.webp
[ 75/170] Compiling common/_static/custom.css
[ 76/170] Compiling common/_static/favicon.ico
[ 77/170] Compiling build/bsp-howto/singlehtml/index.html
###########################################################
#### 1: cmd = '/usr/local/bin/inliner /home/frank/src/rtems-docs/build/bsp-howto/singlehtml/index.html'
[ 78/170] Compiling common/_static/custom.css
[ 79/170] Compiling common/_static/favicon.ico
[...]
```
That is to say, `task.exec_command()` terminates `inliner` before it even started doing something. Consequently, the produced file `user.html` is empty:
```
(env) frank at 4fad5497bf94:~/src/rtems-docs> ll build/user/singlehtml/
total 1708
drwxr-xr-x 5 frank users 4096 Feb 18 20:01 .
drwxr-xr-x 6 frank users 4096 Feb 18 20:01 ..
-rw-r--r-- 1 frank users 231 Feb 18 20:01 .buildinfo
drwxr-xr-x 2 frank users 4096 Feb 18 20:01 _images
drwxr-xr-x 7 frank users 4096 Feb 18 20:01 _static
drwxr-xr-x 2 frank users 4096 Feb 18 20:00 _templates
-rw-r--r-- 1 frank users 1711997 Feb 18 20:01 index.html
-rw-r--r-- 1 frank users 6283 Feb 18 20:01 objects.inv
-rw-r--r-- 1 frank users 0 Feb 18 20:01 user.html
-rw-r--r-- 1 frank users 28 Feb 18 20:01 user.html.err
```
I also tried the following code which also results in empty singlepage files:
```
so = open(tgt, 'wb')
se = open(tgt + '.err', 'wb')
# inliner does not handle digests and fails to open the file.
with open(src, "rb") as fp:
no_hash = re.sub(b'\\?v=[a-z0-9]{8}', b'', fp.read())
no_digest = re.sub(b'\\?digest=[a-z0-9]{20}', b'', no_hash)
with open(src, "wb") as fp:
fp.write(no_digest)
print(f"###########################################################")
print(f"#### 1: {cmd = }")
inliner_out, inliner_err = task.generator.bld.cmd_and_log(cmd, output=BOTH, quiet=BOTH)
so.write(inliner_out.encode())
se.write(inliner_err.encode())
#r = task.exec_command(cmd, stdout = so, stderr = se, text=True)
r = 0
so.close()
se.close()
```
When I invoke `inliner` on the command line I get (and this produces the correct output):
```
(env) frank at 4fad5497bf94:~/src/rtems-docs> /usr/local/bin/inliner /home/frank/src/rtems-docs/build/user/singlehtml/index.html >build/user/singlehtml/user.html
3% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1), style-attrs(28), images(33% remaining: js(14), links(7), favicon(1), styles(1),
[...]
100% remaining: links(-1)
Last job: compressing javascript
Time: 2s 38.722ms
```
I also cross checked with my patch (using `popen()`). It still fixes the problem. Albeit, I needed to add `.encode()` now in
```
so.write(inliner_output.encode())
```
I guess the Python version changed in the mean time. Today it is `Python 3.12.9`.
--
View it on GitLab: https://gitlab.rtems.org/rtems/docs/rtems-docs/-/merge_requests/104#note_120079
You're receiving this email because of your account on gitlab.rtems.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/bugs/attachments/20250218/3b5453ce/attachment-0001.htm>
More information about the bugs
mailing list