davfs2 on Solaris 11

2007-12-12
2013-04-16
  • Hi,
    I have installed Solaris 11 on a SunFire X4100 server (AMD processor).
    There is a fuse implementation from an OpenSolaris project built on the machine,
    neon is installed from sources. gcc3.4.6 comes from the package available on sunfrreware.com.
    When trying to compile davfs2-1.2.2, make fails saying
    make  all-recursive
    Making all in po
    Making all in etc
    Making all in man
    Making all in de
    Making all in es
    Making all in src
    gcc -DPROGRAM_NAME=\"mount.davfs\"  -DDAV_SYS_CONF_DIR=\"/usr/local/etc/davfs2\"  -DDAV_SYS_RUN=\"/var/run/mount.davfs\"  -DDAV_SYS_CACHE=\"/var/cache/davfs2\"  -DDAV_SECRETS=\"secrets\"  -DDAV_CONFIG=\"davfs2.conf\"  -DDAV_CERTS_DIR=\"certs\"  -DDAV_CLICERTS_DIR=\"private\"  -DDAV_DATA_DIR=\"/usr/local/share/davfs2\"  -DLOCALEDIR=\"/usr/local/share/locale\"  -DDAV_USER=\"davfs2\"  -DDAV_GROUP=\"davfs2\" -DHAVE_CONFIG_H -I. -I..    -I/usr/local/include -Wall -g -O2 -I/usr/include/neon -D_LARGEFILE64_SOURCE -DNE_LFS -MT cache.o -MD -MP -MF .deps/cache.Tpo -c -o cache.o cache.c
    cache.c:26:18: argz.h: Datei oder Verzeichnis nicht gefunden
    cache.c:29:19: error.h: Datei oder Verzeichnis nicht gefunden
    cache.c: In function `dav_init_cache':
    cache.c:424: Warnung: implizite Deklaration der Funktion »LOG_MAKEPRI«
    cache.c:478: Warnung: implizite Deklaration der Funktion »error«
    cache.c: In function `write_node':
    cache.c:2676: Warnung: unsigned int Format, mode_t Argument (Argument 5)
    *** Error code 1
    make: Fatal error: Command failed for target `cache.o'
    Current working directory /opt/install/davfs2-1.2.2/src
    *** Error code 1
    The following command caused the error:
    failcom='exit 1'; \ for f in x $MAKEFLAGS; do \   case $f in \     *=* | --[!k]*);; \     *k*) failcom='fail=yes';; \   esac; \ done; \ dot_seen=no; \ target=`echo all-recursive | sed s/-recursive//`; \ list='po etc man src'; for subdir in $list; do \   echo "Making $target in $subdir"; \   if test "$subdir" = "."; then \     dot_seen=yes; \     local_target="$target-am"; \   else \     local_target="$target"; \   fi; \   (cd $subdir && make  $local_target) \   || eval $failcom; \ done; \ if test "$dot_seen" = "no"; then \   make  "$target-am" || exit 1; \ fi; test -z "$fail"
    make: Fatal error: Command failed for target `all-recursive'
    Current working directory /opt/install/davfs2-1.2.2
    *** Error code 1
    make: Fatal error: Command failed for target `all'

    I can only see warnings, no error.
    Is there any experience with buildimg davfs2 on Solaris? Is that possible at all?

    Thank you for a short hint,

    Robert

     
    • Werner Baumann
      Werner Baumann
      2007-12-12

      Hello Robert,

      most probably davfs2 can be build and run on Solaris. But there is some work to do.

      I use the GNU tools to build davfs2 in order to keep it port*able*. But it is not yet port*ed* to anything but GNU/Linux. As I have neither experience with porting to another OS nor with Solaris, I cannot do this. But if you succeed, I would like to include your work into the davfs2-sources.

      As far as I know (and I don't know much), this are the issues with porting:

      - missing or differently named header files:
        e.g.: "cache.c:29:19: error.h: Datei oder Verzeichnis nicht gefunden"
        You have to find the matching header file on Solaris, and than make the includes
        conditinal, like
        #ifdef HAVE_ERROR_H
        #include <error.h>
        #else
        #include <header_on_solaris.h>
        #endif
        You may check the output of ./configure and config.h to find header related problems.

      - missing functions and macros:
        davfs2 uses GNU extensions, so some of the functions may not be available on Solaris.
        e.g. "LOG_MAKEPRI"
        In this case you will have to conditionally define a replacement function for this.

      - There might be problems with missing or differently defined data types.

      - There might be problems with the fuse-devices. davfs2 uses /dev/fuse, major 10, minor 229,
        for communication with the kernel. This may be different on Solaris.
        You make look at the fuse_kernel.h from your kernel sources for differences and make
        conditional changes in davfs2 defaults.h and kernel_interface.h.

      As I told, I am not able to do this, nevertheless some hints:

      - You may look at the sources of other packages (like e.g. neon). Probable a lot of
        the porting problems are allready solved there.

      - For missing functions you may look at http://www.gnu.org/software/gnulib/.

      - You may look for help on Solaris related news groups and web sites.

      - You will most probably have to change configure.ac and use ./bootstrap to rebuild the package.

      Please tell me about your progress and further problems.

      Have a lot of fun and time
      Werner