any specific example of making a dictionary using logios - cmusphinx

I followed this tutorial trying to build a dictionary, but I think the logios package is generally used for gram and classes file given as input. If I understood it correctly, the dictionary should be built by feeding either a sample text file or a vocabulary file, there shouldn't be any gram file involved. So my questions are
A) Is my understanding about the input correct?
B) Based on above assumption, I guess the correct way of using the package is not building them all, but rather making use of a component inside Tools directory named MakeDict. But I fell short of any solid example of how to use this tool. So I tried by making modification to test_MakeDict.sh file, but it failed with no further information on which component fails. So what shall I do next? Can anyone give any solid command line examples on using this tool, and shall I build the whole package first before I can use any individual component?
The directory layout in MakeDict is as
.
├── AUTHORS
├── bin
│   ├── x86-linux
│   │   └── pronounce
│   └── x86-nt
│   ├── libgnurx-0.dll
│   └── pronounce.exe
├── dict
│   ├── command.dic
│   ├── command.txt
│   ├── command.vocab
│   ├── hand.dic
│   └── pronunciation.log
├── lextool.pl
├── lib
│   ├── lexdata
│   │   ├── lexicon.data
│   │   ├── lexicon.key
│   │   ├── ltosru.bin
│   │   ├── nslex.900
│   │   └── nslex.901
│   └── Pronounce.pm
├── logios.log
├── make_pronunciation.pl
├── README
├── test
│   ├── example
│   ├── example.dic.test
│   ├── hand.dict
│   └── pronunciation.log.test
└── test_MakeDict.sh

You have to use the pronounce executable. Depending on your OS you will have to use the linux or nt version.
You can use it as follows:
(from the MakeDict root directory)
./bin/x86-linux/pronounce -d [name of the dictionary you want to use from the dict folder] -i [words file] -o [destination dictionary]
The words file must be a file contanining the words you want to include in the dictionary, one per line.
The dictionary I used was cmudict_SPHINX_40. I don't know which one you should use.

Related

Autotools Makefile cannot find sources

