Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 771650 Details for
Bug 839300
[guru] app-doc/ford-6.1.11 fails tests
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
build.log
build.log (text/plain), 609.42 KB, created by
Agostino Sarubbo
on 2022-04-18 19:06:18 UTC
(
hide
)
Description:
build.log
Filename:
MIME Type:
Creator:
Agostino Sarubbo
Created:
2022-04-18 19:06:18 UTC
Size:
609.42 KB
patch
obsolete
> * Package: app-doc/ford-6.1.11 > * Repository: guru > * Maintainer: torokhov-s-a@yandex.ru > * USE: abi_x86_64 amd64 elibc_glibc kernel_linux python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 test userland_GNU > * FEATURES: network-sandbox preserve-libs sandbox test userpriv usersandbox > > >@@@@@ PLEASE PAY ATTENTION HERE!!! @@@@@ >This information may help you to understand if this is a duplicate or if this bug exists after you pushed a fix; >This ebuild was merged at the following commit: >https://github.com/gentoo/gentoo/commit/0c70e99a59ed3d82feaa95109b6f824bd7b6056e (Sun Apr 17 20:34:30 UTC 2022) >@@@@@ END @@@@@ > > > >@@@@@ PLEASE PAY ATTENTION HERE!!! @@@@@ >This information may help you to understand if this is a duplicate or if this bug exists after you pushed a fix; >This ebuild was merged at the following commit: >https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=320bee2c6e7508f37c72ceaa0f5b315927a0b6e3 (Sun Apr 17 18:07:40 UTC 2022) >@@@@@ END @@@@@ > > > >@@@@@ PLEASE PAY ATTENTION HERE!!! @@@@@ >This ebuild was merged (directly or as a dependency) because of the following commit: >https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=8a7feaa178b2060d8e777aaf80fb2ab4d7bfb7e8 >@@@@@ END @@@@@ > > > >################## ># emerge --info: # >################## >Portage 3.0.30 (python 3.10.4-final-0, default/linux/amd64/17.1, gcc-11.2.1, glibc-2.35-r2, 4.19.174-gentoo x86_64) >================================================================= >System uname: Linux-4.19.174-gentoo-x86_64-Intel-R-_Xeon-R-_CPU_E5-2650_v4_@_2.20GHz-with-glibc2.35 >KiB Mem: 264046488 total, 140602032 free >KiB Swap: 0 total, 0 free >sh bash 5.1_p16 >ld GNU ld (Gentoo 2.38 p3) 2.38 >app-misc/pax-utils: 1.3.3::gentoo >app-shells/bash: 5.1_p16::gentoo >dev-lang/perl: 5.34.1::gentoo >dev-lang/python: 2.7.18_p15::gentoo, 3.8.13::gentoo, 3.9.12::gentoo, 3.10.4::gentoo >dev-util/cmake: 3.23.1::gentoo >dev-util/meson: 0.61.4-r2::gentoo >sys-apps/baselayout: 2.8::gentoo >sys-apps/openrc: 0.44.10::gentoo >sys-apps/sandbox: 2.29::gentoo >sys-devel/autoconf: 2.71-r1::gentoo >sys-devel/automake: 1.16.5::gentoo >sys-devel/binutils: 2.38-r1::gentoo >sys-devel/binutils-config: 5.4.1::gentoo >sys-devel/gcc: 11.2.1_p20220115::gentoo >sys-devel/gcc-config: 2.5-r1::gentoo >sys-devel/libtool: 2.4.7::gentoo >sys-devel/make: 4.3::gentoo >sys-kernel/linux-headers: 5.17::gentoo (virtual/os-headers) >sys-libs/glibc: 2.35-r2::gentoo >Repositories: > >gentoo > location: /usr/portage > sync-type: rsync > sync-uri: rsync://rsync.gentoo.org/gentoo-portage > priority: -1000 > sync-rsync-verify-jobs: 1 > sync-rsync-verify-max-age: 24 > sync-rsync-extra-opts: > sync-rsync-verify-metamanifest: yes > >guru > location: /opt/guru > masters: gentoo > priority: 0 > >ACCEPT_KEYWORDS="amd64 ~amd64" >ACCEPT_LICENSE="* GPL-3" >CBUILD="x86_64-pc-linux-gnu" >CFLAGS="-O2 -pipe -march=x86-64 -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" >CHOST="x86_64-pc-linux-gnu" >CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt" >CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" >CXXFLAGS="-O2 -pipe -march=x86-64 -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" >DISTDIR="/var/tmp/portage/app-doc/ford-6.1.11/distdir" >EMERGE_DEFAULT_OPTS="--with-bdeps=y -1 -k -b" >ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR" >FCFLAGS="-O2 -pipe -march=x86-64 -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" >FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg buildpkg-live config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms sign split-log strict test unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" >FFLAGS="-O2 -pipe -march=x86-64 -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0" >GENTOO_MIRRORS="http://mirror.leaseweb.com/gentoo/ http://ftp.snt.utwente.nl/pub/os/linux/gentoo/ http://ftp.belnet.be/pub/rsync.gentoo.org/gentoo/ http://distfiles.gentoo.org" >LANG="C.UTF8" >LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--defsym=__gentoo_check_ldflags__=0" >MAKEOPTS="-j42" >PKGDIR="/root/tbci/binpkg" >PORTAGE_CONFIGROOT="/" >PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" >PORTAGE_TMPDIR="/var/tmp" >SHELL="/bin/bash" >USE="acl amd64 bzip2 cli crypt dri elogind fortran gdbm iconv ipv6 jumbo-build libglvnd libtirpc multilib native-symlinks ncurses nls nptl openmp pam pcre readline seccomp split-usr ssl test unicode xattr zlib" ABI_X86="64" ELIBC="glibc" KERNEL="linux" PYTHON_TARGETS="python3_8 python3_9 python3_10" USERLAND="GNU" >Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LC_ALL, LD, LEX, LFLAGS, LIBTOOL, LINGUAS, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS > > > > > >############################## ># emerge history (qlop -mv): # >############################## >2022-04-18T11:53:39 >>> dev-libs/fribidi-1.0.11 >2022-04-18T11:53:41 >>> media-libs/libjpeg-turbo-2.1.3 >2022-04-18T11:53:45 >>> dev-python/markdown-3.3.6 >2022-04-18T11:53:49 >>> virtual/jpeg-100-r1 >2022-04-18T11:53:54 >>> dev-python/pluggy-1.0.0-r1 >2022-04-18T11:53:57 >>> dev-python/markdown-include-0.6.0 >2022-04-18T11:54:02 >>> dev-python/pygments-2.11.2 >2022-04-18T11:54:06 >>> dev-python/python-markdown-math-0.8 >2022-04-18T11:54:13 >>> dev-python/tqdm-4.64.0 >2022-04-18T11:54:17 >>> dev-python/toposort-1.7 >2022-04-18T11:54:21 >>> dev-python/iniconfig-1.1.1 >2022-04-18T11:54:25 >>> dev-python/py-1.11.0-r1 >2022-04-18T11:54:29 >>> dev-python/zope-interface-5.4.0-r1 >2022-04-18T11:54:34 >>> dev-python/soupsieve-2.3.2 >2022-04-18T11:54:39 >>> dev-python/attrs-21.4.0 >2022-04-18T11:54:43 >>> dev-python/lxml-4.8.0-r1 >2022-04-18T11:54:48 >>> dev-python/pytest-7.1.1 >2022-04-18T11:54:53 >>> dev-python/six-1.16.0 >2022-04-18T11:54:58 >>> dev-python/webencodings-0.5.1-r1 >2022-04-18T11:55:02 >>> dev-python/editables-0.3 >2022-04-18T11:55:06 >>> dev-python/html5lib-1.1 >2022-04-18T11:55:11 >>> dev-python/pathspec-0.9.0 >2022-04-18T11:55:16 >>> dev-lang/nasm-2.15.05 >2022-04-18T11:55:20 >>> dev-python/beautifulsoup4-4.11.1 >2022-04-18T11:55:24 >>> dev-python/hatchling-0.22.0 >2022-04-18T11:55:28 >>> dev-python/cython-0.29.28 >2022-04-18T11:55:33 >>> dev-python/pyproject2setuppy-22-r1 >2022-04-18T11:55:40 >>> media-libs/gd-2.3.3-r1 >2022-04-18T11:55:45 >>> x11-libs/pango-1.50.7 >2022-04-18T11:55:54 >>> media-gfx/graphviz-2.50.0 >2022-04-18T11:55:59 >>> dev-python/graphviz-0.20 > > > > >####################################### ># installed packages (qlist -ICvUSS): # >####################################### >acct-group/audio-0-r1:0 >acct-group/cdrom-0-r1:0 >acct-group/dialout-0-r1:0 >acct-group/disk-0-r1:0 >acct-group/input-0-r1:0 >acct-group/kmem-0-r1:0 >acct-group/kvm-0-r1:0 >acct-group/lp-0-r1:0 >acct-group/man-0-r1:0 >acct-group/messagebus-0-r1:0 >acct-group/polkitd-0-r1:0 >acct-group/portage-0:0 >acct-group/render-0-r1:0 >acct-group/sgx-0:0 >acct-group/sshd-0-r1:0 >acct-group/tape-0-r1:0 >acct-group/tty-0-r1:0 >acct-group/video-0-r1:0 >acct-user/man-1-r1:0 >acct-user/messagebus-0-r1:0 >acct-user/polkitd-0-r1:0 >acct-user/portage-0:0 >acct-user/sshd-0-r1:0 >app-admin/eselect-1.4.20:0 -doc -emacs -vim-syntax >app-admin/perl-cleaner-2.30:0 >app-arch/bzip2-1.0.8-r1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static -static-libs -verify-sig >app-arch/gzip-1.12:0 -pic -static -verify-sig >app-arch/libarchive-3.6.1:0/13 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl -blake2 bzip2 e2fsprogs -expat iconv -lz4 lzma -lzo -nettle -static-libs -verify-sig xattr -zstd >app-arch/tar-1.34:0 acl -minimal nls -selinux -verify-sig xattr >app-arch/unzip-6.0_p26:0 bzip2 -natspec unicode >app-arch/xz-utils-5.2.5-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 extra-filters nls split-usr -static-libs -verify-sig >app-arch/zstd-1.5.2:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -lz4 -static-libs threads >app-crypt/gnupg-2.3.4-r2:0 bzip2 -doc -ldap nls readline -selinux smartcard ssl -test tofu -tools -tpm -usb -user-socket -verify-sig -wks-server >app-crypt/gpgme-1.17.1:1/11.6.15 -common-lisp cxx -python python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -qt5 -static-libs -verify-sig >app-crypt/libb2-0.98.1-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -native-cflags openmp -static-libs >app-crypt/libmd-1.0.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 >app-crypt/pinentry-1.2.0:0 -caps -efl -emacs -gnome-keyring -gtk ncurses -qt5 >app-crypt/rhash-1.4.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug nls ssl -static-libs >app-editors/nano-6.2:0 -debug -justify -magic -minimal ncurses nls spell split-usr -static unicode >app-eselect/eselect-fontconfig-20220403:0 >app-eselect/eselect-iptables-20220320:0 >app-eselect/eselect-lib-bin-symlink-0.1.1-r1:0 >app-eselect/eselect-pinentry-0.7.2:0 >app-i18n/man-pages-ja-20180315-r1:0 >app-i18n/man-pages-l10n-4.12.1-r2:0 l10n_cs l10n_da l10n_de l10n_el l10n_es l10n_fi l10n_fr l10n_hu l10n_id l10n_it l10n_mk l10n_nb l10n_nl l10n_pl l10n_pt-BR l10n_ro l10n_sr l10n_sv >app-i18n/man-pages-ru-5.03.2390.2390.20191017-r1:0 >app-i18n/man-pages-zh_CN-1.6.3.6:0 >app-misc/c_rehash-1.7-r1:0 >app-misc/ca-certificates-20211016.3.77:0 -cacert >app-misc/editor-wrapper-4-r1:0 >app-misc/mime-types-2.1.53:0 -nginx >app-misc/pax-utils-1.3.3:0 -caps -debug -python -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 seccomp >app-misc/tmux-3.2a:0 -debug -selinux -utempter -vim-syntax >app-portage/eix-0.36.2:0 -debug -doc nls -sqlite >app-portage/elt-patches-20211104:0 >app-portage/gemato-16.2:0 gpg python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test -tools >app-portage/gentoolkit-0.5.1-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >app-portage/portage-utils-0.93.3:0 nls openmp qmanifest qtegrity -static >app-shells/bash-5.1_p16:0 -afs -bashlogger -examples -mem-scramble net nls -plugins readline -verify-sig >app-shells/push-3.4:0 >app-shells/quoter-4.2:0 >app-text/ansifilter-2.18:0 -qt5 >app-text/build-docbook-catalog-2.2:0 >app-text/docbook-xml-dtd-4.5-r2:4.5 >app-text/docbook-xml-dtd-4.4-r3:4.4 >app-text/docbook-xml-dtd-4.2-r3:4.2 >app-text/docbook-xml-dtd-4.1.2-r7:4.1.2 >app-text/docbook-xsl-stylesheets-1.79.1-r2:0 -ruby >app-text/manpager-1:0 >app-text/opensp-1.5.2-r7:0 -doc nls -static-libs -test >app-text/po4a-0.66:0 -test -test >app-text/sgml-common-0.6.3-r7:0 >app-text/xmlto-0.0.28-r8:0 -latex -text >dev-db/sqlite-3.38.2:3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -doc -icu readline -secure-delete -static-libs -tcl -test -tools >dev-lang/duktape-2.7.0-r1:0/2.7.0 >dev-lang/nasm-2.15.05:0 -doc >dev-lang/perl-5.34.1:0/5.34 -berkdb -debug -doc gdbm ithreads -minimal -quadmath >dev-lang/python-3.10.4:3.10 -bluetooth -build -examples gdbm -hardened -libedit -lto ncurses -pgo readline sqlite ssl -test -tk -verify-sig -wininst xml >dev-lang/python-3.9.12:3.9 -bluetooth -build -examples gdbm -hardened -lto ncurses -pgo readline sqlite ssl -test -tk -verify-sig -wininst xml >dev-lang/python-3.8.13:3.8 -bluetooth -build -examples gdbm -hardened ncurses readline sqlite ssl -test -tk -verify-sig -wininst xml >dev-lang/python-2.7.18_p15:2.7 -berkdb -bluetooth -build -examples gdbm -hardened ncurses readline sqlite ssl -tk -verify-sig -wininst xml >dev-lang/python-exec-2.4.8:2 -native-symlinks python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-lang/python-exec-conf-2.4.6:2 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 >dev-lang/tcl-8.6.12:0/8.6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug threads >dev-libs/elfutils-0.186:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -lzma nls -static-libs -test -threads utils -valgrind -zstd >dev-libs/expat-2.4.8:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -examples -static-libs unicode >dev-libs/fribidi-1.0.11:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -test >dev-libs/glib-2.72.1:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -dbus -debug elf -fam -gtk-doc mime -selinux -static-libs -sysprof -systemtap -test -utils xattr >dev-libs/gmp-6.2.1-r2:0/10.4 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm cxx -doc -pic -static-libs >dev-libs/gobject-introspection-1.72.0:0 -doctool -gtk-doc -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 -test >dev-libs/gobject-introspection-common-1.72.0:0 >dev-libs/isl-0.24-r2:0/23 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs >dev-libs/jsoncpp-1.9.5:0/25 -doc -test >dev-libs/libassuan-2.5.5:0 >dev-libs/libbsd-0.11.6:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -verify-sig >dev-libs/libevent-2.1.12:0/2.1-7 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 clock-gettime -debug -malloc-replacement ssl -static-libs -test threads -verbose-debug >dev-libs/libffi-3.4.2-r1:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -exec-static-trampoline -pax-kernel -static-libs -test >dev-libs/libgcrypt-1.10.1:0/20 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -cpu_flags_arm_aes -cpu_flags_arm_neon -cpu_flags_arm_sha1 -cpu_flags_arm_sha2 -cpu_flags_ppc_altivec -cpu_flags_ppc_vsx2 -cpu_flags_ppc_vsx3 cpu_flags_x86_aes cpu_flags_x86_avx cpu_flags_x86_avx2 -cpu_flags_x86_padlock -cpu_flags_x86_sha cpu_flags_x86_sse4_1 -custom-cflags -doc -static-libs -verify-sig >dev-libs/libgpg-error-1.45:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -common-lisp nls -static-libs >dev-libs/libksba-1.6.0:0 -static-libs >dev-libs/libltdl-2.4.7:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs >dev-libs/libpcre-8.45-r1:3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 cxx jit -libedit pcre16 pcre32 readline split-usr -static-libs unicode zlib >dev-libs/libpcre2-10.40:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 jit -libedit pcre16 pcre32 readline split-usr -static-libs unicode -verify-sig zlib >dev-libs/libpipeline-1.5.5:0 -test >dev-libs/libtasn1-4.18.0:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -test -valgrind >dev-libs/libunistring-1.0:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -static-libs >dev-libs/libuv-1.44.1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 >dev-libs/libxml2-2.9.13-r1:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -examples -icu -lzma python python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 readline -static-libs -test >dev-libs/libxslt-1.1.35:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 crypt -debug -examples -static-libs >dev-libs/lzo-2.10:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -examples split-usr -static-libs >dev-libs/mpc-1.2.1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs >dev-libs/mpfr-4.1.0_p13-r1:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs >dev-libs/nettle-3.7.3:0/8-6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -cpu_flags_arm_neon cpu_flags_x86_aes -cpu_flags_x86_sha -doc gmp -static-libs -test >dev-libs/npth-1.6-r1:0 >dev-libs/openssl-1.1.1n:0/1.1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm cpu_flags_x86_sse2 -rfc3779 -sctp -sslv3 -static-libs -test -tls-compression -tls-heartbeat -vanilla -verify-sig -verify-sig -weak-ssl-ciphers >dev-libs/popt-1.18:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static-libs >dev-perl/Devel-CheckLib-1.140.0:0 -test >dev-perl/Encode-EUCJPASCII-0.30.0-r1:0 -test >dev-perl/Encode-HanExtra-0.230.0-r3:0 >dev-perl/Encode-Locale-1.50.0-r1:0 -test >dev-perl/File-Listing-6.140.0:0 -test >dev-perl/HTML-Parser-3.760.0:0 -test >dev-perl/HTML-Tagset-3.200.0-r2:0 >dev-perl/HTTP-Cookies-6.100.0:0 -test >dev-perl/HTTP-Date-6.50.0:0 >dev-perl/HTTP-Message-6.330.0:0 -test -test >dev-perl/HTTP-Negotiate-6.10.0-r2:0 -test >dev-perl/IO-HTML-1.4.0:0 -test >dev-perl/IO-Socket-INET6-2.720.0-r2:0 -test >dev-perl/IO-Socket-SSL-2.74.0:0 -examples -idn -test >dev-perl/libwww-perl-6.600.0-r1:0 ssl -test >dev-perl/Locale-gettext-1.70.0-r1:0 -test >dev-perl/LWP-MediaTypes-6.40.0:0 -test >dev-perl/LWP-Protocol-https-6.100.0:0 -test >dev-perl/MIME-Charset-1.12.2-r1:0 l10n_ja l10n_zh -test >dev-perl/Module-Build-0.423.100:0 -test >dev-perl/Mozilla-CA-20999999-r1:0 -test >dev-perl/Net-HTTP-6.210.0:0 -minimal -test >dev-perl/Net-SSLeay-1.900.0:0 -examples -examples -minimal -test >dev-perl/Pod-Parser-1.630.0-r1:0 -test >dev-perl/SGMLSpm-1.1-r2:0 -test >dev-perl/Socket6-0.290.0:0 -test >dev-perl/TermReadKey-2.380.0:0 -examples -test >dev-perl/Text-CharWidth-0.40.0-r2:0 -test >dev-perl/Text-WrapI18N-0.60.0-r2:0 -test >dev-perl/TimeDate-2.330.0-r1:0 -test >dev-perl/Try-Tiny-0.310.0:0 -minimal -test >dev-perl/Unicode-LineBreak-2019.1.0:0 >dev-perl/URI-5.100.0:0 -test >dev-perl/WWW-RobotRules-6.20.0-r2:0 -test >dev-perl/XML-Parser-2.460.0-r2:0 >dev-perl/YAML-Tiny-1.730.0-r1:0 -minimal -test >dev-python/appdirs-1.4.4-r2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 >dev-python/attrs-21.4.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/beautifulsoup4-4.11.1:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/certifi-3021.3.16-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/charset_normalizer-2.0.12:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/cython-0.29.28:0 -doc -emacs python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/editables-0.3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/flit_core-3.7.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/graphviz-0.20:0 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/hatchling-0.22.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/html5lib-1.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/idna-3.3:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 >dev-python/importlib_metadata-4.11.3:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/importlib_resources-5.7.0:0 -doc python_targets_pypy3 python_targets_python3_8 -test >dev-python/iniconfig-1.1.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/installer-0.5.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/jaraco-context-4.1.1-r2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/jaraco-functools-3.5.0-r2:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/jaraco-text-3.7.0-r2:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/jinja-3.1.1:0 -doc -examples python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/lxml-4.8.0-r1:0 -doc -examples python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test threads >dev-python/markdown-3.3.6:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/markdown-include-0.6.0:0 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 >dev-python/markupsafe-2.1.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/more-itertools-8.12.0-r1:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/nspektr-0.3.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/ordered-set-4.1.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/packaging-21.3-r2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/pathspec-0.9.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/pluggy-1.0.0-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/py-1.11.0-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/pygments-2.11.2:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/pyparsing-3.0.8:0 -examples python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/pyproject2setuppy-22-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/pypy3-7.3.9:0/pypy39-pp73 bzip2 gdbm jit ncurses sqlite -test -tk >dev-python/pypy3-exe-7.3.9:3.9-7.3.9 bzip2 -cpu_flags_x86_sse2 jit -low-memory ncurses >dev-python/PySocks-1.7.1-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 >dev-python/pytest-7.1.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/python-markdown-math-0.8:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/requests-2.27.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -socks5 -test >dev-python/setuptools-62.1.0:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/setuptools_scm-6.4.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/six-1.16.0:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/soupsieve-2.3.2:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/tomli-2.0.1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/toposort-1.7:0 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/tqdm-4.64.0:0 -examples python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/urllib3-1.26.9:0 -brotli python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/webencodings-0.5.1-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/wheel-0.37.1-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/zipp-3.8.0:0 -doc python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-python/zope-interface-5.4.0-r1:0 python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-util/cmake-3.23.1:0 -doc -emacs ncurses -qt5 -test -test -verify-sig >dev-util/desktop-file-utils-0.26-r2:0 -emacs >dev-util/glib-utils-2.72.1:0 -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 >dev-util/gperf-3.1:0 >dev-util/gtk-doc-am-1.33.2:0 >dev-util/intltool-0.51.0-r2:0 >dev-util/meson-0.61.4-r2:0 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test >dev-util/meson-format-array-0:0 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 >dev-util/ninja-1.10.2-r1:0 -doc -emacs -test -vim-syntax >dev-util/pkgconf-1.8.0-r1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -test >dev-util/re2c-2.2:0 -debug -test >dev-vcs/git-2.35.1:0 blksha1 -cgi curl -cvs -doc -emacs -gnome-keyring gpg -highlight iconv -mediawiki -mediawiki-experimental nls pcre -perforce -perl -ppcsha1 -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 -subversion -test threads -tk webdav -xinetd >media-fonts/liberation-fonts-2.1.3:0 -X -X -fontforge >media-gfx/graphite2-1.3.14_p20210810-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -perl -test >media-gfx/graphviz-2.50.0:0 -X cairo -devil -doc -examples -gtk2 -gts -guile -java -java -lasi -lefty nls -pdf -perl -postscript -python -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 -qt5 -ruby -svg -tcl -webp >media-libs/fontconfig-2.14.0-r1:1.0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -static-libs -test >media-libs/freetype-2.12.0:2 -X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 adobe-cff -brotli bzip2 cleartype-hinting -debug -doc -fontforge harfbuzz -infinality png -static-libs -svg -utils >media-libs/gd-2.3.3-r1:2/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -avif cpu_flags_x86_sse fontconfig -heif jpeg png -static-libs -test -tiff truetype -webp -xpm zlib >media-libs/harfbuzz-4.2.0:0/4.0.0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 cairo -debug -doc -experimental glib graphite -icu introspection -test truetype >media-libs/libjpeg-turbo-2.1.3:0/0.2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cpu_flags_arm_neon -java -java -static-libs >media-libs/libpng-1.6.37-r2:0/16 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -apng -cpu_flags_arm_neon cpu_flags_x86_sse -static-libs >net-dns/libidn2-2.3.2:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -verify-sig >net-firewall/iptables-1.8.7-r2:0/1.8.3 -conntrack -netlink -nftables -pcap split-usr -static-libs >net-libs/gnutls-3.7.3-r1:0/30 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 cxx -dane -doc -examples -guile idn nls openssl -pkcs11 seccomp -sslv2 -sslv3 -static-libs -test -test-full tls-heartbeat -tools -valgrind >net-libs/libmnl-1.0.5:0/0.2.0 -examples -verify-sig >net-libs/libnsl-2.0.0-r1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs >net-libs/libtirpc-1.3.2:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 ipv6 -kerberos split-usr -static-libs >net-libs/nghttp2-1.47.0:0/1.14 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cxx -debug -hpack-tools -jemalloc -static-libs -test threads -utils -xml >net-misc/curl-7.82.0-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -adns -alt-svc -brotli -curl_ssl_gnutls -curl_ssl_mbedtls -curl_ssl_nss curl_ssl_openssl ftp -gnutls -gopher -hsts http2 -idn imap ipv6 -kerberos -ldap -mbedtls -nghttp3 -nss openssl pop3 progress-meter -quiche -rtmp -samba smtp -ssh ssl -sslv3 -static-libs -telnet -test tftp -threads -zstd >net-misc/iputils-20211215:0 arping -caps -clockdiff -doc filecaps -gcrypt -idn -nettle nls -rarpd -rdisc ssl -static -test -tracepath >net-misc/netifrc-0.7.3:0 >net-misc/openssh-9.0_p1:0 -X -X509 -abi_mips_n32 -audit -debug -hpn -kerberos -ldns -libedit -livecd pam pie -sctp -security-key -selinux ssl -static -test -verify-sig -xmss >net-misc/rsync-3.2.4:0 acl -examples iconv ipv6 -lz4 ssl -stunnel -system-zlib -verify-sig xattr -xxhash -zstd >net-misc/wget-1.21.3:0 -cookie-check -debug -gnutls -idn ipv6 -metalink nls -ntlm pcre ssl -static -test -uuid -verify-sig zlib >perl-core/CPAN-2.290.0-r1:0 >perl-core/Encode-3.120.0:0 >perl-core/File-Temp-0.231.100:0 >perl-core/Scalar-List-Utils-1.560.0:0 >sec-keys/openpgp-keys-gentoo-release-20220101:0 -test >sys-apps/acl-2.3.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls split-usr -static-libs >sys-apps/attr-2.5.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug nls split-usr -static-libs >sys-apps/baselayout-2.8:0 -build split-usr >sys-apps/coreutils-9.1:0 acl -caps -gmp -hostname -kill -multicall nls -selinux split-usr -static -test -vanilla -verify-sig xattr >sys-apps/dbus-1.14.0:0 -X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -doc elogind -selinux -static-libs -systemd -test -test >sys-apps/debianutils-5.7:0 installkernel -static >sys-apps/diffutils-3.8:0 nls -static -verify-sig >sys-apps/file-5.41:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -lzma -python python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -seccomp -static-libs zlib >sys-apps/findutils-4.9.0:0 nls -selinux -static -test -verify-sig >sys-apps/gawk-5.1.1-r2:0 -mpfr nls readline -verify-sig >sys-apps/gentoo-functions-0.15:0 >sys-apps/grep-3.7:0 nls pcre -static -verify-sig >sys-apps/groff-1.22.4:0 -X -examples -uchardet >sys-apps/help2man-1.48.5:0 nls >sys-apps/install-xattr-0.8:0 >sys-apps/iproute2-5.17.0:0 -atm -berkdb -bpf -caps -elf iptables -libbsd -minimal -selinux >sys-apps/kbd-2.4.0:0 nls pam -test >sys-apps/kmod-29:0 -debug -doc lzma -pkcs7 -python python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -static-libs tools zlib -zstd >sys-apps/less-590:0 pcre unicode >sys-apps/man-db-2.10.2-r1:0 manpager nls seccomp -selinux -static-libs zlib >sys-apps/man-pages-5.13:0 l10n_de l10n_es l10n_fr l10n_it l10n_ja l10n_nl l10n_pl l10n_pt-BR l10n_ro l10n_ru l10n_zh-CN >sys-apps/man-pages-posix-2017a:0 >sys-apps/net-tools-2.10:0 arp hostname ipv6 -nis nls -plipconfig -selinux -slattach -static >sys-apps/openrc-0.44.10:0 -audit -bash -debug ncurses netifrc -newnet pam -selinux -sysv-utils unicode >sys-apps/portage-3.0.30-r2:0 -apidoc -build -doc -gentoo-dev ipc native-extensions python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 rsync-verify -selinux -test xattr >sys-apps/sandbox-2.29:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 abi_x86_32 abi_x86_64 -abi_x86_x32 nnp >sys-apps/sed-4.8:0 acl nls -selinux -static -verify-sig >sys-apps/shadow-4.11.1:0/4 acl -audit -bcrypt -cracklib nls pam -selinux -skey split-usr -su xattr >sys-apps/systemd-tmpfiles-249.9:0 -selinux -test >sys-apps/sysvinit-3.03:0 -ibm nls -selinux -static -verify-sig >sys-apps/texinfo-6.8:0 nls standalone -static >sys-apps/util-linux-2.38:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -audit -build -caps cramfs -cryptsetup -fdformat hardlink -kill logger -magic ncurses nls pam -python python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 readline -rtas -selinux -slang split-usr -static-libs su suid -systemd -test -tty-helpers -udev unicode -verify-sig >sys-apps/which-2.21:0 >sys-auth/elogind-246.10-r2:0 acl -audit cgroup-hybrid -debug -doc pam policykit -selinux >sys-auth/pambase-20220214:0 -caps -debug elogind -gnome-keyring -homed -minimal -mktemp nullok -pam_krb5 -pam_ssh passwdqc -pwhistory -pwquality -securetty -selinux sha512 -systemd -yescrypt >sys-auth/passwdqc-2.0.2-r1:0 >sys-auth/polkit-0.120_p20220221:0 duktape -examples -gtk introspection -kde pam -selinux -systemd -test >sys-devel/autoconf-2.71-r1:2.71 -emacs >sys-devel/autoconf-archive-2022.02.11:0 >sys-devel/autoconf-wrapper-20220130:0 >sys-devel/automake-1.16.5:1.16 -test >sys-devel/automake-wrapper-11:0 >sys-devel/binutils-2.38-r1:2.38 -cet -default-gold -doc gold -multitarget nls -pgo plugins -static-libs -test -vanilla >sys-devel/binutils-config-5.4.1:0 -native-symlinks >sys-devel/bison-3.8.2:0 -examples nls -static -test -verify-sig >sys-devel/flex-2.6.4-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static -test >sys-devel/gcc-11.2.1_p20220115:11 -ada -cet -custom-cflags cxx -d -debug -doc -fixed-point fortran -go graphite -hardened -jit -libssp lto multilib nls nptl -objc -objc++ -objc-gc openmp -pch -pgo pie sanitize ssp -systemtap -test -valgrind -vanilla -vtv -zstd >sys-devel/gcc-config-2.5-r1:0 cc-wrappers -native-symlinks >sys-devel/gettext-0.21-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl -cvs cxx -doc -emacs -git -java -java ncurses nls openmp -static-libs -verify-sig >sys-devel/gnuconfig-20210107:0 >sys-devel/libtool-2.4.7:2 -vanilla >sys-devel/m4-1.4.19:0 -examples nls -verify-sig >sys-devel/make-4.3:0 -guile nls -static -verify-sig >sys-devel/patch-2.7.6-r4:0 -static -test -verify-sig xattr >sys-fs/e2fsprogs-1.46.5:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cron -fuse -lto nls split-usr -static-libs threads tools >sys-fs/udev-249.9:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl kmod -selinux split-usr -test >sys-fs/udev-init-scripts-35:0 >sys-kernel/installkernel-gentoo-5:0 -grub >sys-kernel/linux-headers-5.17:0 -headers-only >sys-libs/binutils-libs-2.38-r1:0/2.38 -64-bit-bfd -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cet -multitarget nls -static-libs >sys-libs/gdbm-1.23:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 berkdb nls readline -static-libs -verify-sig >sys-libs/glibc-2.35-r2:2.2 -audit -caps -cet clone3 -compile-locales -crypt -custom-cflags -doc -gd -headers-only multiarch multilib -multilib-bootstrap -nscd -profile -selinux ssp static-libs -suid -systemd -systemtap -test -vanilla >sys-libs/libcap-2.64:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 pam split-usr -static-libs -tools >sys-libs/libseccomp-2.5.3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -python python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -static-libs -test >sys-libs/libxcrypt-4.4.28:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 abi_x86_32 abi_x86_64 -abi_x86_x32 compat split-usr -static-libs system -test >sys-libs/ncurses-6.3_p20211106:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -ada cxx -debug -doc -gpm -minimal -profile split-usr -static-libs -test tinfo -trace >sys-libs/pam-1.5.2-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -audit -berkdb -debug filecaps -nis -selinux >sys-libs/readline-8.1_p2:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static-libs unicode -utils -verify-sig >sys-libs/timezone-data-2022a:0 -leaps-timezone nls -zic-slim >sys-libs/zlib-1.2.12-r2:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 minizip split-usr -static-libs -verify-sig >sys-process/procps-3.3.17-r1:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 elogind kill -modern-top ncurses nls -selinux split-usr -static-libs -systemd -test unicode >sys-process/psmisc-23.4-r1:0 -X ipv6 nls -selinux >virtual/acl-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs >virtual/awk-1:0 >virtual/dev-manager-0-r2:0 >virtual/editor-0-r3:0 >virtual/jpeg-100-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs >virtual/libc-1-r1:0 >virtual/libcrypt-2:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs >virtual/libelf-3:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 >virtual/libiconv-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 >virtual/libintl-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 >virtual/libudev-232-r5:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -systemd >virtual/man-0-r4:0 >virtual/os-headers-0-r2:0 >virtual/package-manager-1:0 >virtual/pager-0:0 >virtual/perl-Carp-1.520.0-r1:0 >virtual/perl-Compress-Raw-Bzip2-2.101.0:0 >virtual/perl-Compress-Raw-Zlib-2.101.0:0 >virtual/perl-CPAN-2.290.0:0 >virtual/perl-CPAN-Meta-2.150.10-r5:0 >virtual/perl-CPAN-Meta-Requirements-2.140.0-r7:0 >virtual/perl-CPAN-Meta-YAML-0.18.0-r7:0 >virtual/perl-Data-Dumper-2.179.0:0 >virtual/perl-Digest-MD5-2.580.0:0 >virtual/perl-Encode-3.120.0:0 >virtual/perl-Exporter-5.760.0:0 >virtual/perl-ExtUtils-CBuilder-0.280.236:0 >virtual/perl-ExtUtils-Install-2.200.0:0 >virtual/perl-ExtUtils-MakeMaker-7.620.0:0 >virtual/perl-ExtUtils-Manifest-1.730.0:0 >virtual/perl-ExtUtils-ParseXS-3.430.0:0 >virtual/perl-File-Spec-3.800.0:0 >virtual/perl-File-Temp-0.231.100:0 >virtual/perl-Getopt-Long-2.520.0:0 >virtual/perl-IO-1.460.0:0 >virtual/perl-IO-Compress-2.102.0:0 >virtual/perl-IO-Socket-IP-0.410.0:0 >virtual/perl-JSON-PP-4.60.0:0 >virtual/perl-libnet-3.130.0:0 ssl >virtual/perl-MIME-Base64-3.160.0:0 >virtual/perl-Module-Metadata-1.0.37-r1:0 >virtual/perl-parent-0.238.0-r1:0 >virtual/perl-Parse-CPAN-Meta-2.150.10-r5:0 >virtual/perl-Perl-OSType-1.10.0-r5:0 >virtual/perl-podlators-4.140.0-r2:0 >virtual/perl-Scalar-List-Utils-1.560.0:0 >virtual/perl-Test-Harness-3.430.0:0 >virtual/perl-Text-ParseWords-3.300.0-r8:0 >virtual/perl-Time-Local-1.300.0:0 >virtual/perl-version-0.992.800:0 >virtual/perl-XSLoader-0.300.0-r4:0 >virtual/pkgconfig-2-r1:0 >virtual/service-manager-1:0 >virtual/ssh-0:0 -minimal >virtual/tmpfiles-0-r1:0 >virtual/ttf-fonts-1-r1:0 >virtual/udev-217-r3:0 >virtual/yacc-0:0 >www-client/pybugz-0.13-r1:0 python_targets_python3_8 python_targets_python3_9 >x11-base/xcb-proto-1.14.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 >x11-base/xorg-proto-2021.5:0 -test >x11-libs/cairo-1.16.0-r5:0 X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -aqua -debug -gles2-only glib -opengl -static-libs svg -utils -valgrind >x11-libs/libX11-1.7.5:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc ipv6 -test >x11-libs/libXau-1.0.9-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc >x11-libs/libxcb-1.14:0/1.12 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -doc -selinux -test xkb >x11-libs/libXdmcp-1.1.3-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc >x11-libs/libXext-1.3.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc >x11-libs/libXrender-0.9.10-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 >x11-libs/pango-1.50.7:0 -X -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug introspection -sysprof >x11-libs/pixman-0.40.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cpu_flags_arm_iwmmxt -cpu_flags_arm_iwmmxt2 -cpu_flags_arm_neon -cpu_flags_ppc_altivec cpu_flags_x86_mmxext cpu_flags_x86_sse2 cpu_flags_x86_ssse3 -loongson2f -static-libs >x11-libs/xtrans-1.4.0:0 -doc >x11-misc/compose-tables-1.7.5:0 >x11-misc/shared-mime-info-2.2:0 -test > > >####################### ># build.log # >####################### >>>> Unpacking source... >>>> Unpacking FORD-6.1.11.tar.gz to /var/tmp/portage/app-doc/ford-6.1.11/work >>>> Source unpacked in /var/tmp/portage/app-doc/ford-6.1.11/work >>>> Preparing source in /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11 ... >>>> Source prepared. >>>> Configuring source in /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11 ... >>>> Source configured. >>>> Compiling source in /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11 ... > * python3_8: running distutils-r1_run_phase distutils-r1_python_compile >python3.8 setup.py build -j 42 >running build >running build_py >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/utils.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/tipue_search.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/sourceform.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/reader.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/pagetree.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/output.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/md_striped_table.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/md_environ.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/intrinsics.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/graphs.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/graphmanager.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/fortran_project.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/fixed2free2.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/_version.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/__main__.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/__init__.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >running egg_info >writing FORD.egg-info/PKG-INFO >writing dependency_links to FORD.egg-info/dependency_links.txt >writing entry points to FORD.egg-info/entry_points.txt >writing requirements to FORD.egg-info/requires.txt >writing top-level names to FORD.egg-info/top_level.txt >listing git files failed - pretending there aren't any >reading manifest file 'FORD.egg-info/SOURCES.txt' >reading manifest template 'MANIFEST.in' >adding license file 'LICENSE' >writing manifest file 'FORD.egg-info/SOURCES.txt' >copying ford/config.json -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >copying ford/favicon.png -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css >copying ford/css/bootstrap.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css >copying ford/css/bootstrap.min.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css >copying ford/css/font-awesome.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css >copying ford/css/font-awesome.min.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css >copying ford/css/local.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css >copying ford/css/pygments.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/FontAwesome.otf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.eot -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.svg -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.ttf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.woff -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.eot -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.svg -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.ttf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.woff -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js >copying ford/js/bootstrap.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js >copying ford/js/bootstrap.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js >copying ford/js/ie10-viewport-bug-workaround.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js >copying ford/js/jquery-2.1.3.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js >copying ford/js/svg-pan-zoom.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js/MathJax-config >copying ford/js/MathJax-config/.gitignore -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js/MathJax-config >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/absint_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/base.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/block_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/block_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/file_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/file_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/genint_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/index.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/info_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/macros.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/mod_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/mod_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/nongenint_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/proc_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/proc_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/prog_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/prog_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/search.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/type_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >copying ford/templates/types_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch >copying ford/tipuesearch/.DS_Store -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch_set.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/.DS_Store -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/loader.gif -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/search.png -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/img >warning: build_py: byte-compiling is disabled, skipping. > > * python3_9: running distutils-r1_run_phase distutils-r1_python_compile >python3.9 setup.py build -j 42 >running build >running build_py >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/utils.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/tipue_search.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/sourceform.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/reader.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/pagetree.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/output.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/md_striped_table.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/md_environ.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/intrinsics.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/graphs.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/graphmanager.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/fortran_project.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/fixed2free2.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/_version.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/__main__.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/__init__.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >running egg_info >writing FORD.egg-info/PKG-INFO >writing dependency_links to FORD.egg-info/dependency_links.txt >writing entry points to FORD.egg-info/entry_points.txt >writing requirements to FORD.egg-info/requires.txt >writing top-level names to FORD.egg-info/top_level.txt >listing git files failed - pretending there aren't any >reading manifest file 'FORD.egg-info/SOURCES.txt' >reading manifest template 'MANIFEST.in' >adding license file 'LICENSE' >writing manifest file 'FORD.egg-info/SOURCES.txt' >copying ford/config.json -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >copying ford/favicon.png -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/css >copying ford/css/bootstrap.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/css >copying ford/css/bootstrap.min.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/css >copying ford/css/font-awesome.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/css >copying ford/css/font-awesome.min.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/css >copying ford/css/local.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/css >copying ford/css/pygments.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/css >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/FontAwesome.otf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.eot -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.svg -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.ttf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.woff -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.eot -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.svg -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.ttf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.woff -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/fonts >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/js >copying ford/js/bootstrap.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/js >copying ford/js/bootstrap.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/js >copying ford/js/ie10-viewport-bug-workaround.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/js >copying ford/js/jquery-2.1.3.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/js >copying ford/js/svg-pan-zoom.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/js >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/js/MathJax-config >copying ford/js/MathJax-config/.gitignore -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/js/MathJax-config >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/absint_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/base.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/block_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/block_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/file_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/file_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/genint_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/index.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/info_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/macros.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/mod_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/mod_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/nongenint_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/proc_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/proc_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/prog_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/prog_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/search.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/type_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >copying ford/templates/types_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/templates >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch >copying ford/tipuesearch/.DS_Store -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch_set.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/.DS_Store -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/loader.gif -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/search.png -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_9/lib/ford/tipuesearch/img >warning: build_py: byte-compiling is disabled, skipping. > > * python3_10: running distutils-r1_run_phase distutils-r1_python_compile >python3.10 setup.py build -j 42 >running build >running build_py >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/utils.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/tipue_search.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/sourceform.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/reader.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/pagetree.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/output.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/md_striped_table.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/md_environ.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/intrinsics.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/graphs.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/graphmanager.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/fortran_project.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/fixed2free2.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/_version.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/__main__.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/__init__.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >running egg_info >writing FORD.egg-info/PKG-INFO >writing dependency_links to FORD.egg-info/dependency_links.txt >writing entry points to FORD.egg-info/entry_points.txt >writing requirements to FORD.egg-info/requires.txt >writing top-level names to FORD.egg-info/top_level.txt >listing git files failed - pretending there aren't any >reading manifest file 'FORD.egg-info/SOURCES.txt' >reading manifest template 'MANIFEST.in' >adding license file 'LICENSE' >writing manifest file 'FORD.egg-info/SOURCES.txt' >copying ford/config.json -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >copying ford/favicon.png -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/css >copying ford/css/bootstrap.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/css >copying ford/css/bootstrap.min.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/css >copying ford/css/font-awesome.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/css >copying ford/css/font-awesome.min.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/css >copying ford/css/local.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/css >copying ford/css/pygments.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/css >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/FontAwesome.otf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.eot -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.svg -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.ttf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/fontawesome-webfont.woff -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.eot -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.svg -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.ttf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >copying ford/fonts/glyphicons-halflings-regular.woff -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/fonts >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/js >copying ford/js/bootstrap.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/js >copying ford/js/bootstrap.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/js >copying ford/js/ie10-viewport-bug-workaround.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/js >copying ford/js/jquery-2.1.3.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/js >copying ford/js/svg-pan-zoom.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/js >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/js/MathJax-config >copying ford/js/MathJax-config/.gitignore -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/js/MathJax-config >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/absint_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/base.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/block_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/block_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/file_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/file_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/genint_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/index.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/info_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/macros.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/mod_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/mod_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/nongenint_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/proc_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/proc_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/prog_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/prog_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/search.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/type_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >copying ford/templates/types_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/templates >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch >copying ford/tipuesearch/.DS_Store -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch >copying ford/tipuesearch/tipuesearch_set.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/.DS_Store -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/loader.gif -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch/img >copying ford/tipuesearch/img/search.png -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_10/lib/ford/tipuesearch/img >warning: build_py: byte-compiling is disabled, skipping. > >>>> Source compiled. >>>> Test phase: app-doc/ford-6.1.11 > * python3_8: running distutils-r1_run_phase python_test >python3.8 setup.py install --root=/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test --install-lib=lib --install-scripts=scripts >running install >running build >running build_py >copying ford/_version.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford >running egg_info >writing FORD.egg-info/PKG-INFO >writing dependency_links to FORD.egg-info/dependency_links.txt >writing entry points to FORD.egg-info/entry_points.txt >writing requirements to FORD.egg-info/requires.txt >writing top-level names to FORD.egg-info/top_level.txt >/usr/lib/python3.8/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. > warnings.warn( >listing git files failed - pretending there aren't any >reading manifest file 'FORD.egg-info/SOURCES.txt' >reading manifest template 'MANIFEST.in' >adding license file 'LICENSE' >writing manifest file 'FORD.egg-info/SOURCES.txt' >warning: build_py: byte-compiling is disabled, skipping. > >running install_lib >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/_version.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch/img >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/img/search.png -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch/img >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/img/loader.gif -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch/img >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/img/.DS_Store -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch/img >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/tipuesearch_set.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/tipuesearch.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/tipuesearch.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/tipuesearch.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipuesearch/.DS_Store -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/tipuesearch >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/types_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/type_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/search.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/prog_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/prog_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/proc_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/proc_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/nongenint_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/mod_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/mod_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/macros.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/info_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/index.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/genint_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/file_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/file_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/block_page.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/block_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/base.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/templates/absint_list.html -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/templates >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/js >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/js/MathJax-config >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js/MathJax-config/.gitignore -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/js/MathJax-config >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js/svg-pan-zoom.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/js >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js/jquery-2.1.3.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/js >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js/ie10-viewport-bug-workaround.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/js >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js/bootstrap.min.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/js >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/js/bootstrap.js -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/js >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/glyphicons-halflings-regular.woff -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/glyphicons-halflings-regular.ttf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/glyphicons-halflings-regular.svg -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/glyphicons-halflings-regular.eot -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/fontawesome-webfont.woff -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/fontawesome-webfont.ttf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/fontawesome-webfont.svg -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/fontawesome-webfont.eot -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fonts/FontAwesome.otf -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/fonts >creating /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/css >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css/pygments.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/css >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css/local.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/css >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css/font-awesome.min.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/css >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css/font-awesome.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/css >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css/bootstrap.min.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/css >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/css/bootstrap.css -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford/css >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/favicon.png -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/config.json -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/__init__.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/__main__.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fixed2free2.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/fortran_project.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/graphmanager.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/graphs.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/intrinsics.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/md_environ.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/md_striped_table.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/output.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/pagetree.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/reader.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/sourceform.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/tipue_search.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >copying /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/lib/ford/utils.py -> /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/ford >warning: install_lib: byte-compiling is disabled, skipping. > >running install_egg_info >Copying FORD.egg-info to /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/lib/FORD-6.1.11-py3.8.egg-info >running install_scripts >Installing ford script to /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts >python3.8 -m pytest -vv -ra -l -Wdefault --color=no -p no:cov -p no:flake8 -p no:flakes -p no:pylint >============================= test session starts ============================== >platform linux -- Python 3.8.13, pytest-7.1.1, pluggy-1.0.0 -- /usr/bin/python3.8 >cachedir: .pytest_cache >rootdir: /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11 >collecting ... collected 123 items > >test/test_example.py::test_nav_bar ERROR [ 0%] >test/test_example.py::test_jumbotron ERROR [ 1%] >test/test_example.py::test_developer_info_box ERROR [ 2%] >test/test_example.py::test_latex ERROR [ 3%] >test/test_example.py::test_source_file_links ERROR [ 4%] >test/test_example.py::test_module_links ERROR [ 4%] >test/test_example.py::test_procedures_links ERROR [ 5%] >test/test_example.py::test_types_links ERROR [ 6%] >test/test_initialisation.py::test_quiet_false FAILED [ 7%] >test/test_initialisation.py::test_quiet_command_line FAILED [ 8%] >test/test_initialisation.py::test_list_input FAILED [ 8%] >test/test_initialisation.py::test_path_normalisation FAILED [ 9%] >test/test_initialisation.py::test_source_not_subdir_output FAILED [ 10%] >test/test_initialisation.py::test_repeated_docmark PASSED [ 11%] >test/test_initialisation.py::test_no_preprocessor PASSED [ 12%] >test/test_initialisation.py::test_bad_preprocessor PASSED [ 13%] >test/test_initialisation.py::test_maybe_ok_preprocessor PASSED [ 13%] >test/test_initialisation.py::test_gfortran_preprocessor SKIPPED (Requires gfortran to be installed) [ 14%] >test/test_md_environ.py::test_md_environ PASSED [ 15%] >test/test_md_inputs.py::test_extra_mods_empty FAILED [ 16%] >test/test_md_inputs.py::test_extra_mods_intrinsic FAILED [ 17%] >test/test_md_inputs.py::test_default_aliases FAILED [ 17%] >test/test_md_inputs.py::test_one_alias FAILED [ 18%] >test/test_md_inputs.py::test_multiple_aliases FAILED [ 19%] >test/test_md_table.py::test_zebra_table PASSED [ 20%] >test/test_md_table.py::test_no_clobber_html_table PASSED [ 21%] >test/test_pagetree.py::test_footnotes_on_one_page PASSED [ 21%] >test/test_pagetree.py::test_footnotes_on_one_page_parse_failure PASSED [ 22%] >test/test_project.py::test_use_without_rename PASSED [ 23%] >test/test_project.py::test_use_and_rename PASSED [ 24%] >test/test_project.py::test_module_use_only_everything PASSED [ 25%] >test/test_project.py::test_module_use_only_everything_change_access PASSED [ 26%] >test/test_project.py::test_module_use_everything PASSED [ 26%] >test/test_project.py::test_module_use_everything_reexport PASSED [ 27%] >test/test_project.py::test_member_in_other_module PASSED [ 28%] >test/test_project.py::test_display_derived_types PASSED [ 29%] >test/test_project.py::test_display_derived_types_default_private PASSED [ 30%] >test/test_project.py::test_display_private_derived_types PASSED [ 30%] >test/test_project.py::test_interface_type_name PASSED [ 31%] >test/test_project.py::test_imported_interface_type_name PASSED [ 32%] >test/test_project.py::test_abstract_interface_type_name PASSED [ 33%] >test/test_project.py::test_imported_abstract_interface_type_name PASSED [ 34%] >test/test_project.py::test_display_internal_procedures PASSED [ 34%] >test/test_project.py::test_exclude_dir PASSED [ 35%] >test/test_project.py::test_exclude PASSED [ 36%] >test/test_project.py::test_sort[src-expected_order0] PASSED [ 37%] >test/test_project.py::test_sort[alpha-expected_order1] PASSED [ 38%] >test/test_project.py::test_sort[permission-expected_order2] PASSED [ 39%] >test/test_project.py::test_sort[permission-alpha-expected_order3] PASSED [ 39%] >test/test_project.py::test_sort[type-expected_order4] PASSED [ 40%] >test/test_project.py::test_sort[type-alpha-expected_order5] PASSED [ 41%] >test/test_reader.py::test_reader_test_data PASSED [ 42%] >test/test_reader.py::test_reader_continuation PASSED [ 43%] >test/test_reader.py::test_type PASSED [ 43%] >test/test_reader.py::test_unknown_include PASSED [ 44%] >test/test_reader.py::test_unterminated_strings PASSED [ 45%] >test/test_reader.py::test_multiline_string PASSED [ 46%] >test/test_sourceform.py::test_extends PASSED [ 47%] >test/test_sourceform.py::test_type_visibility_attributes PASSED [ 47%] >test/test_sourceform.py::test_submodule_procedure_contains PASSED [ 48%] >test/test_sourceform.py::test_backslash_in_character_string PASSED [ 49%] >test/test_sourceform.py::test_sync_images_in_submodule_procedure PASSED [ 50%] >test/test_sourceform.py::test_function_and_subroutine_call_on_same_line PASSED [ 51%] >test/test_sourceform.py::test_component_access PASSED [ 52%] >test/test_sourceform.py::test_format_statement PASSED [ 52%] >test/test_sourceform.py::test_enumerator_with_kind PASSED [ 53%] >test/test_sourceform.py::test_module_get_used_entities_all PASSED [ 54%] >test/test_sourceform.py::test_module_get_used_entities_some PASSED [ 55%] >test/test_sourceform.py::test_module_get_used_entities_rename PASSED [ 56%] >test/test_sourceform.py::test_module_default_access PASSED [ 56%] >test/test_sourceform.py::test_module_public_access PASSED [ 57%] >test/test_sourceform.py::test_module_private_access PASSED [ 58%] >test/test_sourceform.py::test_module_procedure_case PASSED [ 59%] >test/test_sourceform.py::test_parse_type[integer i-expected0] PASSED [ 60%] >test/test_sourceform.py::test_parse_type[integer :: i-expected1] PASSED [ 60%] >test/test_sourceform.py::test_parse_type[integer ( int32 ) :: i-expected2] PASSED [ 61%] >test/test_sourceform.py::test_parse_type[real r-expected3] PASSED [ 62%] >test/test_sourceform.py::test_parse_type[real(real64) r-expected4] PASSED [ 63%] >test/test_sourceform.py::test_parse_type[REAL( KIND = 8) :: r, x, y-expected5] PASSED [ 64%] >test/test_sourceform.py::test_parse_type[REAL( 8 ) :: r, x, y-expected6] PASSED [ 65%] >test/test_sourceform.py::test_parse_type[complex*16 znum-expected7] PASSED [ 65%] >test/test_sourceform.py::test_parse_type[character(len=*) :: string-expected8] PASSED [ 66%] >test/test_sourceform.py::test_parse_type[character(len=:) :: string-expected9] PASSED [ 67%] >test/test_sourceform.py::test_parse_type[character(12) :: string-expected10] PASSED [ 68%] >test/test_sourceform.py::test_parse_type[character(LEN=12) :: string-expected11] PASSED [ 69%] >test/test_sourceform.py::test_parse_type[CHARACTER(KIND=kanji, len =12) :: string-expected12] PASSED [ 69%] >test/test_sourceform.py::test_parse_type[CHARACTER( len = 12,KIND=kanji) :: string-expected13] PASSED [ 70%] >test/test_sourceform.py::test_parse_type[CHARACTER( kind= kanji) :: string-expected14] PASSED [ 71%] >test/test_sourceform.py::test_parse_type[double PRECISION dp-expected15] PASSED [ 72%] >test/test_sourceform.py::test_parse_type[DOUBLE complex dc-expected16] PASSED [ 73%] >test/test_sourceform.py::test_parse_type[type(something) :: thing-expected17] PASSED [ 73%] >test/test_sourceform.py::test_parse_type[class(foo) :: thing-expected18] PASSED [ 74%] >test/test_sourceform.py::test_parse_type[procedure(bar) :: thing-expected19] PASSED [ 75%] >test/test_sourceform.py::test_line_to_variable[integer foo-expected_variables0] PASSED [ 76%] >test/test_sourceform.py::test_line_to_variable[integer :: foo-expected_variables1] PASSED [ 77%] >test/test_sourceform.py::test_line_to_variable[real :: foo, bar-expected_variables2] PASSED [ 78%] >test/test_sourceform.py::test_line_to_variable[real, allocatable :: foo-expected_variables3] PASSED [ 78%] >test/test_sourceform.py::test_line_to_variable[integer, intent ( in out)::zing-expected_variables4] PASSED [ 79%] >test/test_sourceform.py::test_line_to_variable[real(real64), optional, intent(in) :: foo, bar-expected_variables5] PASSED [ 80%] >test/test_sourceform.py::test_line_to_variable[character ( len = 24 , kind = 4), parameter :: char = '0', far = '1'-expected_variables6] PASSED [ 81%] >test/test_sourceform.py::test_line_to_variable[procedure(foo) :: bar-expected_variables7] PASSED [ 82%] >test/test_sourceform.py::test_line_to_variable[type(foo) :: bar = 42-expected_variables8] PASSED [ 82%] >test/test_sourceform.py::test_line_to_variable[class(foo) :: var1, var2-expected_variables9] PASSED [ 83%] >test/test_sourceform.py::test_line_to_variable[class(*) :: polymorphic-expected_variables10] PASSED [ 84%] >test/test_sourceform.py::test_markdown_header_bug286 PASSED [ 85%] >test/test_sourceform.py::test_markdown_codeblocks_bug286 PASSED [ 86%] >test/test_sourceform.py::test_markdown_meta_reset PASSED [ 86%] >test/test_sourceform.py::test_multiline_attributes PASSED [ 87%] >test/test_sourceform.py::test_markdown_source_meta PASSED [ 88%] >test/test_sourceform.py::test_markdown_source_settings PASSED [ 89%] >test/test_utils.py::test_sub_macro PASSED [ 90%] >test/test_utils.py::test_sub_macro_with_equals PASSED [ 91%] >test/test_utils.py::test_register_macro_clash PASSED [ 91%] >test/test_utils.py::test_str_to_bool_true[true] PASSED [ 92%] >test/test_utils.py::test_str_to_bool_true[True] PASSED [ 93%] >test/test_utils.py::test_str_to_bool_true[TRUE] PASSED [ 94%] >test/test_utils.py::test_str_to_bool_true[tRuE] PASSED [ 95%] >test/test_utils.py::test_str_to_bool_false[false] PASSED [ 95%] >test/test_utils.py::test_str_to_bool_false[False] PASSED [ 96%] >test/test_utils.py::test_str_to_bool_false[FALSE] PASSED [ 97%] >test/test_utils.py::test_str_to_bool_false[fAlSe] PASSED [ 98%] >test/test_utils.py::test_str_to_bool_already_bool PASSED [ 99%] >test/test_projects/test_external_project.py::test_external_project FAILED [100%] > >==================================== ERRORS ==================================== >________________________ ERROR at setup of test_nav_bar ________________________ > >command_line_args = {'css': None, 'dbg': None, 'exclude': None, 'exclude_dir': None, ...} >proj_docs = "<p>Hi, my name is .</p>\n<p>This is a project which I wrote. This file will provide the documents. I'm\nwriting the b...magination run wild. As you can tell, I'm more or less just\nfilling in space now. This will be the last sentence.</p>" >directory = '' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='example-project-file.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} >default = 2022 >default_type = None >directory = '' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >ext = 'sh #' >extdict = {'sh': '#'} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f9535280> >md_base = '' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f9535e80>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': 'John Doe', > 'author_description': 'I program stuff in Fortran.', > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:45.388825', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected', 'private'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '#', > 'email': 'john.doe@example.com', > 'encoding': 'utf-8', > 'exclude': ['excluded_file.f90'], > 'exclude_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/src/excluded_directory')], > 'extensions': ['f90', 'f95', 'f03', 'f08', 'f15', 'fpp'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {'sh': '#'}, > 'extra_mods': ['json_module: http://jacobwilliams.github.io/json-fortran/', > 'futility: http://cmacmackin.github.io'], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['fpp'], > 'github': 'https://github.com/cmacmackin', > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': True, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': 'by-nc', > 'linkedin': None, > 'lower': False, > 'macro': ['HAS_DECREMENT'], > 'mathjax_config': None, > 'max_frontpage_items': '4', > 'media_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/media'), > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '<', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Example Project', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': 'https://github.com/cmacmackin/futility', > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': 'https://github.com', > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/src')], > 'summary': 'Some Fortran program which I wrote.', > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = ('<p>Hi, my name is .</p>\n' > '<p>This is a project which I wrote. This file will provide the documents. ' > "I'm\n" > 'writing the body of the text here. It contains an overall description of ' > 'the\n' > 'project. It might explain how to go about installing/compiling it. It might\n' > 'provide a change-log for the code. [[linalg]] Maybe it will talk about the\n' > 'history and/or motivation for this software.</p>\n' > '<p>@Note\n' > 'You can include any notes (or bugs, warnings, or todos) like so.</p>\n' > '<p>@Bug\n' > 'You can have multi-paragraph versions of these too! That means you can\n' > 'include</p>\n' > '<ul>\n' > '<li>ordered lists</li>\n' > '<li>unordered lists</li>\n' > '<li>images</li>\n' > '<li>etc.</li>\n' > '</ul>\n' > "<p>Isn't that cool?\n" > '@endbug</p>\n' > "<p>@Bug Hey I'm doing it again...</p>\n" > '<p>This ones ends mid...@endbug ...paragraph.</p>\n' > '<p>You can have as many paragraphs as you like here and can use headlines, ' > 'links,\n' > 'images, etc. Basically, you can use anything in Markdown and ' > 'Markdown-Extra.\n' > 'Furthermore, you can insert LaTeX into your documentation. So, for example,\n' > 'you can provide inline math using like <script type="math/tex"> y = x^2 ' > '</script> or math on its own line\n' > 'like <script type="math/tex; mode=display"> x = \\sqrt{y} </script> or ' > '<script type="math/tex; mode=display"> e = mc^2. </script> You can even use ' > 'LaTeX environments!\n' > 'So you can get numbered equations like this:\n' > '<script type="math/tex; mode=display">\\begin{equation}\n' > ' PV = nRT\n' > '\\end{equation}</script>\n' > "So let your imagination run wild. As you can tell, I'm more or less just\n" > 'filling in space now. This will be the last sentence.</p>') >project_file = 'example-project-file.md' >second = 'predocmark_alt' >sp = ['sh', '#'] >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f94ac550> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 12 >c2pwrite = 13 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 14 >errwrite = 15 >executable = None >f = <_io.TextIOWrapper name=14 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f94ac550> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f94ac550> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14 >errwrite = 15, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 12 >c2pwrite = 13 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 16 >errpipe_write = 17 >errread = 14 >errwrite = 15 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {17} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 99 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f94ac550> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > > @pytest.fixture(scope="module") > def example_project(tmp_path_factory): > this_dir = pathlib.Path(__file__).parent > tmp_path = tmp_path_factory.getbasetemp() / "example" > shutil.copytree(this_dir / "../example", tmp_path) > > with pytest.MonkeyPatch.context() as m: > os.chdir(tmp_path) > m.setattr(sys, "argv", ["ford", "example-project-file.md"]) >> ford.run() > >m = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f9551760> >this_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_example.py:26: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:633: in run > proj_data, proj_docs, md = initialize() >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:236: in initialize > return parse_arguments(vars(args), proj_docs, directory) > args = Namespace(css=None, dbg=None, exclude=None, exclude_dir=None, extensions=None, external=None, externalize=None, force=None, include=None, macro=None, output_dir=None, page_dir=None, project_file=<_io.TextIOWrapper name='example-project-file.md' mode='r' encoding='UTF-8'>, quiet=None, revision=None, search=None, src_dir=None, warn=None) > directory = '' > proj_docs = ('---\n' > 'project: Example Project\n' > 'src_dir: ./src\n' > 'output_dir: ./doc\n' > 'project_github: https://github.com/cmacmackin/futility\n' > 'project_website: https://github.com\n' > 'summary: Some Fortran program which I wrote.\n' > 'author: John Doe\n' > 'author_description: I program stuff in Fortran.\n' > 'github: https://github.com/cmacmackin\n' > 'email: john.doe@example.com\n' > 'fpp_extensions: fpp\n' > 'preprocess: true\n' > 'macro: HAS_DECREMENT\n' > 'predocmark: >\n' > 'media_dir: ./media\n' > 'docmark_alt: #\n' > 'predocmark_alt: <\n' > 'display: public\n' > ' protected\n' > ' private\n' > 'source: false\n' > 'graph: true\n' > 'search: true\n' > 'extra_mods: json_module: http://jacobwilliams.github.io/json-fortran/\n' > ' futility: http://cmacmackin.github.io\n' > 'license: by-nc\n' > 'extra_filetypes: sh #\n' > 'max_frontpage_items: 4\n' > 'exclude: excluded_file.f90\n' > 'exclude_dir: src/excluded_directory\n' > '---\n' > '\n' > 'Hi, my name is ${USER}.\n' > '\n' > "This is a project which I wrote. This file will provide the documents. I'm\n" > 'writing the body of the text here. It contains an overall description of ' > 'the\n' > 'project. It might explain how to go about installing/compiling it. It might\n' > 'provide a change-log for the code. [[linalg]] Maybe it will talk about the\n' > 'history and/or motivation for this software.\n' > '\n' > '@Note\n' > 'You can include any notes (or bugs, warnings, or todos) like so.\n' > '\n' > '@Bug\n' > 'You can have multi-paragraph versions of these too! That means you can\n' > 'include\n' > '\n' > '- ordered lists\n' > '- unordered lists\n' > '- images\n' > '- etc.\n' > '\n' > "Isn't that cool?\n" > '@endbug\n' > '\n' > "@Bug Hey I'm doing it again...\n" > '\n' > 'This ones ends mid...@endbug ...paragraph.\n' > '\n' > 'You can have as many paragraphs as you like here and can use headlines, ' > 'links,\n' > 'images, etc. Basically, you can use anything in Markdown and ' > 'Markdown-Extra.\n' > 'Furthermore, you can insert LaTeX into your documentation. So, for example,\n' > 'you can provide inline math using like \\( y = x^2 \\) or math on its own ' > 'line\n' > 'like \\[ x = \\sqrt{y} \\] or $$ e = mc^2. $$ You can even use LaTeX ' > 'environments!\n' > 'So you can get numbered equations like this:\n' > '\\begin{equation}\n' > ' PV = nRT\n' > '\\end{equation}\n' > "So let your imagination run wild. As you can tell, I'm more or less just\n" > 'filling in space now. This will be the last sentence.\n') >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:516: in parse_arguments > exit( > args_option = None > base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] > command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='example-project-file.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} > default = 2022 > default_type = None > directory = '' > docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] > ext = 'sh #' > extdict = {'sh': '#'} > first = 'docmark_alt' > md = <markdown.core.Markdown object at 0x7f57f9535280> > md_base = '' > md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f9535e80>, > 'markdown_include.include'] > multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> > ncpus = '48' > option = 'year' > proj_data = {'alias': [], > 'author': 'John Doe', > 'author_description': 'I program stuff in Fortran.', > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:45.388825', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected', 'private'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '#', > 'email': 'john.doe@example.com', > 'encoding': 'utf-8', > 'exclude': ['excluded_file.f90'], > 'exclude_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/src/excluded_directory')], > 'extensions': ['f90', 'f95', 'f03', 'f08', 'f15', 'fpp'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {'sh': '#'}, > 'extra_mods': ['json_module: http://jacobwilliams.github.io/json-fortran/', > 'futility: http://cmacmackin.github.io'], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['fpp'], > 'github': 'https://github.com/cmacmackin', > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': True, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': 'by-nc', > 'linkedin': None, > 'lower': False, > 'macro': ['HAS_DECREMENT'], > 'mathjax_config': None, > 'max_frontpage_items': '4', > 'media_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/media'), > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '<', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Example Project', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': 'https://github.com/cmacmackin/futility', > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': 'https://github.com', > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/src')], > 'summary': 'Some Fortran program which I wrote.', > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} > proj_docs = ('<p>Hi, my name is .</p>\n' > '<p>This is a project which I wrote. This file will provide the documents. ' > "I'm\n" > 'writing the body of the text here. It contains an overall description of ' > 'the\n' > 'project. It might explain how to go about installing/compiling it. It might\n' > 'provide a change-log for the code. [[linalg]] Maybe it will talk about the\n' > 'history and/or motivation for this software.</p>\n' > '<p>@Note\n' > 'You can include any notes (or bugs, warnings, or todos) like so.</p>\n' > '<p>@Bug\n' > 'You can have multi-paragraph versions of these too! That means you can\n' > 'include</p>\n' > '<ul>\n' > '<li>ordered lists</li>\n' > '<li>unordered lists</li>\n' > '<li>images</li>\n' > '<li>etc.</li>\n' > '</ul>\n' > "<p>Isn't that cool?\n" > '@endbug</p>\n' > "<p>@Bug Hey I'm doing it again...</p>\n" > '<p>This ones ends mid...@endbug ...paragraph.</p>\n' > '<p>You can have as many paragraphs as you like here and can use headlines, ' > 'links,\n' > 'images, etc. Basically, you can use anything in Markdown and ' > 'Markdown-Extra.\n' > 'Furthermore, you can insert LaTeX into your documentation. So, for example,\n' > 'you can provide inline math using like <script type="math/tex"> y = x^2 ' > '</script> or math on its own line\n' > 'like <script type="math/tex; mode=display"> x = \\sqrt{y} </script> or ' > '<script type="math/tex; mode=display"> e = mc^2. </script> You can even use ' > 'LaTeX environments!\n' > 'So you can get numbered equations like this:\n' > '<script type="math/tex; mode=display">\\begin{equation}\n' > ' PV = nRT\n' > '\\end{equation}</script>\n' > "So let your imagination run wild. As you can tell, I'm more or less just\n" > 'filling in space now. This will be the last sentence.</p>') > project_file = 'example-project-file.md' > second = 'predocmark_alt' > sp = ['sh', '#'] > srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example/src') > var = 'include' >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = Use exit() or Ctrl-D (i.e. EOF) to exit >code = "Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error:\n [Err...rocessor' option in 'example-project-file.md'.\nOtherwise, please set 'preprocess: False' in 'example-project-file.md'" > > def __call__(self, code=None): > # Shells like IDLE catch the SystemExit, but listen when their > # stdin wrapper is closed. > try: > sys.stdin.close() > except: > pass >> raise SystemExit(code) >E SystemExit: Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error: >E [Errno 2] No such file or directory: 'cpp' >E >E If you need to preprocess files, please fix the 'preprocessor' option in 'example-project-file.md'. >E Otherwise, please set 'preprocess: False' in 'example-project-file.md' > >code = ('Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ ' > '/dev/null`) failed with error:\n' > " [Errno 2] No such file or directory: 'cpp'\n" > '\n' > "If you need to preprocess files, please fix the 'preprocessor' option in " > "'example-project-file.md'.\n" > "Otherwise, please set 'preprocess: False' in 'example-project-file.md'") >self = Use exit() or Ctrl-D (i.e. EOF) to exit > >/usr/lib/python3.8/_sitebuiltins.py:26: SystemExit >_______________________ ERROR at setup of test_jumbotron _______________________ > >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > > @pytest.fixture(scope="module") > def example_project(tmp_path_factory): > this_dir = pathlib.Path(__file__).parent > tmp_path = tmp_path_factory.getbasetemp() / "example" >> shutil.copytree(this_dir / "../example", tmp_path) > >this_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_example.py:21: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/usr/lib/python3.8/shutil.py:557: in copytree > return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > itr = <posix.ScandirIterator object at 0x7f57f9563340> > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >/usr/lib/python3.8/shutil.py:458: in _copytree > os.makedirs(dst, exist_ok=dirs_exist_ok) > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > ignored_names = set() > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >mode = 511, exist_ok = False > > def makedirs(name, mode=0o777, exist_ok=False): > """makedirs(name [, mode=0o777][, exist_ok=False]) > > Super-mkdir; create a leaf directory and all intermediate ones. Works like > mkdir, except that any intermediate path segment (not just the rightmost) > will be created if it does not exist. If the target directory already > exists, raise an OSError if exist_ok is False. Otherwise no exception is > raised. This is recursive. > > """ > head, tail = path.split(name) > if not tail: > head, tail = path.split(head) > if head and tail and not path.exists(head): > try: > makedirs(head, exist_ok=exist_ok) > except FileExistsError: > # Defeats race condition when another thread created the path > pass > cdir = curdir > if isinstance(tail, bytes): > cdir = bytes(curdir, 'ASCII') > if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists > return > try: >> mkdir(name, mode) >E FileExistsError: [Errno 17] File exists: '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example' > >exist_ok = False >head = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0' >mode = 511 >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tail = 'example' > >/usr/lib/python3.8/os.py:223: FileExistsError >__________________ ERROR at setup of test_developer_info_box ___________________ > >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > > @pytest.fixture(scope="module") > def example_project(tmp_path_factory): > this_dir = pathlib.Path(__file__).parent > tmp_path = tmp_path_factory.getbasetemp() / "example" >> shutil.copytree(this_dir / "../example", tmp_path) > >this_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_example.py:21: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/usr/lib/python3.8/shutil.py:557: in copytree > return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > itr = <posix.ScandirIterator object at 0x7f57f9563340> > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >/usr/lib/python3.8/shutil.py:458: in _copytree > os.makedirs(dst, exist_ok=dirs_exist_ok) > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > ignored_names = set() > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >mode = 511, exist_ok = False > > def makedirs(name, mode=0o777, exist_ok=False): > """makedirs(name [, mode=0o777][, exist_ok=False]) > > Super-mkdir; create a leaf directory and all intermediate ones. Works like > mkdir, except that any intermediate path segment (not just the rightmost) > will be created if it does not exist. If the target directory already > exists, raise an OSError if exist_ok is False. Otherwise no exception is > raised. This is recursive. > > """ > head, tail = path.split(name) > if not tail: > head, tail = path.split(head) > if head and tail and not path.exists(head): > try: > makedirs(head, exist_ok=exist_ok) > except FileExistsError: > # Defeats race condition when another thread created the path > pass > cdir = curdir > if isinstance(tail, bytes): > cdir = bytes(curdir, 'ASCII') > if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists > return > try: >> mkdir(name, mode) >E FileExistsError: [Errno 17] File exists: '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example' > >exist_ok = False >head = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0' >mode = 511 >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tail = 'example' > >/usr/lib/python3.8/os.py:223: FileExistsError >_________________________ ERROR at setup of test_latex _________________________ > >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > > @pytest.fixture(scope="module") > def example_project(tmp_path_factory): > this_dir = pathlib.Path(__file__).parent > tmp_path = tmp_path_factory.getbasetemp() / "example" >> shutil.copytree(this_dir / "../example", tmp_path) > >this_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_example.py:21: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/usr/lib/python3.8/shutil.py:557: in copytree > return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > itr = <posix.ScandirIterator object at 0x7f57f9563340> > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >/usr/lib/python3.8/shutil.py:458: in _copytree > os.makedirs(dst, exist_ok=dirs_exist_ok) > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > ignored_names = set() > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >mode = 511, exist_ok = False > > def makedirs(name, mode=0o777, exist_ok=False): > """makedirs(name [, mode=0o777][, exist_ok=False]) > > Super-mkdir; create a leaf directory and all intermediate ones. Works like > mkdir, except that any intermediate path segment (not just the rightmost) > will be created if it does not exist. If the target directory already > exists, raise an OSError if exist_ok is False. Otherwise no exception is > raised. This is recursive. > > """ > head, tail = path.split(name) > if not tail: > head, tail = path.split(head) > if head and tail and not path.exists(head): > try: > makedirs(head, exist_ok=exist_ok) > except FileExistsError: > # Defeats race condition when another thread created the path > pass > cdir = curdir > if isinstance(tail, bytes): > cdir = bytes(curdir, 'ASCII') > if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists > return > try: >> mkdir(name, mode) >E FileExistsError: [Errno 17] File exists: '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example' > >exist_ok = False >head = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0' >mode = 511 >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tail = 'example' > >/usr/lib/python3.8/os.py:223: FileExistsError >___________________ ERROR at setup of test_source_file_links ___________________ > >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > > @pytest.fixture(scope="module") > def example_project(tmp_path_factory): > this_dir = pathlib.Path(__file__).parent > tmp_path = tmp_path_factory.getbasetemp() / "example" >> shutil.copytree(this_dir / "../example", tmp_path) > >this_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_example.py:21: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/usr/lib/python3.8/shutil.py:557: in copytree > return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > itr = <posix.ScandirIterator object at 0x7f57f9563340> > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >/usr/lib/python3.8/shutil.py:458: in _copytree > os.makedirs(dst, exist_ok=dirs_exist_ok) > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > ignored_names = set() > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >mode = 511, exist_ok = False > > def makedirs(name, mode=0o777, exist_ok=False): > """makedirs(name [, mode=0o777][, exist_ok=False]) > > Super-mkdir; create a leaf directory and all intermediate ones. Works like > mkdir, except that any intermediate path segment (not just the rightmost) > will be created if it does not exist. If the target directory already > exists, raise an OSError if exist_ok is False. Otherwise no exception is > raised. This is recursive. > > """ > head, tail = path.split(name) > if not tail: > head, tail = path.split(head) > if head and tail and not path.exists(head): > try: > makedirs(head, exist_ok=exist_ok) > except FileExistsError: > # Defeats race condition when another thread created the path > pass > cdir = curdir > if isinstance(tail, bytes): > cdir = bytes(curdir, 'ASCII') > if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists > return > try: >> mkdir(name, mode) >E FileExistsError: [Errno 17] File exists: '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example' > >exist_ok = False >head = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0' >mode = 511 >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tail = 'example' > >/usr/lib/python3.8/os.py:223: FileExistsError >_____________________ ERROR at setup of test_module_links ______________________ > >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > > @pytest.fixture(scope="module") > def example_project(tmp_path_factory): > this_dir = pathlib.Path(__file__).parent > tmp_path = tmp_path_factory.getbasetemp() / "example" >> shutil.copytree(this_dir / "../example", tmp_path) > >this_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_example.py:21: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/usr/lib/python3.8/shutil.py:557: in copytree > return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > itr = <posix.ScandirIterator object at 0x7f57f9563340> > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >/usr/lib/python3.8/shutil.py:458: in _copytree > os.makedirs(dst, exist_ok=dirs_exist_ok) > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > ignored_names = set() > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >mode = 511, exist_ok = False > > def makedirs(name, mode=0o777, exist_ok=False): > """makedirs(name [, mode=0o777][, exist_ok=False]) > > Super-mkdir; create a leaf directory and all intermediate ones. Works like > mkdir, except that any intermediate path segment (not just the rightmost) > will be created if it does not exist. If the target directory already > exists, raise an OSError if exist_ok is False. Otherwise no exception is > raised. This is recursive. > > """ > head, tail = path.split(name) > if not tail: > head, tail = path.split(head) > if head and tail and not path.exists(head): > try: > makedirs(head, exist_ok=exist_ok) > except FileExistsError: > # Defeats race condition when another thread created the path > pass > cdir = curdir > if isinstance(tail, bytes): > cdir = bytes(curdir, 'ASCII') > if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists > return > try: >> mkdir(name, mode) >E FileExistsError: [Errno 17] File exists: '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example' > >exist_ok = False >head = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0' >mode = 511 >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tail = 'example' > >/usr/lib/python3.8/os.py:223: FileExistsError >___________________ ERROR at setup of test_procedures_links ____________________ > >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > > @pytest.fixture(scope="module") > def example_project(tmp_path_factory): > this_dir = pathlib.Path(__file__).parent > tmp_path = tmp_path_factory.getbasetemp() / "example" >> shutil.copytree(this_dir / "../example", tmp_path) > >this_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_example.py:21: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/usr/lib/python3.8/shutil.py:557: in copytree > return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > itr = <posix.ScandirIterator object at 0x7f57f9563340> > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >/usr/lib/python3.8/shutil.py:458: in _copytree > os.makedirs(dst, exist_ok=dirs_exist_ok) > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > ignored_names = set() > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >mode = 511, exist_ok = False > > def makedirs(name, mode=0o777, exist_ok=False): > """makedirs(name [, mode=0o777][, exist_ok=False]) > > Super-mkdir; create a leaf directory and all intermediate ones. Works like > mkdir, except that any intermediate path segment (not just the rightmost) > will be created if it does not exist. If the target directory already > exists, raise an OSError if exist_ok is False. Otherwise no exception is > raised. This is recursive. > > """ > head, tail = path.split(name) > if not tail: > head, tail = path.split(head) > if head and tail and not path.exists(head): > try: > makedirs(head, exist_ok=exist_ok) > except FileExistsError: > # Defeats race condition when another thread created the path > pass > cdir = curdir > if isinstance(tail, bytes): > cdir = bytes(curdir, 'ASCII') > if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists > return > try: >> mkdir(name, mode) >E FileExistsError: [Errno 17] File exists: '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example' > >exist_ok = False >head = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0' >mode = 511 >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tail = 'example' > >/usr/lib/python3.8/os.py:223: FileExistsError >______________________ ERROR at setup of test_types_links ______________________ > >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > > @pytest.fixture(scope="module") > def example_project(tmp_path_factory): > this_dir = pathlib.Path(__file__).parent > tmp_path = tmp_path_factory.getbasetemp() / "example" >> shutil.copytree(this_dir / "../example", tmp_path) > >this_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x7f57f9697250>, _basetemp=PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0')) > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_example.py:21: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/usr/lib/python3.8/shutil.py:557: in copytree > return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > itr = <posix.ScandirIterator object at 0x7f57f9563340> > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >/usr/lib/python3.8/shutil.py:458: in _copytree > os.makedirs(dst, exist_ok=dirs_exist_ok) > copy_function = <function copy2 at 0x7f57fb257af0> > dirs_exist_ok = False > dst = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') > entries = [<DirEntry 'src'>, <DirEntry 'example-project-file.md'>] > ignore = None > ignore_dangling_symlinks = False > ignored_names = set() > src = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/../example') > symlinks = False >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >mode = 511, exist_ok = False > > def makedirs(name, mode=0o777, exist_ok=False): > """makedirs(name [, mode=0o777][, exist_ok=False]) > > Super-mkdir; create a leaf directory and all intermediate ones. Works like > mkdir, except that any intermediate path segment (not just the rightmost) > will be created if it does not exist. If the target directory already > exists, raise an OSError if exist_ok is False. Otherwise no exception is > raised. This is recursive. > > """ > head, tail = path.split(name) > if not tail: > head, tail = path.split(head) > if head and tail and not path.exists(head): > try: > makedirs(head, exist_ok=exist_ok) > except FileExistsError: > # Defeats race condition when another thread created the path > pass > cdir = curdir > if isinstance(tail, bytes): > cdir = bytes(curdir, 'ASCII') > if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists > return > try: >> mkdir(name, mode) >E FileExistsError: [Errno 17] File exists: '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example' > >exist_ok = False >head = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0' >mode = 511 >name = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/example') >tail = 'example' > >/usr/lib/python3.8/os.py:223: FileExistsError >=================================== FAILURES =================================== >_______________________________ test_quiet_false _______________________________ > >command_line_args = {}, proj_docs = '' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {} >default = 2022 >default_type = False >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f93232e0> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93232b0>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.017727', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f9472250> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 11 >c2pwrite = 12 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 13 >errwrite = 14 >executable = None >f = <_io.TextIOWrapper name=13 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f9472250> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f9472250> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 11, c2pwrite = 12, errread = 13 >errwrite = 14, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 11 >c2pwrite = 12 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 15 >errpipe_write = 16 >errread = 13 >errwrite = 14 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {16} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 100 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f9472250> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > > def test_quiet_false(): > """This checks that bool options like 'quiet' are parsed correctly in input md file""" > >> data, _, _ = ford.parse_arguments({}, "quiet: false") > > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_initialisation.py:10: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >command_line_args = {}, proj_docs = '' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: > subprocess.run(command, check=True, capture_output=True, text=True) > except (subprocess.CalledProcessError, OSError) as ex: >> project_file = command_line_args["project_file"].name >E KeyError: 'project_file' > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {} >default = 2022 >default_type = False >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f93232e0> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93232b0>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.017727', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:515: KeyError >___________________________ test_quiet_command_line ____________________________ > >command_line_args = {'quiet': True}, proj_docs = '' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'quiet': True} >default = 2022 >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f907a6d0> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f907a6a0>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.120256', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': True, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f93fb5b0> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 11 >c2pwrite = 12 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 13 >errwrite = 14 >executable = None >f = <_io.TextIOWrapper name=13 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f93fb5b0> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f93fb5b0> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 11, c2pwrite = 12, errread = 13 >errwrite = 14, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 11 >c2pwrite = 12 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 15 >errpipe_write = 16 >errread = 13 >errwrite = 14 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {16} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 101 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f93fb5b0> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > > def test_quiet_command_line(): > """Check that setting --quiet on the command line overrides project file""" > >> data, _, _ = ford.parse_arguments({"quiet": True}, "quiet: false") > > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_initialisation.py:19: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >command_line_args = {'quiet': True}, proj_docs = '' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: > subprocess.run(command, check=True, capture_output=True, text=True) > except (subprocess.CalledProcessError, OSError) as ex: >> project_file = command_line_args["project_file"].name >E KeyError: 'project_file' > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'quiet': True} >default = 2022 >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f907a6d0> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f907a6a0>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.120256', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': True, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:515: KeyError >_______________________________ test_list_input ________________________________ > >command_line_args = {}, proj_docs = '' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {} >default = 2022 >default_type = None >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f93f5a90> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93f5e80>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.222215', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/line1'), > PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/line2')], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src')], > 'summary': 'This\nis\none\nstring', > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f9198160> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 11 >c2pwrite = 12 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 13 >errwrite = 14 >executable = None >f = <_io.TextIOWrapper name=13 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f9198160> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f9198160> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 11, c2pwrite = 12, errread = 13 >errwrite = 14, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 11 >c2pwrite = 12 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 15 >errpipe_write = 16 >errread = 13 >errwrite = 14 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {16} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 102 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f9198160> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > > def test_list_input(): > """Check that setting a non-list option is turned into a single string""" > > settings = """\ > include: line1 > line2 > summary: This > is > one > string > """ >> data, _, _ = ford.parse_arguments({}, dedent(settings)) > >settings = (' include: line1\n' > ' line2\n' > ' summary: This\n' > ' is\n' > ' one\n' > ' string\n' > ' ') > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_initialisation.py:36: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >command_line_args = {}, proj_docs = '' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: > subprocess.run(command, check=True, capture_output=True, text=True) > except (subprocess.CalledProcessError, OSError) as ex: >> project_file = command_line_args["project_file"].name >E KeyError: 'project_file' > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {} >default = 2022 >default_type = None >directory = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f93f5a90> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93f5e80>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.222215', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/line1'), > PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/line2')], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src')], > 'summary': 'This\nis\none\nstring', > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:515: KeyError >___________________________ test_path_normalisation ____________________________ > >command_line_args = {}, proj_docs = '', directory = '/prefix/path' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/prefix/path') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {} >default = 2022 >default_type = ['./src'] >directory = '/prefix/path' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f93dd0a0> >md_base = '/prefix/path' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93dd070>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/prefix/path'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.344670', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/prefix/path/doc'), > 'page_dir': PosixPath('/prefix/path/my_pages'), > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/prefix/path/src1'), PosixPath('/prefix/path/src2')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/prefix/path/src2') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f9472370> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 11 >c2pwrite = 12 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 13 >errwrite = 14 >executable = None >f = <_io.TextIOWrapper name=13 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f9472370> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f9472370> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 11, c2pwrite = 12, errread = 13 >errwrite = 14, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 11 >c2pwrite = 12 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 15 >errpipe_write = 16 >errread = 13 >errwrite = 14 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {16} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 103 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f9472370> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > > def test_path_normalisation(): > """Check that paths get normalised correctly""" > > settings = """\ > page_dir: my_pages > src_dir: src1 > src2 > """ >> data, _, _ = ford.parse_arguments({}, dedent(settings), "/prefix/path") > >settings = ' page_dir: my_pages\n src_dir: src1\n src2\n ' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_initialisation.py:50: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >command_line_args = {}, proj_docs = '', directory = '/prefix/path' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: > subprocess.run(command, check=True, capture_output=True, text=True) > except (subprocess.CalledProcessError, OSError) as ex: >> project_file = command_line_args["project_file"].name >E KeyError: 'project_file' > >args_option = None >base_dir = PosixPath('/prefix/path') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {} >default = 2022 >default_type = ['./src'] >directory = '/prefix/path' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f93dd0a0> >md_base = '/prefix/path' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93dd070>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/prefix/path'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.344670', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/prefix/path/doc'), > 'page_dir': PosixPath('/prefix/path/my_pages'), > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/prefix/path/src1'), PosixPath('/prefix/path/src2')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/prefix/path/src2') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:515: KeyError >________________________ test_source_not_subdir_output _________________________ > >command_line_args = {'output_dir': '/3/4', 'src_dir': ['/1/2/3', '4/5']} >proj_docs = '', directory = '/prefix' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/prefix') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'output_dir': '/3/4', 'src_dir': ['/1/2/3', '4/5']} >default = 2022 >directory = '/prefix' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f90bc730> >md_base = '/prefix' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f90bc6a0>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/prefix'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.444253', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/3/4'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/1/2/3'), PosixPath('/prefix/4/5')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/prefix/4/5') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f91d2e20> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 11 >c2pwrite = 12 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 13 >errwrite = 14 >executable = None >f = <_io.TextIOWrapper name=13 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f91d2e20> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f91d2e20> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 11, c2pwrite = 12, errread = 13 >errwrite = 14, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 11 >c2pwrite = 12 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 15 >errpipe_write = 16 >errread = 13 >errwrite = 14 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {16} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 104 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f91d2e20> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > > def test_source_not_subdir_output(): > """Check if the src_dir is correctly detected as being a subdirectory of output_dir""" > > # This should be fine >> data, _, _ = ford.parse_arguments( > {"src_dir": ["/1/2/3", "4/5"], "output_dir": "/3/4"}, "", "/prefix" > ) > > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_initialisation.py:62: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >command_line_args = {'output_dir': '/3/4', 'src_dir': ['/1/2/3', '4/5']} >proj_docs = '', directory = '/prefix' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: > subprocess.run(command, check=True, capture_output=True, text=True) > except (subprocess.CalledProcessError, OSError) as ex: >> project_file = command_line_args["project_file"].name >E KeyError: 'project_file' > >args_option = None >base_dir = PosixPath('/prefix') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'output_dir': '/3/4', 'src_dir': ['/1/2/3', '4/5']} >default = 2022 >directory = '/prefix' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f90bc730> >md_base = '/prefix' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f90bc6a0>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/prefix'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.444253', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/3/4'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': True, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/1/2/3'), PosixPath('/prefix/4/5')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >second = 'predocmark_alt' >srcdir = PosixPath('/prefix/4/5') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:515: KeyError >____________________________ test_extra_mods_empty _____________________________ > >command_line_args = {'css': None, 'dbg': None, 'exclude': None, 'exclude_dir': None, ...} >proj_docs = '' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} >default = 2022 >default_type = True >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f919a670> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f919a3a0>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.584355', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [''], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f93f5b80> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 12 >c2pwrite = 13 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 14 >errwrite = 15 >executable = None >f = <_io.TextIOWrapper name=14 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f93f5b80> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f93f5b80> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14 >errwrite = 15, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 12 >c2pwrite = 13 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 16 >errpipe_write = 17 >errread = 14 >errwrite = 15 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {17} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 107 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f93f5b80> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f91ea550> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f91ea820> >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f933f400> >restore_macros = None, restore_nameselector = None > > def test_extra_mods_empty( > copy_fortran_file, > copy_settings_file, > monkeypatch, > restore_macros, > restore_nameselector, > ): > """This checks that extra_mods is parsed correctly in input md file""" > > data = """\ > module test > end module test > """ > settings = """\ > search: false > extra_mods: > """ > > copy_fortran_file(data) > md_file = copy_settings_file(settings) > >> run_ford(monkeypatch, md_file) > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f91ea550> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f91ea820> >data = ' module test\n end module test\n ' >md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f933f400> >restore_macros = None >restore_nameselector = None >settings = ' search: false\n extra_mods:\n ' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:46: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:22: in run_ford > ford.run() > command = ['ford', > '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md'] > extra_args = None > m = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f933fd60> > md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md') > monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f933f400> >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:633: in run > proj_data, proj_docs, md = initialize() >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:236: in initialize > return parse_arguments(vars(args), proj_docs, directory) > args = Namespace(css=None, dbg=None, exclude=None, exclude_dir=None, extensions=None, external=None, externalize=None, force=None, include=None, macro=None, output_dir=None, page_dir=None, project_file=<_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md' mode='r' encoding='UTF-8'>, quiet=None, revision=None, search=None, src_dir=None, warn=None) > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0' > proj_docs = 'search: false\nextra_mods:\n' >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:516: in parse_arguments > exit( > args_option = None > base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0') > command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] > command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} > default = 2022 > default_type = True > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0' > docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] > extdict = {} > first = 'docmark_alt' > md = <markdown.core.Markdown object at 0x7f57f919a670> > md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0' > md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f919a3a0>, > 'markdown_include.include'] > multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> > ncpus = '48' > option = 'year' > proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.584355', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [''], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} > proj_docs = '' > project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md' > second = 'predocmark_alt' > srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/src') > var = 'include' >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = Use exit() or Ctrl-D (i.e. EOF) to exit >code = "Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error:\n [Err...ocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md'" > > def __call__(self, code=None): > # Shells like IDLE catch the SystemExit, but listen when their > # stdin wrapper is closed. > try: > sys.stdin.close() > except: > pass >> raise SystemExit(code) >E SystemExit: Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error: >E [Errno 2] No such file or directory: 'cpp' >E >E If you need to preprocess files, please fix the 'preprocessor' option in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md'. >E Otherwise, please set 'preprocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md' > >code = ('Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ ' > '/dev/null`) failed with error:\n' > " [Errno 2] No such file or directory: 'cpp'\n" > '\n' > "If you need to preprocess files, please fix the 'preprocessor' option in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md'.\n" > "Otherwise, please set 'preprocess: False' in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_empty0/test.md'") >self = Use exit() or Ctrl-D (i.e. EOF) to exit > >/usr/lib/python3.8/_sitebuiltins.py:26: SystemExit >__________________________ test_extra_mods_intrinsic ___________________________ > >command_line_args = {'css': None, 'dbg': None, 'exclude': None, 'exclude_dir': None, ...} >proj_docs = '' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} >default = 2022 >default_type = True >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f907ae80> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f907a580>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.700339', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': ['dummy: dummy_module'], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f924cb50> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 13 >c2pwrite = 14 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 15 >errwrite = 16 >executable = None >f = <_io.TextIOWrapper name=15 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f924cb50> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f924cb50> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 13, c2pwrite = 14, errread = 15 >errwrite = 16, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 13 >c2pwrite = 14 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 17 >errpipe_write = 18 >errread = 15 >errwrite = 16 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {18} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 108 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f924cb50> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f91ea5e0> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f91ea790> >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f92f8160> >restore_macros = None, restore_nameselector = None > > def test_extra_mods_intrinsic( > copy_fortran_file, > copy_settings_file, > monkeypatch, > restore_macros, > restore_nameselector, > ): > """This checks that adding extra_mods doesn't change the module variable INTRINSIC_MODS""" > data = """\ > module test > end module test > """ > settings = """\ > search: false > extra_mods: dummy: dummy_module > """ > # Initial value of intrinsic mods > old_intrinsic_mods = ford.fortran_project.INTRINSIC_MODS.copy() > > # set up project data > copy_fortran_file(data) > md_file = copy_settings_file(settings) > >> run_ford(monkeypatch, md_file) > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f91ea5e0> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f91ea790> >data = ' module test\n end module test\n ' >md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f92f8160> >old_intrinsic_mods = {'ieee_arithmetic': '<a ' > 'href="http://fortranwiki.org/fortran/show/ieee_arithmetic">ieee_arithmetic</a>', > 'ieee_exceptions': '<a ' > 'href="http://fortranwiki.org/fortran/show/IEEE+arithmetic">ieee_exceptions</a>', > 'ieee_features': '<a ' > 'href="http://fortranwiki.org/fortran/show/IEEE+arithmetic">ieee_features</a>', > 'iso_c_binding': '<a ' > 'href="http://fortranwiki.org/fortran/show/iso_c_binding">iso_c_binding</a>', > 'iso_fortran_env': '<a ' > 'href="http://fortranwiki.org/fortran/show/iso_fortran_env">iso_fortran_env</a>', > 'mpi': '<a ' > 'href="http://www.mpi-forum.org/docs/mpi-3.1/mpi31-report/node410.htm">mpi</a>', > 'mpi_f08': '<a ' > 'href="http://www.mpi-forum.org/docs/mpi-3.1/mpi31-report/node409.htm">mpi_f08</a>', > 'omp_lib': '<a ' > 'href="https://www.openmp.org/spec-html/5.1/openmpch3.html#x156-1890003">omp_lib</a>', > 'openacc': '<a ' > 'href="https://www.openacc.org/sites/default/files/inline-images/Specification/OpenACC.3.0.pdf#page=85">openacc</a>'} >restore_macros = None >restore_nameselector = None >settings = ' search: false\n extra_mods: dummy: dummy_module\n ' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:72: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:22: in run_ford > ford.run() > command = ['ford', > '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md'] > extra_args = None > m = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f92f8b80> > md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md') > monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f92f8160> >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:633: in run > proj_data, proj_docs, md = initialize() >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:236: in initialize > return parse_arguments(vars(args), proj_docs, directory) > args = Namespace(css=None, dbg=None, exclude=None, exclude_dir=None, extensions=None, external=None, externalize=None, force=None, include=None, macro=None, output_dir=None, page_dir=None, project_file=<_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md' mode='r' encoding='UTF-8'>, quiet=None, revision=None, search=None, src_dir=None, warn=None) > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0' > proj_docs = 'search: false\nextra_mods: dummy: dummy_module\n' >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:516: in parse_arguments > exit( > args_option = None > base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0') > command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] > command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} > default = 2022 > default_type = True > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0' > docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] > extdict = {} > first = 'docmark_alt' > md = <markdown.core.Markdown object at 0x7f57f907ae80> > md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0' > md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f907a580>, > 'markdown_include.include'] > multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> > ncpus = '48' > option = 'year' > proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.700339', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': ['dummy: dummy_module'], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} > proj_docs = '' > project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md' > second = 'predocmark_alt' > srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/src') > var = 'include' >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = Use exit() or Ctrl-D (i.e. EOF) to exit >code = "Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error:\n [Err...s: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md'" > > def __call__(self, code=None): > # Shells like IDLE catch the SystemExit, but listen when their > # stdin wrapper is closed. > try: > sys.stdin.close() > except: > pass >> raise SystemExit(code) >E SystemExit: Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error: >E [Errno 2] No such file or directory: 'cpp' >E >E If you need to preprocess files, please fix the 'preprocessor' option in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md'. >E Otherwise, please set 'preprocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md' > >code = ('Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ ' > '/dev/null`) failed with error:\n' > " [Errno 2] No such file or directory: 'cpp'\n" > '\n' > "If you need to preprocess files, please fix the 'preprocessor' option in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md'.\n" > "Otherwise, please set 'preprocess: False' in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extra_mods_intrinsic0/test.md'") >self = Use exit() or Ctrl-D (i.e. EOF) to exit > >/usr/lib/python3.8/_sitebuiltins.py:26: SystemExit >_____________________________ test_default_aliases _____________________________ > >command_line_args = {'css': None, 'dbg': None, 'exclude': None, 'exclude_dir': None, ...} >proj_docs = '<p>Test: The project media url should be |media|</p>' >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} >default = 2022 >default_type = True >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f93dd640> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f929e790>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.814811', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '<p>Test: The project media url should be |media|</p>' >project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f91aeac0> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 14 >c2pwrite = 15 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 16 >errwrite = 17 >executable = None >f = <_io.TextIOWrapper name=16 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f91aeac0> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f91aeac0> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 14, c2pwrite = 15, errread = 16 >errwrite = 17, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 14 >c2pwrite = 15 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 18 >errpipe_write = 19 >errread = 16 >errwrite = 17 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {19} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 109 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f91aeac0> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f909cf70> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f909cca0> >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f9105700> >restore_macros = None, restore_nameselector = None > > def test_default_aliases( > copy_fortran_file, > copy_settings_file, > tmp_path, > monkeypatch, > restore_macros, > restore_nameselector, > ): > """Check that aliases specified in project file are replaced correctly""" > > data = """\ > module test > !! Test: The project media url (|media|) should work here too > end module test > """ > settings = """\ > search: false > > Test: The project media url should be |media| > """ > > copy_fortran_file(data) > md_file = copy_settings_file(settings) > >> run_ford(monkeypatch, md_file) > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f909cf70> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f909cca0> >data = (' module test\n' > ' !! Test: The project media url (|media|) should work here too\n' > ' end module test\n' > ' ') >md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f9105700> >restore_macros = None >restore_nameselector = None >settings = ' search: false\n\n Test: The project media url should be |media|\n ' >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0') > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:108: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:22: in run_ford > ford.run() > command = ['ford', > '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md'] > extra_args = None > m = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f94720d0> > md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md') > monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f9105700> >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:633: in run > proj_data, proj_docs, md = initialize() >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:236: in initialize > return parse_arguments(vars(args), proj_docs, directory) > args = Namespace(css=None, dbg=None, exclude=None, exclude_dir=None, extensions=None, external=None, externalize=None, force=None, include=None, macro=None, output_dir=None, page_dir=None, project_file=<_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md' mode='r' encoding='UTF-8'>, quiet=None, revision=None, search=None, src_dir=None, warn=None) > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0' > proj_docs = 'search: false\n\nTest: The project media url should be |media|\n' >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:516: in parse_arguments > exit( > args_option = None > base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0') > command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] > command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} > default = 2022 > default_type = True > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0' > docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] > extdict = {} > first = 'docmark_alt' > md = <markdown.core.Markdown object at 0x7f57f93dd640> > md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0' > md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f929e790>, > 'markdown_include.include'] > multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> > ncpus = '48' > option = 'year' > proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.814811', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} > proj_docs = '<p>Test: The project media url should be |media|</p>' > project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md' > second = 'predocmark_alt' > srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/src') > var = 'include' >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = Use exit() or Ctrl-D (i.e. EOF) to exit >code = "Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error:\n [Err...rocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md'" > > def __call__(self, code=None): > # Shells like IDLE catch the SystemExit, but listen when their > # stdin wrapper is closed. > try: > sys.stdin.close() > except: > pass >> raise SystemExit(code) >E SystemExit: Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error: >E [Errno 2] No such file or directory: 'cpp' >E >E If you need to preprocess files, please fix the 'preprocessor' option in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md'. >E Otherwise, please set 'preprocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md' > >code = ('Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ ' > '/dev/null`) failed with error:\n' > " [Errno 2] No such file or directory: 'cpp'\n" > '\n' > "If you need to preprocess files, please fix the 'preprocessor' option in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md'.\n" > "Otherwise, please set 'preprocess: False' in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md'") >self = Use exit() or Ctrl-D (i.e. EOF) to exit > >/usr/lib/python3.8/_sitebuiltins.py:26: SystemExit >________________________________ test_one_alias ________________________________ > >command_line_args = {'css': None, 'dbg': None, 'exclude': None, 'exclude_dir': None, ...} >proj_docs = "<p>Test: This |foo| should be expanded as 'bar'</p>\n<p>Test: This foo should not be.</p>" >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} >default = 2022 >default_type = True >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f9301220> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93015b0>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': ['foo = bar'], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.947830', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = ("<p>Test: This |foo| should be expanded as 'bar'</p>\n" > '<p>Test: This foo should not be.</p>') >project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f93160d0> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 12 >c2pwrite = 14 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 15 >errwrite = 16 >executable = None >f = <_io.TextIOWrapper name=15 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f93160d0> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f93160d0> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 12, c2pwrite = 14, errread = 15 >errwrite = 16, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 12 >c2pwrite = 14 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 17 >errpipe_write = 18 >errread = 15 >errwrite = 16 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {18} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 110 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f93160d0> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f937fdc0> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f937f040> >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f91cdeb0> >restore_macros = None, restore_nameselector = None > > def test_one_alias( > copy_fortran_file, > copy_settings_file, > tmp_path, > monkeypatch, > restore_macros, > restore_nameselector, > ): > """Check that aliases specified in project file are replaced correctly""" > > data = """\ > module test > !! Title > !! > !! Test: This foo should not be exanded > !! > !! Test: But this |foo| should be 'bar' > end module test > """ > settings = """\ > search: false > alias: foo = bar > > Test: This |foo| should be expanded as 'bar' > > Test: This foo should not be. > """ > > copy_fortran_file(data) > md_file = copy_settings_file(settings) > >> run_ford(monkeypatch, md_file) > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f937fdc0> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f937f040> >data = (' module test\n' > ' !! Title\n' > ' !!\n' > ' !! Test: This foo should not be exanded\n' > ' !!\n' > " !! Test: But this |foo| should be 'bar'\n" > ' end module test\n' > ' ') >md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f91cdeb0> >restore_macros = None >restore_nameselector = None >settings = (' search: false\n' > ' alias: foo = bar\n' > '\n' > " Test: This |foo| should be expanded as 'bar'\n" > '\n' > ' Test: This foo should not be.\n' > ' ') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0') > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:155: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:22: in run_ford > ford.run() > command = ['ford', > '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md'] > extra_args = None > m = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f9323e80> > md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md') > monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f91cdeb0> >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:633: in run > proj_data, proj_docs, md = initialize() >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:236: in initialize > return parse_arguments(vars(args), proj_docs, directory) > args = Namespace(css=None, dbg=None, exclude=None, exclude_dir=None, extensions=None, external=None, externalize=None, force=None, include=None, macro=None, output_dir=None, page_dir=None, project_file=<_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md' mode='r' encoding='UTF-8'>, quiet=None, revision=None, search=None, src_dir=None, warn=None) > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0' > proj_docs = ('search: false\n' > 'alias: foo = bar\n' > '\n' > "Test: This |foo| should be expanded as 'bar'\n" > '\n' > 'Test: This foo should not be.\n') >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:516: in parse_arguments > exit( > args_option = None > base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0') > command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] > command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} > default = 2022 > default_type = True > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0' > docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] > extdict = {} > first = 'docmark_alt' > md = <markdown.core.Markdown object at 0x7f57f9301220> > md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0' > md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93015b0>, > 'markdown_include.include'] > multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> > ncpus = '48' > option = 'year' > proj_data = {'alias': ['foo = bar'], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:46.947830', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} > proj_docs = ("<p>Test: This |foo| should be expanded as 'bar'</p>\n" > '<p>Test: This foo should not be.</p>') > project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md' > second = 'predocmark_alt' > srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/src') > var = 'include' >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = Use exit() or Ctrl-D (i.e. EOF) to exit >code = "Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error:\n [Err... 'preprocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md'" > > def __call__(self, code=None): > # Shells like IDLE catch the SystemExit, but listen when their > # stdin wrapper is closed. > try: > sys.stdin.close() > except: > pass >> raise SystemExit(code) >E SystemExit: Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error: >E [Errno 2] No such file or directory: 'cpp' >E >E If you need to preprocess files, please fix the 'preprocessor' option in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md'. >E Otherwise, please set 'preprocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md' > >code = ('Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ ' > '/dev/null`) failed with error:\n' > " [Errno 2] No such file or directory: 'cpp'\n" > '\n' > "If you need to preprocess files, please fix the 'preprocessor' option in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md'.\n" > "Otherwise, please set 'preprocess: False' in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md'") >self = Use exit() or Ctrl-D (i.e. EOF) to exit > >/usr/lib/python3.8/_sitebuiltins.py:26: SystemExit >____________________________ test_multiple_aliases _____________________________ > >command_line_args = {'css': None, 'dbg': None, 'exclude': None, 'exclude_dir': None, ...} >proj_docs = "<p>Test: This |foo| should be expanded as 'bar', while |zing| should be 'quaff'</p>\n<p>Test: This foo and zing should not be.</p>" >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} >default = 2022 >default_type = True >directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f93e9430> >md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93e9130>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': ['foo = bar', 'zing = quaff'], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:47.062829', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = ("<p>Test: This |foo| should be expanded as 'bar', while |zing| should be " > "'quaff'</p>\n" > '<p>Test: This foo and zing should not be.</p>') >project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f9377460> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 14 >c2pwrite = 15 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 16 >errwrite = 17 >executable = None >f = <_io.TextIOWrapper name=16 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f9377460> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f9377460> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 14, c2pwrite = 15, errread = 16 >errwrite = 17, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 14 >c2pwrite = 15 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 18 >errpipe_write = 19 >errread = 16 >errwrite = 17 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {19} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 111 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f9377460> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f937fee0> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f9376670> >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f91e16a0> >restore_macros = None, restore_nameselector = None > > def test_multiple_aliases( > copy_fortran_file, > copy_settings_file, > tmp_path, > monkeypatch, > restore_macros, > restore_nameselector, > ): > """Check that aliases specified in project file are replaced correctly""" > > data = """\ > module test > !! Title > !! > !! Test: This foo and zing should not be exanded > !! > !! Test: But this |foo| should be 'bar', and this |zing| 'quaff' > end module test > """ > settings = """\ > search: false > alias: foo = bar > zing = quaff > > Test: This |foo| should be expanded as 'bar', while |zing| should be 'quaff' > > Test: This foo and zing should not be. > """ > > copy_fortran_file(data) > md_file = copy_settings_file(settings) > >> run_ford(monkeypatch, md_file) > >copy_fortran_file = <function copy_fortran_file.<locals>.<lambda> at 0x7f57f937fee0> >copy_settings_file = <function copy_settings_file.<locals>.<lambda> at 0x7f57f9376670> >data = (' module test\n' > ' !! Title\n' > ' !!\n' > ' !! Test: This foo and zing should not be exanded\n' > ' !!\n' > " !! Test: But this |foo| should be 'bar', and this |zing| 'quaff'\n" > ' end module test\n' > ' ') >md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f91e16a0> >restore_macros = None >restore_nameselector = None >settings = (' search: false\n' > ' alias: foo = bar\n' > ' zing = quaff\n' > '\n' > " Test: This |foo| should be expanded as 'bar', while |zing| should be " > "'quaff'\n" > '\n' > ' Test: This foo and zing should not be.\n' > ' ') >tmp_path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0') > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:205: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_md_inputs.py:22: in run_ford > ford.run() > command = ['ford', > '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md'] > extra_args = None > m = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f91e1b80> > md_file = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md') > monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f91e16a0> >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:633: in run > proj_data, proj_docs, md = initialize() >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:236: in initialize > return parse_arguments(vars(args), proj_docs, directory) > args = Namespace(css=None, dbg=None, exclude=None, exclude_dir=None, extensions=None, external=None, externalize=None, force=None, include=None, macro=None, output_dir=None, page_dir=None, project_file=<_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md' mode='r' encoding='UTF-8'>, quiet=None, revision=None, search=None, src_dir=None, warn=None) > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0' > proj_docs = ('search: false\n' > 'alias: foo = bar\n' > ' zing = quaff\n' > '\n' > "Test: This |foo| should be expanded as 'bar', while |zing| should be " > "'quaff'\n" > '\n' > 'Test: This foo and zing should not be.\n') >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:516: in parse_arguments > exit( > args_option = None > base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0') > command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] > command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} > default = 2022 > default_type = True > directory = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0' > docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] > extdict = {} > first = 'docmark_alt' > md = <markdown.core.Markdown object at 0x7f57f93e9430> > md_base = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0' > md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f93e9130>, > 'markdown_include.include'] > multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> > ncpus = '48' > option = 'year' > proj_data = {'alias': ['foo = bar', 'zing = quaff'], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:47.062829', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': False, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'Fortran Program', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} > proj_docs = ("<p>Test: This |foo| should be expanded as 'bar', while |zing| should be " > "'quaff'</p>\n" > '<p>Test: This foo and zing should not be.</p>') > project_file = '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md' > second = 'predocmark_alt' > srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/src') > var = 'include' >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = Use exit() or Ctrl-D (i.e. EOF) to exit >code = "Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error:\n [Err...ocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md'" > > def __call__(self, code=None): > # Shells like IDLE catch the SystemExit, but listen when their > # stdin wrapper is closed. > try: > sys.stdin.close() > except: > pass >> raise SystemExit(code) >E SystemExit: Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error: >E [Errno 2] No such file or directory: 'cpp' >E >E If you need to preprocess files, please fix the 'preprocessor' option in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md'. >E Otherwise, please set 'preprocess: False' in '/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md' > >code = ('Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ ' > '/dev/null`) failed with error:\n' > " [Errno 2] No such file or directory: 'cpp'\n" > '\n' > "If you need to preprocess files, please fix the 'preprocessor' option in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md'.\n" > "Otherwise, please set 'preprocess: False' in " > "'/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md'") >self = Use exit() or Ctrl-D (i.e. EOF) to exit > >/usr/lib/python3.8/_sitebuiltins.py:26: SystemExit >____________________________ test_external_project _____________________________ > >command_line_args = {'css': None, 'dbg': None, 'exclude': None, 'exclude_dir': None, ...} >proj_docs = '', directory = '' > > def parse_arguments( > command_line_args: dict, > proj_docs: str, > directory: Union[os.PathLike, str] = os.getcwd(), > ): > """Consolidates arguments from the command line and from the project > file, and then normalises them how the rest of the code expects > """ > > try: > import multiprocessing > > ncpus = "{0}".format(multiprocessing.cpu_count()) > except (ImportError, NotImplementedError): > ncpus = "0" > > DEFAULT_SETTINGS["parallel"] = ncpus > > # Set up Markdown reader > md_ext = [ > "markdown.extensions.meta", > "markdown.extensions.codehilite", > "markdown.extensions.extra", > "mdx_math", > EnvironExtension(), > ] > md = markdown.Markdown( > extensions=md_ext, output_format="html5", extension_configs={} > ) > > md.convert(proj_docs) > # Remake the Markdown object with settings parsed from the project_file > if "md_base_dir" in md.Meta: > md_base = md.Meta["md_base_dir"][0] > else: > md_base = directory > md_ext.append("markdown_include.include") > if "md_extensions" in md.Meta: > md_ext.extend(md.Meta["md_extensions"]) > md = markdown.Markdown( > extensions=md_ext, > output_format="html5", > extension_configs={"markdown_include.include": {"base_path": md_base}}, > ) > > # Re-read the project file > proj_docs = md.reset().convert(proj_docs) > proj_data = md.Meta > > # Get the default options, and any over-rides, straightened out > for option, default in DEFAULT_SETTINGS.items(): > args_option = command_line_args.get(option, None) > if args_option is not None: > proj_data[option] = args_option > elif option in proj_data: > # Think if there is a safe way to evaluate any expressions found in this list > default_type = DEFAULT_SETTINGS.get(option, None) > if isinstance(default_type, bool): > proj_data[option] = convert_to_bool(option, proj_data[option]) > elif not isinstance(default_type, list): > # If it's not supposed to be a list, then it's > # probably supposed to be a single big block of text, > # like a description > proj_data[option] = "\n".join(proj_data[option]) > else: > proj_data[option] = default > > # Evaluate paths relative to project file location > base_dir = pathlib.Path(directory).absolute() > proj_data["base_dir"] = base_dir > > for var in [ > "page_dir", > "output_dir", > "graph_dir", > "media_dir", > "css", > "mathjax_config", > "src_dir", > "exclude_dir", > "include", > ]: > if proj_data[var] is None: > continue > if isinstance(proj_data[var], list): > proj_data[var] = [ > ford.utils.normalise_path(base_dir, p) for p in proj_data[var] > ] > else: > proj_data[var] = ford.utils.normalise_path(base_dir, proj_data[var]) > > if proj_data["favicon"].strip() != DEFAULT_SETTINGS["favicon"]: > proj_data["favicon"] = ford.utils.normalise_path(base_dir, proj_data["favicon"]) > > proj_data["display"] = [item.lower() for item in proj_data["display"]] > proj_data["creation_date"] = datetime.now().strftime(proj_data["creation_date"]) > proj_data["relative"] = proj_data["project_url"] == "" > proj_data["extensions"] += [ > ext for ext in proj_data["fpp_extensions"] if ext not in proj_data["extensions"] > ] > # Parse file extensions and comment characters for extra filetypes > extdict = {} > for ext in proj_data["extra_filetypes"]: > sp = ext.split() > if len(sp) < 2: > continue > if len(sp) == 2: > extdict[sp[0]] = sp[1] # (comment_char) only > else: > extdict[sp[0]] = (sp[1], sp[2]) # (comment_char and lexer_str) > proj_data["extra_filetypes"] = extdict > > # Make sure no src_dir is contained within output_dir > for srcdir in proj_data["src_dir"]: > # In Python 3.9+ we can use pathlib.Path.is_relative_to > if proj_data["output_dir"] in (srcdir, *srcdir.parents): > raise ValueError( > f"Source directory {srcdir} is a subdirectory of output directory {proj_data['output_dir']}." > ) > > # Check that none of the docmarks are the same > docmarks = ["docmark", "predocmark", "docmark_alt", "predocmark_alt"] > for first, second in itertools.combinations(docmarks, 2): > if proj_data[first] == proj_data[second] != "": > raise ValueError( > f"{first} ('{proj_data[first]}') and {second} ('{proj_data[second]}') are the same" > ) > > # Add gitter sidecar if specified in metadata > if proj_data["gitter_sidecar"] is not None: > proj_docs += """ > <script> > ((window.gitter = {{}}).chat = {{}}).options = {{ > room: '{}' > }}; > </script> > <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script> > """.format( > proj_data["gitter_sidecar"].strip() > ) > # Handle preprocessor: > if proj_data["preprocess"]: > proj_data["preprocessor"] = proj_data["preprocessor"].split() > command = proj_data["preprocessor"] + [os.devnull] > # Check whether preprocessor works (reading nothing from stdin) > try: >> subprocess.run(command, check=True, capture_output=True, text=True) > >args_option = None >base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project') >command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='doc.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} >default = 2022 >default_type = True >directory = '' >docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] >extdict = {} >first = 'docmark_alt' >md = <markdown.core.Markdown object at 0x7f57f8496040> >md_base = '' >md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f8496100>, > 'markdown_include.include'] >multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> >ncpus = '48' >option = 'year' >proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:47.887730', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': True, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'external-project-1', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} >proj_docs = '' >project_file = 'doc.md' >second = 'predocmark_alt' >srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project/src') >var = 'include' > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:513: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >input = None, capture_output = True, timeout = None, check = True >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} > > def run(*popenargs, > input=None, capture_output=False, timeout=None, check=False, **kwargs): > """Run command with arguments and return a CompletedProcess instance. > > The returned instance will have attributes args, returncode, stdout and > stderr. By default, stdout and stderr are not captured, and those attributes > will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. > > If check is True and the exit code was non-zero, it raises a > CalledProcessError. The CalledProcessError object will have the return code > in the returncode attribute, and output & stderr attributes if those streams > were captured. > > If timeout is given, and the process takes too long, a TimeoutExpired > exception will be raised. > > There is an optional argument "input", allowing you to > pass bytes or a string to the subprocess's stdin. If you use this argument > you may not also use the Popen constructor's "stdin" argument, as > it will be used internally. > > By default, all communication is in bytes, and therefore any "input" should > be bytes, and the stdout and stderr will be bytes. If in text mode, any > "input" should be a string, and stdout and stderr will be strings decoded > according to locale encoding, or by "encoding" if set. Text mode is > triggered by setting any of text, encoding, errors or universal_newlines. > > The other arguments are the same as for the Popen constructor. > """ > if input is not None: > if kwargs.get('stdin') is not None: > raise ValueError('stdin and input arguments may not both be used.') > kwargs['stdin'] = PIPE > > if capture_output: > if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: > raise ValueError('stdout and stderr arguments may not be used ' > 'with capture_output.') > kwargs['stdout'] = PIPE > kwargs['stderr'] = PIPE > >> with Popen(*popenargs, **kwargs) as process: > >capture_output = True >check = True >input = None >kwargs = {'stderr': -1, 'stdout': -1, 'text': True} >popenargs = (['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'],) >timeout = None > >/usr/lib/python3.8/subprocess.py:493: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f83ed190> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -1 >preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None >universal_newlines = None, startupinfo = None, creationflags = 0 >restore_signals = True, start_new_session = False, pass_fds = () > > def __init__(self, args, bufsize=-1, executable=None, > stdin=None, stdout=None, stderr=None, > preexec_fn=None, close_fds=True, > shell=False, cwd=None, env=None, universal_newlines=None, > startupinfo=None, creationflags=0, > restore_signals=True, start_new_session=False, > pass_fds=(), *, encoding=None, errors=None, text=None): > """Create new Popen instance.""" > _cleanup() > # Held while anything is calling waitpid before returncode has been > # updated to prevent clobbering returncode if wait() or poll() are > # called from multiple threads at once. After acquiring the lock, > # code must re-check self.returncode to see if another thread just > # finished a waitpid() call. > self._waitpid_lock = threading.Lock() > > self._input = None > self._communication_started = False > if bufsize is None: > bufsize = -1 # Restore default > if not isinstance(bufsize, int): > raise TypeError("bufsize must be an integer") > > if _mswindows: > if preexec_fn is not None: > raise ValueError("preexec_fn is not supported on Windows " > "platforms") > else: > # POSIX > if pass_fds and not close_fds: > warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) > close_fds = True > if startupinfo is not None: > raise ValueError("startupinfo is only supported on Windows " > "platforms") > if creationflags != 0: > raise ValueError("creationflags is only supported on Windows " > "platforms") > > self.args = args > self.stdin = None > self.stdout = None > self.stderr = None > self.pid = None > self.returncode = None > self.encoding = encoding > self.errors = errors > > # Validate the combinations of text and universal_newlines > if (text is not None and universal_newlines is not None > and bool(universal_newlines) != bool(text)): > raise SubprocessError('Cannot disambiguate when both text ' > 'and universal_newlines are supplied but ' > 'different. Pass one or the other.') > > # Input and output objects. The general principle is like > # this: > # > # Parent Child > # ------ ----- > # p2cwrite ---stdin---> p2cread > # c2pread <--stdout--- c2pwrite > # errread <--stderr--- errwrite > # > # On POSIX, the child objects are file descriptors. On > # Windows, these are Windows file handles. The parent objects > # are file descriptors on both platforms. The parent objects > # are -1 when not using PIPEs. The child objects are -1 > # when not redirecting. > > (p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) = self._get_handles(stdin, stdout, stderr) > > # We wrap OS handles *before* launching the child, otherwise a > # quickly terminating child could make our fds unwrappable > # (see #8458). > > if _mswindows: > if p2cwrite != -1: > p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) > if c2pread != -1: > c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) > if errread != -1: > errread = msvcrt.open_osfhandle(errread.Detach(), 0) > > self.text_mode = encoding or errors or text or universal_newlines > > # How long to resume waiting on a child after the first ^C. > # There is no right value for this. The purpose is to be polite > # yet remain good for interactive users trying to exit a tool. > self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() > > self._closed_child_pipe_fds = False > > if self.text_mode: > if bufsize == 1: > line_buffering = True > # Use the default buffer size for the underlying binary streams > # since they don't support line buffering. > bufsize = -1 > else: > line_buffering = False > > try: > if p2cwrite != -1: > self.stdin = io.open(p2cwrite, 'wb', bufsize) > if self.text_mode: > self.stdin = io.TextIOWrapper(self.stdin, write_through=True, > line_buffering=line_buffering, > encoding=encoding, errors=errors) > if c2pread != -1: > self.stdout = io.open(c2pread, 'rb', bufsize) > if self.text_mode: > self.stdout = io.TextIOWrapper(self.stdout, > encoding=encoding, errors=errors) > if errread != -1: > self.stderr = io.open(errread, 'rb', bufsize) > if self.text_mode: > self.stderr = io.TextIOWrapper(self.stderr, > encoding=encoding, errors=errors) > >> self._execute_child(args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session) > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >bufsize = -1 >c2pread = 12 >c2pwrite = 13 >close_fds = True >creationflags = 0 >cwd = None >encoding = None >env = None >errors = None >errread = 14 >errwrite = 15 >executable = None >f = <_io.TextIOWrapper name=14 encoding='UTF-8'> >line_buffering = False >p2cread = -1 >p2cwrite = -1 >pass_fds = () >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f83ed190> >shell = False >start_new_session = False >startupinfo = None >stderr = -1 >stdin = None >stdout = -1 >text = True >universal_newlines = None > >/usr/lib/python3.8/subprocess.py:858: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = <subprocess.Popen object at 0x7f57f83ed190> >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >executable = b'cpp', preexec_fn = None, close_fds = True, pass_fds = () >cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False >p2cread = -1, p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14 >errwrite = 15, restore_signals = True, start_new_session = False > > def _execute_child(self, args, executable, preexec_fn, close_fds, > pass_fds, cwd, env, > startupinfo, creationflags, shell, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite, > restore_signals, start_new_session): > """Execute program (POSIX version)""" > > if isinstance(args, (str, bytes)): > args = [args] > elif isinstance(args, os.PathLike): > if shell: > raise TypeError('path-like args is not allowed when ' > 'shell is true') > args = [args] > else: > args = list(args) > > if shell: > # On Android the default shell is at '/system/bin/sh'. > unix_shell = ('/system/bin/sh' if > hasattr(sys, 'getandroidapilevel') else '/bin/sh') > args = [unix_shell, "-c"] + args > if executable: > args[0] = executable > > if executable is None: > executable = args[0] > > sys.audit("subprocess.Popen", executable, args, cwd, env) > > if (_USE_POSIX_SPAWN > and os.path.dirname(executable) > and preexec_fn is None > and not close_fds > and not pass_fds > and cwd is None > and (p2cread == -1 or p2cread > 2) > and (c2pwrite == -1 or c2pwrite > 2) > and (errwrite == -1 or errwrite > 2) > and not start_new_session): > self._posix_spawn(args, executable, env, restore_signals, > p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > return > > orig_executable = executable > > # For transferring possible exec failure from child to parent. > # Data format: "exception name:hex errno:description" > # Pickle is not used; it is complex and involves memory allocation. > errpipe_read, errpipe_write = os.pipe() > # errpipe_write must not be in the standard io 0, 1, or 2 fd range. > low_fds_to_close = [] > while errpipe_write < 3: > low_fds_to_close.append(errpipe_write) > errpipe_write = os.dup(errpipe_write) > for low_fd in low_fds_to_close: > os.close(low_fd) > try: > try: > # We must avoid complex work that could involve > # malloc or free in the child process to avoid > # potential deadlocks, thus we do all this here. > # and pass it to fork_exec() > > if env is not None: > env_list = [] > for k, v in env.items(): > k = os.fsencode(k) > if b'=' in k: > raise ValueError("illegal environment variable name") > env_list.append(k + b'=' + os.fsencode(v)) > else: > env_list = None # Use execv instead of execve. > executable = os.fsencode(executable) > if os.path.dirname(executable): > executable_list = (executable,) > else: > # This matches the behavior of os._execvpe(). > executable_list = tuple( > os.path.join(os.fsencode(dir), executable) > for dir in os.get_exec_path(env)) > fds_to_keep = set(pass_fds) > fds_to_keep.add(errpipe_write) > self.pid = _posixsubprocess.fork_exec( > args, executable_list, > close_fds, tuple(sorted(map(int, fds_to_keep))), > cwd, env_list, > p2cread, p2cwrite, c2pread, c2pwrite, > errread, errwrite, > errpipe_read, errpipe_write, > restore_signals, start_new_session, preexec_fn) > self._child_created = True > finally: > # be sure the FD is closed no matter what > os.close(errpipe_write) > > self._close_pipe_fds(p2cread, p2cwrite, > c2pread, c2pwrite, > errread, errwrite) > > # Wait for exec to fail or succeed; possibly raising an > # exception (limited in size) > errpipe_data = bytearray() > while True: > part = os.read(errpipe_read, 50000) > errpipe_data += part > if not part or len(errpipe_data) > 50000: > break > finally: > # be sure the FD is closed no matter what > os.close(errpipe_read) > > if errpipe_data: > try: > pid, sts = os.waitpid(self.pid, 0) > if pid == self.pid: > self._handle_exitstatus(sts) > else: > self.returncode = sys.maxsize > except ChildProcessError: > pass > > try: > exception_name, hex_errno, err_msg = ( > errpipe_data.split(b':', 2)) > # The encoding here should match the encoding > # written in by the subprocess implementations > # like _posixsubprocess > err_msg = err_msg.decode() > except ValueError: > exception_name = b'SubprocessError' > hex_errno = b'0' > err_msg = 'Bad exception data from child: {!r}'.format( > bytes(errpipe_data)) > child_exception_type = getattr( > builtins, exception_name.decode('ascii'), > SubprocessError) > if issubclass(child_exception_type, OSError) and hex_errno: > errno_num = int(hex_errno, 16) > child_exec_never_called = (err_msg == "noexec") > if child_exec_never_called: > err_msg = "" > # The error must be from chdir(cwd). > err_filename = cwd > else: > err_filename = orig_executable > if errno_num != 0: > err_msg = os.strerror(errno_num) >> raise child_exception_type(errno_num, err_msg, err_filename) >E FileNotFoundError: [Errno 2] No such file or directory: 'cpp' > >args = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] >c2pread = 12 >c2pwrite = 13 >child_exception_type = <class 'OSError'> >child_exec_never_called = False >close_fds = True >creationflags = 0 >cwd = None >env = None >env_list = None >err_filename = 'cpp' >err_msg = 'No such file or directory' >errno_num = 2 >errpipe_data = bytearray(b'OSError:2:') >errpipe_read = 16 >errpipe_write = 17 >errread = 14 >errwrite = 15 >exception_name = bytearray(b'OSError') >executable = b'cpp' >executable_list = (b'/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11-python3_8/test/scripts' > b'/cpp', > b'/var/tmp/portage/app-doc/ford-6.1.11/temp/python3.8/bin/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/xattr/cpp', > b'/usr/lib/portage/python3.10/ebuild-helpers/cpp', > b'/usr/local/sbin/cpp', > b'/usr/local/bin/cpp', > b'/usr/sbin/cpp', > b'/usr/bin/cpp', > b'/sbin/cpp', > b'/bin/cpp', > b'/opt/bin/cpp') >fds_to_keep = {17} >hex_errno = bytearray(b'2') >low_fds_to_close = [] >orig_executable = 'cpp' >p2cread = -1 >p2cwrite = -1 >part = b'' >pass_fds = () >pid = 112 >preexec_fn = None >restore_signals = True >self = <subprocess.Popen object at 0x7f57f83ed190> >shell = False >start_new_session = False >startupinfo = None >sts = 65280 > >/usr/lib/python3.8/subprocess.py:1704: FileNotFoundError > >During handling of the above exception, another exception occurred: > >copy_project_files = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project') >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f84dc5e0> >restore_macros = None > > def test_external_project(copy_project_files, monkeypatch, restore_macros): > """Check that we can build external projects and get the links correct > > This is a rough-and-ready test that runs FORD via subprocess, and > so won't work unless FORD has been installed. > > It also relies on access to the internet and an external URL out > of our control. > > """ > > path = copy_project_files > external_project = path / "external_project" > top_level_project = path / "top_level_project" > > # Run FORD in the two projects > # First project has "externalize: True" and will generate JSON dump > with monkeypatch.context() as m: > os.chdir(external_project) > m.setattr(sys, "argv", ["ford", "doc.md"]) >> ford.run() > >copy_project_files = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project') >external_project = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project') >m = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f87b9ee0> >monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f57f84dc5e0> >path = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project') >restore_macros = None >top_level_project = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/top_level_project') > >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_projects/test_external_project.py:95: >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:633: in run > proj_data, proj_docs, md = initialize() >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:236: in initialize > return parse_arguments(vars(args), proj_docs, directory) > args = Namespace(css=None, dbg=None, exclude=None, exclude_dir=None, extensions=None, external=None, externalize=None, force=None, include=None, macro=None, output_dir=None, page_dir=None, project_file=<_io.TextIOWrapper name='doc.md' mode='r' encoding='UTF-8'>, quiet=None, revision=None, search=None, src_dir=None, warn=None) > directory = '' > proj_docs = 'project: external-project-1\nsearch: false\nexternalize: true\n' >/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/__init__.py:516: in parse_arguments > exit( > args_option = None > base_dir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project') > command = ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__', '/dev/null'] > command_line_args = {'css': None, > 'dbg': None, > 'exclude': None, > 'exclude_dir': None, > 'extensions': None, > 'external': None, > 'externalize': None, > 'force': None, > 'include': None, > 'macro': None, > 'output_dir': None, > 'page_dir': None, > 'project_file': <_io.TextIOWrapper name='doc.md' mode='r' encoding='UTF-8'>, > 'quiet': None, > 'revision': None, > 'search': None, > 'src_dir': None, > 'warn': None} > default = 2022 > default_type = True > directory = '' > docmarks = ['docmark', 'predocmark', 'docmark_alt', 'predocmark_alt'] > extdict = {} > first = 'docmark_alt' > md = <markdown.core.Markdown object at 0x7f57f8496040> > md_base = '' > md_ext = ['markdown.extensions.meta', > 'markdown.extensions.codehilite', > 'markdown.extensions.extra', > 'mdx_math', > <ford.md_environ.EnvironExtension object at 0x7f57f8496100>, > 'markdown_include.include'] > multiprocessing = <module 'multiprocessing' from '/usr/lib/python3.8/multiprocessing/__init__.py'> > ncpus = '48' > option = 'year' > proj_data = {'alias': [], > 'author': None, > 'author_description': None, > 'author_pic': None, > 'base_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project'), > 'bitbucket': None, > 'coloured_edges': False, > 'copy_subdir': [], > 'creation_date': '2022-04-18T11:56:47.887730', > 'css': None, > 'dbg': True, > 'display': ['public', 'protected'], > 'doc_license': '', > 'docmark': '!', > 'docmark_alt': '*', > 'email': None, > 'encoding': 'utf-8', > 'exclude': [], > 'exclude_dir': [], > 'extensions': ['f90', > 'f95', > 'f03', > 'f08', > 'f15', > 'fpp', > 'F90', > 'F95', > 'F03', > 'F08', > 'F15', > 'F', > 'FOR'], > 'external': [], > 'externalize': True, > 'extra_filetypes': {}, > 'extra_mods': [], > 'extra_vartypes': [], > 'facebook': None, > 'favicon': 'default-icon', > 'fixed_extensions': ['f', 'for', 'F', 'FOR'], > 'fixed_length_limit': True, > 'force': False, > 'fpp_extensions': ['F90', 'F95', 'F03', 'F08', 'F15', 'F', 'FOR'], > 'github': None, > 'gitlab': None, > 'gitter_sidecar': None, > 'google_plus': None, > 'graph': False, > 'graph_dir': None, > 'graph_maxdepth': '10000', > 'graph_maxnodes': '1000000000', > 'hide_undoc': False, > 'incl_src': True, > 'include': [], > 'license': '', > 'linkedin': None, > 'lower': False, > 'macro': [], > 'mathjax_config': None, > 'max_frontpage_items': 10, > 'media_dir': None, > 'output_dir': PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project/doc'), > 'page_dir': None, > 'parallel': '48', > 'predocmark': '>', > 'predocmark_alt': '|', > 'preprocess': True, > 'preprocessor': ['cpp', '-traditional-cpp', '-E', '-D__GFORTRAN__'], > 'print_creation_date': False, > 'privacy_policy_url': None, > 'proc_internals': False, > 'project': 'external-project-1', > 'project_bitbucket': None, > 'project_download': None, > 'project_github': None, > 'project_gitlab': None, > 'project_sourceforge': None, > 'project_url': '', > 'project_website': None, > 'quiet': False, > 'relative': True, > 'revision': None, > 'search': False, > 'sort': 'src', > 'source': False, > 'src_dir': [PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project/src')], > 'summary': None, > 'terms_of_service_url': None, > 'twitter': None, > 'version': None, > 'warn': False, > 'website': None, > 'year': 2022} > proj_docs = '' > project_file = 'doc.md' > second = 'predocmark_alt' > srcdir = PosixPath('/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_external_project0/external_project/external_project/src') > var = 'include' >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > >self = Use exit() or Ctrl-D (i.e. EOF) to exit >code = "Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error:\n [Err...rocess files, please fix the 'preprocessor' option in 'doc.md'.\nOtherwise, please set 'preprocess: False' in 'doc.md'" > > def __call__(self, code=None): > # Shells like IDLE catch the SystemExit, but listen when their > # stdin wrapper is closed. > try: > sys.stdin.close() > except: > pass >> raise SystemExit(code) >E SystemExit: Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ /dev/null`) failed with error: >E [Errno 2] No such file or directory: 'cpp' >E >E If you need to preprocess files, please fix the 'preprocessor' option in 'doc.md'. >E Otherwise, please set 'preprocess: False' in 'doc.md' > >code = ('Error: Testing preprocessor command (`cpp -traditional-cpp -E -D__GFORTRAN__ ' > '/dev/null`) failed with error:\n' > " [Errno 2] No such file or directory: 'cpp'\n" > '\n' > "If you need to preprocess files, please fix the 'preprocessor' option in " > "'doc.md'.\n" > "Otherwise, please set 'preprocess: False' in 'doc.md'") >self = Use exit() or Ctrl-D (i.e. EOF) to exit > >/usr/lib/python3.8/_sitebuiltins.py:26: SystemExit >=============================== warnings summary =============================== >test/test_example.py: 1 warning >test/test_initialisation.py: 9 warnings >test/test_md_inputs.py: 5 warnings >test/test_projects/test_external_project.py: 1 warning > /usr/lib/python3.8/site-packages/markdown/core.py:125: DeprecationWarning: The 'md_globals' parameter of 'markdown_include.include.MarkdownInclude.extendMarkdown' is deprecated. > ext._extendMarkdown(self) > >test/test_project.py::test_use_without_rename > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_use_without_rename0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_use_and_rename > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_use_and_rename0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_module_use_only_everything > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_module_use_only_everythin0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_module_use_only_everything_change_access > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_module_use_only_everythin1/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_module_use_everything > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_module_use_everything0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_module_use_everything_reexport > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_module_use_everything_ree0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_member_in_other_module > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_member_in_other_module0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_display_derived_types > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_display_derived_types0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_display_derived_types_default_private > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_display_derived_types_def0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_display_private_derived_types > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_display_private_derived_t0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_interface_type_name > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_interface_type_name0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_imported_interface_type_name > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_imported_interface_type_n0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_abstract_interface_type_name > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_abstract_interface_type_n0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_imported_abstract_interface_type_name > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_imported_abstract_interfa0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_display_internal_procedures > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_display_internal_procedur0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_exclude_dir > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_exclude_dir0/src/include.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_exclude > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_exclude0/src/include.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_sort[src-expected_order0] > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_sort_src_expected_order0_0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_sort[alpha-expected_order1] > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_sort_alpha_expected_order0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_sort[permission-expected_order2] > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_sort_permission_expected_0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_sort[permission-alpha-expected_order3] > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_sort_permission_alpha_exp0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_sort[type-expected_order4] > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_sort_type_expected_order40/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_project.py::test_sort[type-alpha-expected_order5] > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/ford/fortran_project.py:100: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_sort_type_alpha_expected_0/src/test.f90' mode='r' encoding='utf-8'> > ford.sourceform.FortranSourceFile( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_reader.py::test_reader_continuation > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_reader.py:67: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_reader_continuation0/src/test.f90' mode='r' encoding='utf-8'> > lines = list(reader.FortranReader(filename, docmark="!")) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_reader.py::test_type > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_reader.py:97: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_type0/src/test.f90' mode='r' encoding='utf-8'> > lines = list(reader.FortranReader(filename, docmark="!")) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_reader.py::test_unknown_include > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_reader.py:118: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_unknown_include0/src/test.f90' mode='r' encoding='utf-8'> > lines = list(reader.FortranReader(filename, docmark="!")) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_reader.py::test_multiline_string > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_reader.py:160: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiline_string0/src/test.f90' mode='r' encoding='utf-8'> > lines = list( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_extends > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_extends0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_type_visibility_attributes > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_type_visibility_attribute0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_submodule_procedure_contains > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_submodule_procedure_conta0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_backslash_in_character_string > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_backslash_in_character_st0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_sync_images_in_submodule_procedure > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_sync_images_in_submodule_0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_function_and_subroutine_call_on_same_line > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_function_and_subroutine_c0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_component_access > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_component_access0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_format_statement > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_format_statement0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_enumerator_with_kind > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_enumerator_with_kind0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_module_default_access > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_module_default_access0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_module_public_access > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_module_public_access0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_module_private_access > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_module_private_access0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_module_procedure_case > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_module_procedure_case0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_markdown_header_bug286 > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_markdown_header_bug2860/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_markdown_codeblocks_bug286 > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_markdown_codeblocks_bug280/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_markdown_codeblocks_bug286 > /usr/lib/python3.8/site-packages/pygments/lexers/graphics.py:222: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_default_aliases0/test.md' mode='r' encoding='UTF-8'> > (words(( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_markdown_codeblocks_bug286 > /usr/lib/python3.8/site-packages/pygments/lexers/graphics.py:222: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_one_alias0/test.md' mode='r' encoding='UTF-8'> > (words(( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_markdown_codeblocks_bug286 > /usr/lib/python3.8/site-packages/pygments/lexers/graphics.py:222: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiple_aliases0/test.md' mode='r' encoding='UTF-8'> > (words(( > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_markdown_meta_reset > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_markdown_meta_reset0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_multiline_attributes > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_multiline_attributes0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_markdown_source_meta > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_markdown_source_meta0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >test/test_sourceform.py::test_markdown_source_settings > /var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11/test/test_sourceform.py:24: ResourceWarning: unclosed file <_io.TextIOWrapper name='/var/tmp/portage/app-doc/ford-6.1.11/temp/pytest-of-portage/pytest-0/test_markdown_source_settings0/src/test.f90' mode='r' encoding='utf-8'> > return FortranSourceFile(str(filename), settings) > Enable tracemalloc to get traceback where the object was allocated. > See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. > >-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html >=========================== short test summary info ============================ >SKIPPED [1] test/test_initialisation.py:134: Requires gfortran to be installed >ERROR test/test_example.py::test_nav_bar - SystemExit: Error: Testing preproc... >ERROR test/test_example.py::test_jumbotron - FileExistsError: [Errno 17] File... >ERROR test/test_example.py::test_developer_info_box - FileExistsError: [Errno... >ERROR test/test_example.py::test_latex - FileExistsError: [Errno 17] File exi... >ERROR test/test_example.py::test_source_file_links - FileExistsError: [Errno ... >ERROR test/test_example.py::test_module_links - FileExistsError: [Errno 17] F... >ERROR test/test_example.py::test_procedures_links - FileExistsError: [Errno 1... >ERROR test/test_example.py::test_types_links - FileExistsError: [Errno 17] Fi... >FAILED test/test_initialisation.py::test_quiet_false - KeyError: 'project_file' >FAILED test/test_initialisation.py::test_quiet_command_line - KeyError: 'proj... >FAILED test/test_initialisation.py::test_list_input - KeyError: 'project_file' >FAILED test/test_initialisation.py::test_path_normalisation - KeyError: 'proj... >FAILED test/test_initialisation.py::test_source_not_subdir_output - KeyError:... >FAILED test/test_md_inputs.py::test_extra_mods_empty - SystemExit: Error: Tes... >FAILED test/test_md_inputs.py::test_extra_mods_intrinsic - SystemExit: Error:... >FAILED test/test_md_inputs.py::test_default_aliases - SystemExit: Error: Test... >FAILED test/test_md_inputs.py::test_one_alias - SystemExit: Error: Testing pr... >FAILED test/test_md_inputs.py::test_multiple_aliases - SystemExit: Error: Tes... >FAILED test/test_projects/test_external_project.py::test_external_project - S... >======= 11 failed, 103 passed, 1 skipped, 65 warnings, 8 errors in 3.05s ======= > * ERROR: app-doc/ford-6.1.11::guru failed (test phase): > * pytest failed with python3.8 > * > * Call stack: > * ebuild.sh, line 127: Called src_test > * environment, line 3294: Called distutils-r1_src_test > * environment, line 1562: Called _distutils-r1_run_foreach_impl 'python_test' > * environment, line 650: Called python_foreach_impl 'distutils-r1_run_phase' 'python_test' > * environment, line 2970: Called multibuild_foreach_variant '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_test' > * environment, line 2493: Called _multibuild_run '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_test' > * environment, line 2491: Called _python_multibuild_wrapper 'distutils-r1_run_phase' 'python_test' > * environment, line 983: Called distutils-r1_run_phase 'python_test' > * environment, line 1486: Called python_test > * environment, line 3261: Called distutils-r1_python_test > * environment, line 1437: Called epytest > * environment, line 2004: Called die > * The specific snippet of code: > * "${@}" || die -n "pytest failed with ${EPYTHON}"; > * > * If you need support, post the output of `emerge --info '=app-doc/ford-6.1.11::guru'`, > * the complete build log and the output of `emerge -pqv '=app-doc/ford-6.1.11::guru'`. > * The complete build log is located at '/var/log/emerge-log/build/app-doc/ford-6.1.11:20220418-095631.log'. > * For convenience, a symlink to the build log is located at '/var/tmp/portage/app-doc/ford-6.1.11/temp/build.log'. > * The ebuild environment file is located at '/var/tmp/portage/app-doc/ford-6.1.11/temp/environment'. > * Working directory: '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' > * S: '/var/tmp/portage/app-doc/ford-6.1.11/work/FORD-6.1.11' >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 839300
: 771650