We are working on an open-source mesher for CFD and I have tried all three examples you have mentioned in your post. Of course my comments might be biased towards our own developments ... ;)
Our own meshing software ENGRID (see http://engits.com/engrid
) was started out of desperation about the lack of an open-source or low cost mesher that could handle prismatic boundary layers reliably (NETGEN is used internally for tet-meshing).
GMSH and NETGEN are excellent pieces of software but when it comes to boundary layers there was nothing available at the time. My experience with SALOME is a bit limited but I think it serves mainly as a front-end to NETGEN and GMSH or other, possibly commercial, programs. Feel free to correct me if I am wrong.
At the moment I don't think you will get an open-source solution fulfilling all your requirements -- but let me go through them step by step:
handles complicated geometries
I think NETGEN, GMSH, and ENGRID handle complicated geometries. ENGRID does have the option to create prismatic boundary layers. We have had some feedback hinting that maybe the boundary layer support could be better than that of a popular commercial tool ... user friendliness might not be the same, though. We are, however, willing to take comments and work on improving the GUI and usability.
robust (rarely/never crashes)
Hard to say -- try for yourself. I, personally, had little to no crashes with NETGEN or GMSH.
imports at least IGES and STL formats
At the moment ENGRID requires a surface mesh as input. Hence you will have to use NETGEN or GMSH for that task. Both import IGES and STEP and NETGEN also has some STL support which I haven't tried myself. In the near future we plan to offer our own surface meshing within ENGRID, based on imported STL files (IGES and STEP support will come later). At the moment we use GMSH for surface meshing but my personal opinion is that it can be a bit tedious to get the required resolution, because the edge-length can be defined at points of the geometry; if you don't have a point you need to artificially introduce a point with your CAD program. Again, I can only speak about my experiences and maybe there is a better way of doing this.
runs in a script mode (with all GUI options available in the script mode)
GMSH does; NETGEN I don't know. ENGRID does not at the moment, but that is definitely something we will implement -- also for testing purposes.
Another good tool worth mentioning is snappyHexMesh which is part of the OpenFOAM distribution. It is an all hex unstructured tool with support for boundary layers. Input is an STL geometry and it will only run in a script/batch mode.
I hope this was helpful.