I am trying to use autotools in my Yocto project. Working with another user I was able to get bitbake to recognize my autogen.sh, configure.ac and Makefile.am. I am now getting the error
make: *** No rule to make target 'main.c', needed by 'main.o'. Stop.
My tree is as follows:
.
├── files
│   ├── MAIN_Application
│   │   ├── autogen.sh
│   │   ├── configure.ac
│   │   ├── include
│   │   │   ├── main.h
│   │   │   ├── scheduler.h
│   │   │   └── utilities
│   │   │   └── time_conversions.h
│   │   ├── Makefile.am
│   │   ├── project.yml
│   │   └── src
│   │   ├── main.c
│   │   ├── Makefile.am
│   │   ├── scheduler.c
│   │   └── utilities
| | ├── Makefile.am
│   │   └── time_conversions.c
│   └── services
│   └── mainapplication.service
└── mainapplication_0.0.bb
My makefile.am is as follows:
AUTOMAKE_OPTIONS = foreign
CFLAGS = -Wall -pedantic -O2
include_HEADERS = main.h
bin_PROGRAMS = MAIN_Application
MAIN_Application_SOURCES = main.c
I believe I need to add my other source files. What I am not sure is how to do so. Do I add them with MAIN_Application_SOURCES or do I need to add a Makefile.am in each subdirectory?
Edit: Adding link to previous question.
Edit 2: I have added a makefile.am to each directory. In MAIN_Application I have:
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src
In src I have:
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = MAIN_Application
EVCC_Application_SOURCES = main.c scheduler.c time_conversions.c
This gives a new error:
| Making all in src
| /bin/bash: line 20: cd: src: No such file or directory
| make: *** [Makefile:332: all-recursive] Error 1
| ERROR: oe_runmake failed
Edit 3: If I remove my src and include folders, place everything into one folder (top level) it all works. This is ugly and I hate it.
.
├── files
│   ├── MAIN_Application
│   │   ├── autogen.sh
│   │   ├── configure.ac
│   │   ├── main.c
│   │   ├── main.h
│   │   ├── Makefile.am
│   │   ├── project.yml
│   │   ├── scheduler.c
│   │   ├── scheduler.h
│   │   ├── time_conversions.c
│   │   └── time_conversions.h
│   └── services
│   └── mainapplication.service
└── mainapplication_0.0.bb
There has to be a way around this.
Edit 4: I am attempting to move all of my code into a src directory and use SUBDIR in my makefile.am
.
├── files
│   ├── MAIN_Application
│   │   ├── autogen.sh
│   │   ├── configure.ac
│   │   ├── include
│   │   ├── Makefile.am
│   │   ├── project.yml
│   │   ├── src
│   │   │   ├── main.c
│   │   │   ├── main.h
│   │   │   ├── Makefile.am
│   │   │   ├── scheduler.c
│   │   │   ├── scheduler.h
│   │   │   ├── time_conversions.c
│   │   │   └── time_conversions.h
│   │   └── test
│   │   ├── test_scheduler.c
│   │   └── test_time_conversions.c
│   └── services
│   └── mainapplication.service
└── mainapplication_0.0.bb
This leads to the same error of src no such file or directory.
I believe I need to add my other source files. What I am not sure is how to do so.
There is more than one way to do it, but one way or another, yes, you do need to tell Automake about all the sources involved. Depending on how you do it, you might need more than to just designate the sources.
Do I add them with MAIN_Application_SOURCES or do I need to add a Makefile.am in each subdirectory?
For the project as depicted in the question, you can, and probably should, add them to MAIN_Application_SOURCES in the top-level Makefile.am. In that case, you probably do not need any other Makefile.am files. You should provide paths relative to the directory containing the Makefile.am, so something like:
MAIN_Application_SOURCES = \
src/main.c \
src/scheduler.c \
src/utilities/time_conversions.c
(It's not necessary to use the one-per-line format above, but I find that a lot easier to read and maintain than putting multiple filenames on one line.) In this case, you probably also want to add subdir-objects to your AUTOMAKE_OPTIONS:
AUTOMAKE_OPTIONS = foreign subdir-objects
You need more Makefile.am files only if you want more Makefiles to be generated, which ordinarily would be associated with recursive make.
Furthermore, to be useful, a Makefile.am must define at least one target to be built, and I see only one natural target in the whole project (MAIN_Application). You could introduce so-called "convenience libraries" to serve as targets for subdirectory makes, but I do not favor this approach, nor, for that matter, most uses of recursive make.
Additionally, this ...
include_HEADERS = main.h
... does not mean what you probably think it means. It says that file main.h (in, or to be generated in, the current directory) should be installed to $(includedir) by make install. It says nothing whatever about main.h's relationship to other targets. Still working on the assumption of a single top-level Makefile.am, I think what you want here is altogether different:
AM_CPPFLAGS = -I$(srcdir)/include
That will cause what appears to be an appropriate -I option to be provided to the compiler.
Supposing that you do not require support for make dist, and you do not actually want to install your header files as part of make install, you do not need to explicitly designate individual header files to Automake.
The issue is with configure.ac!
This is my new folder structure
.
├── files
│   ├── MAIN_Application
│   │   ├── autogen.sh
│   │   ├── configure.ac
│   │   ├── include
│   │   │   ├── main.h
│   │   │   ├── scheduler.h
│   │   │   └── utilities
│   │   │   └── time_conversions.h
│   │   ├── Makefile.am
│   │   ├── project.yml
│   │   ├── src
│   │   │   ├── main.c
│   │   │   ├── Makefile.am
│   │   │   ├── scheduler.c
│   │   │   └── utilities
│   │   │   └── time_conversions.c
│   │   └── test
│   │   ├── test_scheduler.c
│   │   └── test_time_conversions.c
│   └── services
│   └── mainapplication.service
└── mainapplication_0.0.bb
My top level Makefile.am contains:
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src
My Makefile.am in src contains
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = MAIN_Application
MAIN_Application_SOURCES = main.c scheduler.c time_conversions.c
Obviously these did not change from my question above. In my configure.ac I added one item to AC_CONFIG_FILES. This line changed from
AC_CONFIG_FILES([Makefile])
to
AC_CONFIG_FILES([Makefile src/Makefile])
Anytime you use a subdirectory like this you need to tell autotools about it. I solved this by searching for similar projects on GitHub and I found this.
In this project they have a top level makefile, as well as a makefile in each subdirectory containing source files. In their configure.ac they also give a path to each makefile!

geopandas read shp file with fiona.errors.DriverError when wrapping up as a package

I have a package structure like this:
├── LICENSE
├── README.md
├── main
│   ├── __init__.py
│   ├── application.py
│   ├── core_function
│   │   ├── __init__.py
│   │   └── maps
│   │   ├── Taiwan
│   │   ├── Taiwan_detailed
│   │   └── taiwan.txt
└── setup.py
I try to wrap this package by python setup.py develop.
When it runs Taiwan = gpd.read_file(pkg_resources.resource_stream(__name__, 'maps/Taiwan/COUNTY_MOI_1090820.shp')) in application.py,
fiona.errors.DriverError: '/vsimem/9b633f8a8a3f457eadf710539afd2a22' not recognized as a supported file format. or
fiona._err.CPLE_OpenFailedError: '/vsimem/9b633f8a8a3f457eadf710539afd2a22' not recognized as a supported file format. would occur.
It reads perfectly when I run it as a script on my machine, but it fails as a package.
Knowing that the shp file should be read along with all the files in that folder, in my setup.py I also include them
packages= setuptools.find_packages(),
package_data={'maps': ['main/core_function/maps/*','core_function/maps/Taiwan/*']},
I was thinking the problem is about the path, but taiwan.txt can be read.
Any suggestion is appreciated. Thanks in advance.
So far I have not found the reason.
But I instead used the to_file method and work with only one file.
.to_file("package.gpkg", driver="GPKG")
This works in my package. The problem can be due to reading multiple files.

Rename massive files in multiple directories

I come to you guys because I do not know the way cuz I'm a nob, but I will investigate how to do what you answer me to make it.
I understand I need to create a Script, well, can you help me telling me how it has to be? And I will investigate the rest.
Btw I'm using mac os Catalina, and Win10 on Parallels.
I need to rename 24000 .jpg files they are distributed in more than 2,000 directories, (the parent directory is in desk btw) but I need to add the directory name BEFORE the real name of the files, I want this so they can all stay in one directory and keep order.
This is an extract of the filelist, and here is the entire .txt filelist on MF.
.
├── 1-Architecture and Design
│   ├── 3D Business Building
│   │   ├── shutterstock_71036254.jpg
│   │   ├── shutterstock_71036287.jpg
│   │   ├── shutterstock_71036290.jpg
│   │   └── shutterstock_72979264.jpg
│   ├── 3D Construction & Project
│   │   ├── shutterstock_10472749.jpg
│   │   ├── shutterstock_10486771.jpg
│   │   ├── shutterstock_10518571.jpg
│   │   ├── shutterstock_10574383.jpg
│   ├── 3D Frames Set
│   │   ├── shutterstock_90316177.jpg
│   │   ├── shutterstock_90316195.jpg
│   │   ├── shutterstock_90316198.jpg
│   │   ├── shutterstock_90316201.jpg
│   │   └── shutterstock_90316207.jpg
├── 2-Food and Drink
│   ├── Almonds
│   │   ├── shutterstock_68684467.jpg
│   │   ├── shutterstock_81734134.jpg
│   │   ├── shutterstock_81734977.jpg
│   │   ├── shutterstock_81736846.jpg
│   │   └── shutterstock_83209996.jpg
│   ├── Anise and Cinnamon Spices
│   │   ├── shutterstock_17474206.jpg
│   │   ├── shutterstock_20572118.jpg
│   │   ├── shutterstock_47658130.jpg
│   │   └── shutterstock_65957044.jpg
│   ├── Apple
│   │   ├── shutterstock_29247376.jpg
│   │   ├── shutterstock_29247382.jpg
│   │   ├── shutterstock_32146864.jpg
│   │   └── shutterstock_47037607.jpg
. .
. .
. .
etc
And it has to finish like this:
.
├── Main Directory
├──1-Architecture and Design-3D Business Building-shutterstock_71036254.jpg
├──1-Architecture and Design-3D Construction & Project-shutterstock_10472749.jpg
├──1-Architecture and Design-3D Frames Set-shutterstock_90316177.jpg
├──2-Food and Drink-Almonds-shutterstock_68684467.jpg
├──2-Food and Drink-Anise and Cinnamon Spices-shutterstock_17474206.jpg
├──2-Food and Drink-Apple-shutterstock_29247376.jpg
.
.
.
etc
I need to preserve one symbol like - to separate the directories in the filenames.
And don't care if the - has to be _ or something else, either if before I need to eliminate the spaces, I just need rename the files with the directory of each one.
Thank you so mucho to read me and take care : )
Finally I got it.
I had to use "A Better Finder Rename V.11.11.27", the program allowed me to do exactly what I needed, it let me choose up to 6 level of parental folders to rename my files.
I leave this answer to my question as a solution in case someone needs to do the same.
I am attaching screenshots.
You can see the name before and after
All in just 15 seconds.

Haskell Shake build: how can I set up a shared cache folder using shakeShare and/or shakeCloud?

I understand this is a new feature being worked on for GHC's Hadrian build system, so the workflow might be advanced, oddly specific, or still evolving. I read these so far:
docs/Cloud.md
Exploring Cloud Builds in Hadrian
It sounds like it should work for my use case: a domain-specific language for bioinformatics that would benefit greatly from caching comparisons between large genomes. I would be happy working from a basic minimal example or description of where to look. But I've included more details about my program too in case they make it easier...
The shortcut interpreter builds lots of artifacts with names derived from hashes of their inputs (somewhat Nix-like), and theoretically they should be portable across machines or even operating systems. A small program run might generate files + symlinks like this:
~/.shortcut
├── cache
│   ├── each
│   │   ├── 59e0192b1f
│   │   │   ├── 2633d268bf.ndb -> ../../../exprs/makeblastdb_nucl/2633d268bf_0.ndb
│   │   │   └── 2633d268bf.ndb.args -> ../../../cache/lines/3428ab5186.txt
│   │   ├── 623e07ac5b
│   │   │   ├── b9361606af.str.list -> ../../../exprs/extract_queries/b9361606af_0.str.list
│   │   │   └── b9361606af.str.list.args -> ../../../cache/lines/12ae82a598.txt
│   │   └── f477cfe47b
│   │   ├── 35e97350d8.bht -> ../../../exprs/blastn/ce1c174684_420e4f7fdf_35e97350d8_0.bht
│   │   └── 35e97350d8.bht.args -> ../../../cache/lines/9491bbe6a0.txt
│   ├── lines
│   │   ├── 0094e500eb.txt
│   │   ├── 12ae82a598.txt
│   │   ├── 246ddae0d8.txt
│   │   ├── 3428ab5186.txt
│   │   ├── 46767f8ae8.txt
│   │   ├── 5d54256d91.txt
│   │   ├── 61a97fd32d.txt
│   │   ├── 6de4b9ad67.txt
│   │   ├── 778251fd80.txt
│   │   ├── 81f7f42c42.txt
│   │   ├── 91ce94df26.txt
│   │   ├── 9491bbe6a0.txt
│   │   ├── b575c745e6.txt -> ../../cache/lines/6de4b9ad67.txt
│   │   ├── f094bac04c.txt
│   │   └── fcfb7a47a6.txt
│   ├── load
│   │   ├── 1e7afd22cf.gbk -> /home/jefdaj/shortcut/data/Mycoplasma_bovis_HB0801-P115.gbk
│   │   └── 28ce925871.gbk -> /home/jefdaj/shortcut/data/Mycoplasma_genitalium_M2321.gbk
│   ├── makeblastdb
│   │   └── 6de4b9ad67
│   │   ├── 6de4b9ad67.ndb.err
│   │   ├── 6de4b9ad67.ndb.nhr
│   │   ├── 6de4b9ad67.ndb.nin
│   │   ├── 6de4b9ad67.ndb.nsq
│   │   └── 6de4b9ad67.ndb.out
│   └── seqio
├── exprs
│   ├── any
│   │   └── e5677b1051_0.str.list.list -> ../../cache/lines/91ce94df26.txt
│   ├── blastn
│   │   ├── ce1c174684_420e4f7fdf_35e97350d8_0.bht -> ../../exprs/blastn/ce1c174684_420e4f7fdf_35e97350d8_0.bht.out
│   │   ├── ce1c174684_420e4f7fdf_35e97350d8_0.bht.out
│   │   └── ce1c174684_420e4f7fdf_35e97350d8_0.bht.out.err
│   ├── blastn_db
│   │   ├── 46e62edec1_420e4f7fdf_9ef76468c4_0.bht -> ../../exprs/blastn_db/46e62edec1_420e4f7fdf_9ef76468c4_0.bht.out
│   │   ├── 46e62edec1_420e4f7fdf_9ef76468c4_0.bht.out
│   │   └── 46e62edec1_420e4f7fdf_9ef76468c4_0.bht.out.err
│   ├── blastn_each
│   │   └── 46e62edec1_420e4f7fdf_2943ae4ea3_0.bht.list -> ../../cache/lines/12ae82a598.txt
│   ├── extract_queries
│   │   ├── 53376e198d_0.str.list -> ../../cache/lines/246ddae0d8.txt
│   │   ├── 53376e198d_0.str.list.tmp
│   │   ├── 53376e198d_0.str.list.tmp.err
│   │   ├── b9361606af_0.str.list -> ../../cache/lines/246ddae0d8.txt
│   │   ├── b9361606af_0.str.list.tmp
│   │   └── b9361606af_0.str.list.tmp.err
│   ├── extract_queries_each
│   │   └── d724d35317_0.str.list.list -> ../../cache/lines/91ce94df26.txt
│   ├── gbk_to_fna
│   │   ├── 262cf7e4e4_a355cc10e8_0.fna
│   │   └── 262cf7e4e4_cdab12f059_0.fna
│   ├── list
│   │   ├── 3bbbf950a3_0.str.list.list -> ../../cache/lines/91ce94df26.txt
│   │   ├── 65127d0127_0.fna.list -> ../../cache/lines/6de4b9ad67.txt
│   │   └── df91bd4d94_0.str.list.list.list -> ../../cache/lines/46767f8ae8.txt
│   ├── load_fna
│   ├── load_gbk
│   │   ├── 15e3d91521_0.gbk -> ../../cache/load/28ce925871.gbk
│   │   └── 74e27ec9a5_0.gbk -> ../../cache/load/1e7afd22cf.gbk
│   ├── makeblastdb_nucl
│   │   ├── 2633d268bf_0.ndb -> ../../cache/lines/81f7f42c42.txt
│   │   └── 954abc5fe7_0.ndb -> ../../cache/lines/81f7f42c42.txt
│   ├── makeblastdb_nucl_each
│   │   └── 209fe6406d_0.ndb.list -> ../../cache/lines/5d54256d91.txt
│   ├── num
│   │   └── a53b190835_0.num -> ../../cache/lines/778251fd80.txt
│   ├── singletons
│   │   └── 954abc5fe7_0.fna.list.list -> ../../cache/lines/0094e500eb.txt
│   └── str
│   ├── 90811d06ee_0.str -> ../../cache/lines/f094bac04c.txt
│   ├── b4da62b027_0.str -> ../../cache/lines/fcfb7a47a6.txt
│   └── b81c880be5_0.str -> ../../cache/lines/61a97fd32d.txt
├── profile.html
└── vars
├── mapped.str.list.list -> ../exprs/extract_queries_each/d724d35317_0.str.list.list
├── mbov.fna -> ../exprs/gbk_to_fna/262cf7e4e4_a355cc10e8_0.fna
├── mgen.fna -> ../exprs/gbk_to_fna/262cf7e4e4_cdab12f059_0.fna
├── result -> ../exprs/any/e5677b1051_0.str.list.list
└── single.str.list -> ../exprs/extract_queries/53376e198d_0.str.list
27 directories, 64 files
I tried adding shakeShare = Just "sharedir" to my Shake options. When I run the build, delete all artifacts, and re-run, it fails to find a cached file:
error! Error when running Shake build system:
at want, called at ./ShortCut/Core/Eval.hs:253:7 in main:ShortCut.Core.Eval
* Depends on: eval
at need, called at ./ShortCut/Core/Eval.hs:256:25 in main:ShortCut.Core.Eval
* Depends on: /root/.shortcut/vars/result
at need, called at ./ShortCut/Core/Actions.hs:110:3 in main:ShortCut.Core.Actions
* Depends on: /root/.shortcut/exprs/all/b2ba759dce_0.str.list
at need, called at ./ShortCut/Core/Actions.hs:110:3 in main:ShortCut.Core.Actions
* Depends on: /root/.shortcut/exprs/any/0a89231af6_0.str.list.list
at need, called at ./ShortCut/Core/Actions.hs:110:3 in main:ShortCut.Core.Actions
* Depends on: /root/.shortcut/exprs/list/df91bd4d94_0.str.list.list.list
at need, called at ./ShortCut/Core/Actions.hs:110:3 in main:ShortCut.Core.Actions
* Depends on: /root/.shortcut/vars/mapped.str.list.list
at need, called at ./ShortCut/Core/Actions.hs:110:3 in main:ShortCut.Core.Actions
* Depends on: /root/.shortcut/exprs/extract_queries_each/730901fdda_0.str.list.list
at need, called at ./ShortCut/Core/Actions.hs:110:3 in main:ShortCut.Core.Actions
* Depends on: /root/.shortcut/exprs/tblastn_each/46e62edec1_183f436b85_a5a22079c6_0.bht.list
at need, called at ./ShortCut/Core/Actions.hs:110:3 in main:ShortCut.Core.Actions
* Depends on: /root/.shortcut/exprs/num/a53b190835_0.num
* Raised the exception:
/home/jefdaj/shortcut/sharedir/.shake.cache/2faae061b9976bed/0x134125AC: getPermissions:getFileStatus: does not exist (No such file or directory)
That was expected, but now how do I go about fixing it? The hashes should be stable because all symlinks are relative to the top level tmpdir (~/.shortcut here). And Shake should know about each of them since I make sure to call trackWrite.
Do I need to explicitly add all files to a cache using newCache, newCacheIO, and/or an oracle as they're built, or am I missing something simpler?
Ideally I would have a shared directory to cache everything done on the demo server, and also give users the option to connect their own instances to it like a Nix binary cache.
I misunderstood what Shake caches are for: I assumed they cache build artifacts indexed by all their inputs, but actually they just cache reading + processing of files used to decide things while producing those artifacts. Like in this example from the docs:
digits <- newCache $ \file -> do
src <- readFile' file
return $ length $ filter isDigit src
"*.digits" %> \x -> do
v1 <- digits (dropExtension x)
v2 <- digits (dropExtension x)
writeFile' x $ show (v1,v2)
As it says, "This function is useful when creating files that store intermediate values, to avoid the overhead of repeatedly reading from disk, particularly if the file requires expensive parsing." I think the cache here is equivalent to writing an intermediate .digits file and needing it twice.
I implemented what I was looking for separately by writing a need' function that checks if a file is in the cache (local or remote), fetches it if possible, and then calls Development.Shake.need. Depending on the build system, it might also be possible to do this kind of "caching" with something like rsync.
The Shake cache still looks very useful for the part of my code that needs to read a list of all sequence IDs into memory once per program run and refer to them later from various rules.
I think there's a confusion here that newCache and newCacheIO are involved with the Cloud Shake feature. They aren't - in fact, newCache happens to be one of the things that has no impact on the cloud cache (coincidentally, rather than because of the Cache in the name). I see no reason your use case shouldn't work with Cloud Shake.
The exception /home/jefdaj/shortcut/sharedir/.shake.cache/2faae061b9976bed/0x134125AC: getPermissions:getFileStatus: does not exist (No such file or directory) seems to imply that Shake has recorded that the above file is in the cache, and can be used to satisfy the file. So the question is where did the file go? Is it possible when you cleaned the files that they deleted the files from the cache too? Shake can be run with both --share-copy and --share-symlink - I'd recommend the former to ensure there is less action-at-a-distance, which might also explain what is deleting the files. I'd also recommend using Shake HEAD, as there are some fixes that haven't yet been released.
If that still doesn't work, perhaps raise a ticket on the Shake GitHub?

Why does Doxygen create so many empty folders?

After running Doxygen over my code base, it created two new directories:
html and latex.
Both contain documetnation files, as well as lots of these empty folders:
/html
├── d0
│   ├── d00
│   ├── d01
│   ├── d02
│   ├── d03
│   ├── d04
│   ├── d05
│   ├── d06
| ├── ...
├── d1
│   ├── d00
│   ├── d01
│   ├── d02
│   ├── d03
│   ├── d04
│   ├── d05
│   ├── d06
| ├── ...
well.. not all of them are empty.. very few have files inside.
│   ├── d3a
│   ├── d3b
│   │   └── solarpower_8h_source.html
│   ├── d3c
│   ├── d3d
What is all of this? Some kind of directory hash table? why?
I assume it's not Doxygen specific, so any links to the practice would be appreciated.
EDIT:
found it.
http://www.doxygen.nl/manual/config.html#cfg_create_subdirs
This happens when CREATE_SUBDIRS is enabled in doxygen's configuration files. If you have a large project with tens of thousands of output files, this can help to avoid slow directory access on some file systems.

Resources